nlog

XJ20夏令营做题记录(长期更新)

為{幸葍}努か 提交于 2020-08-20 08:20:18
7.2 CF1140E 题意:给你一个数组要给是-1的填上数,使得没有奇数长度的回文串,问方案数 思路:可以简化成没有长度为3的回文串,所以我们把奇数偶数位分开,要满足每个数组不能有连续相同的值 用$dp[i][2]$表示中间有$i$个-1,两端是否数值相同,转移即可,注意边界和特殊情况 Aizu_ALDS1_5_C 题意:分形图求每个点坐标 思路: 计算几何要补补。。 递归模拟即可 SHOI2018汉诺塔 题意:自己看 思路:从平常的汉诺塔出发,$f[i]=f[i-1]*2+1$,是一个线性递推式,打表找一下规律,发现不同优先级下有关$n$都是一个线性递推式 所以用dfs求出$f[1]$,$f[2]$,$f[3]$,通过三项即可求出线性递推式的系数和常量 (留坑补DP正解) CF97B 题意:在平面上的点集中加入若干个点,使得任意两点在一条平行于x/y轴的直线上或这两点围成的矩形上或内部有其他点 思路:发现给你$n<=1e4$而最多可以输出$2e5$个点,所以猜出加的点应该是log关系,所以想到分治 按照要求对于每一层分治,都可以加该循环内点数个数个点,所以我们以$Point[mid].x$为轴,其他点的$y$值都“拍到”该轴上,可以发现这样左右两边任意点对都可以满足要求 CF273C 题意:有n匹马,每匹马最多有3个敌人,把马划分为2个集合,使得每匹马在该集合中最多只有1个敌人

算法的时间复杂度和空间复杂度

杀马特。学长 韩版系。学妹 提交于 2020-08-19 17:10:34
算法的时间复杂度和空间复杂度 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 算法的时间复杂度 时间频度 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的 语句执行次数 称为 语句频度 或 时间频度 。 时间复杂度 一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的 渐进时间复杂度 ,简称 时间复杂度 。 计算时间复杂度的方法 用常数1代替运行时间中的所有加法常数 修改后的运行次数函数中,只保留最高阶项 去除最高阶项的系数 常见的时间复杂度 常数阶O(1) 无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1) int i = 1; int j = 2; i++; j++; 上述代码在执行的时候,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O(1)来表示它的时间复杂度。 对数阶O(log2n) int i = 1; while(i<n){ i

C# Log4net记录日志

£可爱£侵袭症+ 提交于 2020-08-18 10:46:32
前言 1、需求 需求很简单,就是在C#开发中高速写日志。比如在高并发,高流量的地方需要写日志。我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的。 解决方案 2.1、简单原理说明 使用 列队 先缓存到内存,然后我们一直有个 线程 再从列队中写到磁盘上,这样就可以高速高性能的写日志了。因为速度慢的地方我们分离出来了,也就是说程序在把日志扔给列队后,程序的日志部分就算完成了,后面操作磁盘耗时的部分程序是不需要关心的,由另一个线程操作。 俗话说,鱼和熊掌不可兼得,这样会有一个问题,就是如果日志已经到列队了这个时候程序崩溃或者电脑断电都会导致日志部分丢失,但是有些地方为了高性能的写日志,是否可以忽略一些情况,请各位根据情况而定。 2.2、示例图 关键代码部分 这里写日志的部分LZ选用了比较常用的 log4net ,当然也可以选择其他的日志组件,比如nlog等等。 3.1、日志至列队部分 第一步我们首先需要把日志放到列队中,然后才能从列队中写到磁盘上。 public void EnqueueMessage( string message, FlashLogLevel level, Exception ex = null ) { if ((level == FlashLogLevel.Debug && _log

手把手教你点分 点分树

可紊 提交于 2020-08-18 07:47:45
点分 •先看一道题 •P3806 给定一棵有 n 个点的树,询问树上距离为 k 的点对是否存在。 •N<=10000 •相信聪明的你已经想到了!n 遍dfs嘛! •但是过不了 那我们来看看点分怎么做 •什么是点分治? •点分治是处理树上问题的一种高效的办法,时间复杂度很优秀,而且思想比较巧妙。 •首先我们引入树的重心 •树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 •什么意思呢? •我们可以从这里推得以树的重心为根的任意一颗子树大小不超过n/2 •怎么求呢? •直接由定义dfs就好了 •看代码 •我们只需要不断寻找重心,用这些重心来计算我们要的答案 •我们举个例子 •首先我们可以找到一个重心 并且计算经过重心的所有路径对答案的贡献 •通常是遍历子树来求解 •这道题 求是否有长度为k的路径来讲 就是以重心为起点 记录到子树每个点中的长度 •如果能用桶就直接搞 如果不能就用 m a p map m a p 每找到一条距重心长度为 x x x 的点 就看一下之前有没有找到距重心长度为 k − x k-x k − x 的点 注意两个点不能再重心的同一个儿子的子树内 •经过这个重心的路径贡献就统计了 •接着重心把原树分成了多个子树 •就分治下去 计算子树的贡献 •同样再找子树重心 统计贡献 再分治…

[转].Net Core Web应用发布至IIS后报“An error occurred while starting the application”错误

爷,独闯天下 提交于 2020-08-18 03:07:01
本文转自: http://www.cnblogs.com/TomGui/p/6438686.html An error occurred while starting the application. .NET Core X64 v4.1.1.0 | Microsoft.AspNetCore.Hosting version 1.1.0-rtm-22752 | Microsoft Windows 6.3.9600 报这个错,一脸懵逼,环境都按官方文档配置正确了,怎么办? 1.修改web.config文件,stdoutLogEnabled改为true,如下: < aspNetCore processPath ="dotnet" arguments =".\Dialysis.WebApi.dll" stdoutLogEnabled ="true" stdoutLogFile =".\logs\stdout" /> 补充一点,这个文件是在发布之后的文件里,如果没有单独配置发布文件。 就在\bin\Debug\netcoreapp1.1 里面,在根目录下有web.config文件。 注: 不在源文件的根目录下面。 另外,需 要手动建 这个 logs 文件夹 ,因为iis不会给你自动创建。 我出这个问题的原因也是因为项目在startup的时候没有读到 nlog.config这个文件导致的错误。

堆排序以及Top K问题-Java实现

强颜欢笑 提交于 2020-08-17 23:45:50
一.问题背景   如果做过参加过面试或者做过一些面试题,应该知道特别经典的top K问题,比如“找出无序数组中的最大或者最小K个数”:   这种题可以排序后再输出最大或者最小的几个。但是不论是使用快排还是归并排序,毫无疑问,空间和时间复杂度的开销都是不满足面试官的要求的;而使用“堆”这种数据结构就比较好的解决这种问题,空间开销O(1),时间开销O(N logK)。   需要注意的是,这里说的“堆”不是指堆栈的堆,而是一种数据结构,更准确的说是“完全二叉树”。   下面就详细对堆这种数据结构进行介绍,注:本文的内容是在学习 浙江大学 的 何钦铭 教授的数据结构课程后整理的。 二.堆的介绍 2.1数组和链表实现优先队列   再说Top K之前,先说一下调度算法。学过操作系统就知道,进程调度有多种算法,而最简单的就是“先到先服务”算法,这种算法可以简单的使用队列来实现,但是存在一个问题就是无法根据进程的优先级调整执行顺序,比如有两个进程,一个进程只是连接打印机打印一张纸,另外一个进程负责核心功能处理,很明显,核心功能处理的进程优先级更高,但是操作系统按照先到先服务算法来调度时,核心功能处理的进程并不是优先调度;   这个时候可以切换为“按照优先级”进行调度,只需要每次选择最高优先级的进程执行,自己进行实现的话,有多种方式:      仔细想一下,Top K的问题

XJ20夏令营做题记录(长期更新)

…衆ロ難τιáo~ 提交于 2020-08-17 19:13:32
7.2 CF1140E 题意:给你一个数组要给是-1的填上数,使得没有奇数长度的回文串,问方案数 思路:可以简化成没有长度为3的回文串,所以我们把奇数偶数位分开,要满足每个数组不能有连续相同的值 用$dp[i][2]$表示中间有$i$个-1,两端是否数值相同,转移即可,注意边界和特殊情况 Aizu_ALDS1_5_C 题意:分形图求每个点坐标 思路: 计算几何要补补。。 递归模拟即可 SHOI2018汉诺塔 题意:自己看 思路:从平常的汉诺塔出发,$f[i]=f[i-1]*2+1$,是一个线性递推式,打表找一下规律,发现不同优先级下有关$n$都是一个线性递推式 所以用dfs求出$f[1]$,$f[2]$,$f[3]$,通过三项即可求出线性递推式的系数和常量 (留坑补DP正解) CF97B 题意:在平面上的点集中加入若干个点,使得任意两点在一条平行于x/y轴的直线上或这两点围成的矩形上或内部有其他点 思路:发现给你$n<=1e4$而最多可以输出$2e5$个点,所以猜出加的点应该是log关系,所以想到分治 按照要求对于每一层分治,都可以加该循环内点数个数个点,所以我们以$Point[mid].x$为轴,其他点的$y$值都“拍到”该轴上,可以发现这样左右两边任意点对都可以满足要求 CF273C 题意:有n匹马,每匹马最多有3个敌人,把马划分为2个集合,使得每匹马在该集合中最多只有1个敌人

CDQ 分治多维偏序问题小结

独自空忆成欢 提交于 2020-08-16 19:10:17
一、分治基础 1. 归并排序 题目大意: 给定一个长度为 n 的数组,你需要对它进行排序。1≤n≤10 5 。 Solution: 考虑把整个数组分成两个部分,等两部分都排完序后再把这两个有序的数组进行合并。 动图演示 合并的过程可以用双指针,时间复杂度是 O(n) 的。 这样总时间复杂度 T(n)=2T(n/2)+O(n),得出 T(n)=O(n log n)。 void solve( int l, int r){ if (l==r) return ; int mid=(l+r)>> 1 ; solve(l,mid),solve(mid + 1 ,r); int x=l,y=mid+ 1 ,cnt= l; while (x<=mid&&y<= r){ if (a[x]<a[y]) t[cnt++]=a[x++ ]; else t[cnt++]=a[y++ ]; } while (x<=mid) t[cnt++]=a[x++ ]; while (y<=r) t[cnt++]=a[y++ ]; for ( int i=l;i<=r;i++) a[i]= t[i]; } 所谓分治,就是把一个规模为 n 的问题分解为两个规模减半的子问题,解决完子问题后再通过子问题的结果得到原问题的答案。 2. 棋盘覆盖问题 题目大意: 有一个大小为 2 n ×2 n 的棋盘,其中抠掉了一个方格

八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

好久不见. 提交于 2020-08-16 12:40:43
一、分类 1.内部排序和外部排序  内部排序 :待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程。 外部排序 :待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。 2.比较类排序和非比较排序 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 二、复杂度分析,算法稳定性和适用场景 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 三、八大排序算法详解 1.选择排序 1.1 动图演示 1.2 思路分析 1. 第一个跟后面的所有数相比, 如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或最大的数) 2. 下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大

AHOI2020 不知道是不是自闭记

99封情书 提交于 2020-08-16 02:57:27
\(Day\ -50 \ to \ Day\ -2\) 毫无游戏体验的蒟蒻膜你赛瑟瑟发抖。。。校内膜你赛经常弃赛或者打完暴力就走人,所以几乎每次都能在排行榜的榜尾发现我反向 \(rk1\) 。天天被 Binary_Search_Tree 等神仙爆踩。 \(Day\ -1\) 说实话今天是体验最好的一次膜你赛。。。T2几乎想到了正解(我一般全部只能打暴力)。就这样吧,希望省选少考计数。 \(Day 0\) 早上发现昨晚打CF rating涨了176,非常激动(省选前才第一次上紫,我太菜了),然后早上除了看了一会儿数论其他时间全部在讨论昨晚CF题目。下午因为在本校试机所以丝毫不慌,也不需要什么准备,还打了几个板子。 \(Day 1\) 刚打开题的时候有一点小紧张(虽然我今年是去玩玩,只是日常紧张而已)。压缩包密码是一堆毫无规律的很长的一串(今年特别长)。 打开T1后我迅速想到了一个 \(O(nlog^3n)\) 的做法:对于撤销线段树分治,然后二分答案,最后扔进权值线段树里找。等等,我是弱智吗?为啥要线段树分治。。。然后发现也不需要二分答案,可以直接扔进线段树里二分,时间复杂度 \(O(nlogn)\) ,写完后调了很长时间细节最后大样例过了就没管了,当时非常开心,可是考完出来听说被卡常了跟两个 \(log\) 得的分数相同( \(60pts\) ),真的吐了。