摘要: 用到了kase避免memset超时 阅读全文
posted @ 2018-10-16 21:10 Erio 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 更简单的做法:定义状态dp[i][j]表示在已经用了i根火柴的情况下拼出来了剩余部分(是剩余部分,不是已经拼出来了的)为j(需要%m)的最大长度,一个辅助数组p[i][j]表示状态[i][j]的最高位是往后添加kdp[i][j]=max(dp[i][j],dp[i-c[k]][(j*10+k)%m] 阅读全文
posted @ 2018-10-16 21:09 Erio 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 第k大的题一般都有点麻烦 pbds库的tree,需要研究一下https://codeforces.com/blog/entry/11080find_by_order() and order_of_key(). The first returns an iterator to the k-th lar 阅读全文
posted @ 2018-10-08 21:29 Erio 阅读(419) 评论(0) 推荐(0) 编辑
摘要: Dreamoon and MRT 题目链接: http://codeforces.com/group/gRkn7bDfsN/contest/212299/problem/B 只需要考虑相对位置,设a0位置为0枚举由于对称性,可以设第一步向右,这样总时间减少一半递归的话省去了cnt部分,直接从O(N2 阅读全文
posted @ 2018-10-08 20:21 Erio 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 见紫书。(c,h)的更新策略://前面的高度为0了,直接插入因为ans c+h,c大,h还小,那么肯定不是最优左上角,更新新加入列的列//新的一列高度最小,就删掉了其他的,只留这个高度从上到下,从左到右扫描一遍 #include<cstdio> #include<cstring> #include< 阅读全文
posted @ 2018-10-06 15:00 Erio 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 每次找到两边离中心最高的板,如果等,再找外围的最高版...画图便于理解两边先找到距离(-1,1)最近的最大值L和R,因为可能存在多个最高的挡板。接着比较两个L和R的大小,相等的话分别分析两边,取最小值注意L和R一边高的话两边都会流,所以这块的时间要乘2。比如分析右边,从最外围开始,顶部画平行线往内部 阅读全文
posted @ 2018-10-06 14:58 Erio 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 单调队列,滑动窗口 int t=0; while(scanf("%d",&n)==1){ if(t) printf("\n"); //有点方便 单调队列用deque很方便 for(int i=1;i<=n;i++){ 维护单调队列 while(!q.empty()&&a[i]<=a[q.back() 阅读全文
posted @ 2018-10-06 14:56 Erio 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 就是尺取 阅读全文
posted @ 2018-10-06 14:54 Erio 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 边读入边处理 优化了速度一开始有想错了的地方。处理输入有点想用stringstream, 的问题在于他把字符串连续的数字作为一个整体,遇到空格才分开,所以不适用 阅读全文
posted @ 2018-10-05 19:24 Erio 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 先证明把每次i放到i位置最后次数最少:感觉,可以,用归纳法? //在序列后再加一个相同的序列,就可以模拟用各个数字开头的情况了每个位置不对的只需要换一次54123 ,5固定->41235变成12345 任何一个数固定不变,都相当于从这种情况对应的1所在的位置开始排一遍12345.(例如54123 , 阅读全文
posted @ 2018-10-05 19:22 Erio 阅读(166) 评论(0) 推荐(0) 编辑