07 2015 档案
摘要:最近搞数论...整个人都不好了, 状态也很差...果然智商是硬伤. 昨天STSR round#4 也是跪了...后天开始集训...希望能有状态吧. 我还不想滚粗....看了一些大神的博客.. Orz都是随便停课的...然而我校是不可能的...不吐槽了, 加油吧!
阅读全文
摘要:求 ∑ gcd(x, y) = p ( p 是质数, 1 using namespace std;typedef long long ll;const int maxn = 10000009;bool check[maxn];int prime[maxn], N = 0, mu[maxn], f[m...
阅读全文
摘要:Orz..跑得还挺快的#10自从会树链剖分后LCA就没写过倍增了...这道题用可持久化线段树..点x的线段树表示ROOT到x的这条路径上的权值线段树-------------------------------------------------------------------------#in...
阅读全文
摘要:求 answer = ∑ [gcd(x, y) = d] (1 using namespace std;const int maxn = 50009;bool check[maxn];int mu[maxn], prime[maxn], N = 0;void init() { memset(chec...
阅读全文
摘要:n >= k 部分对答案的贡献为 k * (n - k)n using namespace std;typedef long long ll;int main() { ll ans = 0; int n, k; cin >> n >> k; if(n >= k) { ans = ll(k) * ...
阅读全文
摘要:T了一版....是因为我找质因数的姿势不对...考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了.但是我们可以做的更好. 注意到h(n) =∑ d * phi(n / d) (d | n) 是狄利克雷卷积的形式, 而且f(...
阅读全文
摘要:2014.9被同桌kpm带入坑....虽然现在不同班了...(Orz搞分班程序坑了他自己...)入OI之后就没什么其他兴趣了...偶尔看看番..是数据结构控..(算不上吧?) 指针党.来自广东, 表示压力略大...Orz SM中学, JSJZ常用的ID是 JSZX11556,HLFTFSFP新浪微博...
阅读全文
摘要:要求gcd(x, y) = p (1 #define clr(x, c) memset(x, c, sizeof(x))#define rep(i, n) for(int i = 0; i > n; init(); for(int i = 2; i <= n; i++) phi[i] += ph...
阅读全文
摘要:简单的拓扑图dp..A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m)----------------------------------------------------------------#include#define...
阅读全文
摘要:因为是从1~n插入的, 慢插入的对之前的没有影响, 所以我们可以用平衡树维护, 弄出最后的序列然后跑LIS就OK了 O(nlogn)--------------------------------------------------------------------#include#define ...
阅读全文
摘要:最优的做法最后路面的高度一定是原来某一路面的高度.dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 #define rep(i, n) for(int i = 0; i > n; rep(i, n) { scanf("%d", H + i);...
阅读全文
摘要:对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra.---------------------------------------------------------------------#include#define rep(i, n) for(int i ...
阅读全文
摘要:从左到右扫一遍, 维护一个单调不递减队列. 然后再从右往左重复一遍然后就可以统计答案了。----------------------------------------------------------------------------#include#define rep(i, n) for(...
阅读全文
摘要:假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 = ∑phi(i) * 2 + 1 ( 1 using namespace std;const in...
阅读全文
摘要:一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 = 2 , i * k using namespace std;typedef long long ll;const int m...
阅读全文
摘要:水状压dp.dp(x, s) = max{ dp( x - 1, s - {h} ) } + 奖励(假如拿到的) (h∈s). 时间复杂度O(n * 2^n)-----------------------------------------------------------------------...
阅读全文
摘要:二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断.---------------------------------------------------------------------------#include#define rep(i, n...
阅读全文
摘要:直接DFS, 然后用set维护一下就好了.... O(nlogn)--------------------------------------------------------------------------------#include#define rep(i, n) for(int i =...
阅读全文
摘要:这道题很好想, 离线, 按询问的x排序从小到大, 然后用并查集维护连通性, 用平衡树维护连通块的山的权值, 合并就用启发式合并.时间复杂度的话, 排序是O(mlogm + qlogq), 启发式合并是O(nlog²n), 询问是O(qlogn).---------------------------...
阅读全文
摘要:对于每个点都跑最短路, 然后我们得到了个DAG, 在这DAG上更新每条边的答案.考虑e(u, v)∈DAG对答案的贡献: 假设从S到u得路径数为A[u], 从v出发到达任意点的路径数为B[v], 那么e(u, v)的答案可以加上A[u] * B[v](显然). A可以按拓扑序递推得到, B可以通过记...
阅读全文
摘要:每一连通块砸开一个就可以拿到所有的钱, 所以用并查集求连通块数-------------------------------------------------------------------#include#define rep(i, n) for(int i = 0; i > n; ans ...
阅读全文
摘要:枚举每个长度为k的区间, 然后用平衡树找中位数进行判断, 时间复杂度O(nlogn).早上起来精神状态不太好...连平衡树都不太会写了...果断去看了会儿番然后就A了哈哈哈----------------------------------------------------------------...
阅读全文
摘要:一开始写了个RMQ然后就T了...好吧正解是单调队列, 维护两个单调队列...--------------------------------------------------------------------------------#include#define rep(i, n) for(i...
阅读全文
摘要:dp(x, p) 表示序列中第x个数, 上一个数是p构成的等差数列的最长. 转移时从[1, x)中枚举p = seq[] 就行了.时间复杂度O(n²logn)-----------------------------------------------------------------------...
阅读全文
摘要:序列最大长度2w * 5 = 10w, O(n²)的LCS会T..LCS 只有当a[i] == b[j]时, 才能更新答案, 我们可以记录n个数在第一个序列中出现的5个位置, 然后从左往右扫第二个序列时将第一个序列对应位置的值更新, 用树状数组维护. 时间复杂度O(nlogn)-----------...
阅读全文
摘要:多重背包...----------------------------------------------------------------------------#include #define rep(i, n) for(int i = 0; i > n; rep(i, n) scanf("%...
阅读全文
摘要:建颗权值线段树就行了...连离散化都不用...没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4....------------------------------------------------------------------------------------------#i...
阅读全文
摘要:这种题做法应该很多吧...说说我的做法设b出现位置为pos, 从pos开始向右扫一遍顺便维护( x )(> b 的数的个数 - b 的数的个数 - #include#include#include #define rep(i, n) for(int i = 0; i > n >> b; rep(i...
阅读全文
摘要:贪心...先枚举k, 然后从左往右扫一遍, 发现位置p的牛的状态不符合就将 [p, p + k ) 的牛都转身, 假如p + k - 1 已经超过了最右边牛的位置那这个k就不符合要求. 符合要求的就可以用来更新answer.这个贪心的正确性是很显然的.前p - 1头牛都已朝前, 再改动它们也做不到更...
阅读全文
摘要:话说本来想200AC就把题目总结一下...但是我现在挺懒的..不想弄...以后再来吧.
阅读全文
摘要:我们假设每天买完第二天就卖掉( 不卖出也可以看作是卖出后再买入 ), 这样就是变成了一个完全背包问题了, 股票价格为体积, 第二天的股票价格 - 今天股票价格为价值.... 然后就一天一天dp...---------------------------------------------------...
阅读全文
摘要:我真想吐槽USACO的数据弱..= = O(n^3)都能A....上面一个是O(n²), 一个是O(n^3)O(n^3)做法, 先排序, dp(i, j) = max{ dp(j, p) } + w( i ) ( t #include#include#include#include#include#...
阅读全文
摘要:先二分答案m, 然后对于原序列 A[i] = A[i] - m, 然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, sum为原序列的和.假如二分的答案m是可行的, 那么 L + R = sum - n * m - mx ...
阅读全文
摘要:软件构成了一些树和一些环, 对于环我们要不不选, 要么选整个环. 跑tarjan缩点后, 新建个root, 往每个入度为0的点(强连通分量) 连边, 然后跑树dp( 01背包 )-------------------------------------------------------------...
阅读全文
摘要:线段树...区间开方...明显是要处理到叶节点的之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么我们线段树多记个max就可以少掉很多不必要的操作---------------------------...
阅读全文
摘要:先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra------------------------------------------------------------------------#include#include#include#...
阅读全文
摘要:水题...排序搞出每天的会议有哪些, 然后再按照会议的开始时间和结束时间排序, 最晚开始的和最早结束的会议不是同一场而且最晚开始的时间>最早结束的会议就有可能方案---------------------------------------------------------------------...
阅读全文
摘要:我自己只能想出O( n*3^m )的做法....肯定会TO( nm*2^m )做法:dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s.考虑转移 : 先假设我们到第x个商店去, so初始时 dp( x, s) = dp( x-1, s ) + d[x]然后我们可以对第x个商店做0...
阅读全文
摘要:orz出题人云神...放上官方题解... 转成最小割然后建图跑最大流就行了...------------------------------------------------------------------------------------------#include#include#inc...
阅读全文
摘要:坑爹...要求最小值要转成最长路来做....小于关系要转化一下 , A A #include#include#include#include#define rep(i, n) for(int i = 0; i to = v, pt->w = w; pt->next = head[u]; head[...
阅读全文
摘要:orz云神...真的给跪了...BFS版spfa T 掉了...然后DFS版的就A了...我现在很迷茫....这就是个普通的差分约束...------------------------------------------------------------------------------#in...
阅读全文
摘要:虽然A掉了但是时间感人啊....f( x, k ) 表示使用前 x 种填满容量为 k 的背包的方案数, g( x , k ) 表示使用后 x 种填满容量为 k 的背包的方案数.丢了第 i 个, 要填满容量为 k 的背包 , 则 ans( i , k ) = ∑ f( i - 1, h ) * g( ...
阅读全文
摘要:区间dp..dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数.考虑转移 :l == r 则 dp( l , r ) = 1 ( 显然 )s[ l ] == s[ l + 1 ] 则 dp( l , r ) = dp( l + 1 , r ) s[ r ] =...
阅读全文
摘要:对于一棵树, 考虑root的答案向它的孩子转移, 应该是 ans[son] = (ans[root] - size[son]) + (n - size[son]).so , 先 dfs 预处理一下, 然后再 DFS 求出各点答案 , 取最优即可----------------------------...
阅读全文
摘要:今天早起做了NOI2015网络同步赛....最近NOI是越来越向NOIP靠拢了....但是我还是不会做.....第一题:程序自动分析先离散化一下..然后最多就剩20w个数 , 不等于就存起来..等于就用并查集维护...最后for判断一下就行了.....------------------------...
阅读全文
摘要:早上这道题没调完就去玩NOI网络同步赛了....状压dp , dp( s ) 表示 s 状态下所用的最短时间 , 转移就直接暴力枚举子集 . 可以先预处理出每个状态下的重量和时间的信息 . 复杂度是 O( 2^n + 3^n ) 可以过--------------------------------...
阅读全文
摘要:我一开始写了个状压dp..然后没有滚动就MLE了...其实这道题直接暴力就行了... 2^15枚举每个状态, 然后检查每头牛是否能被选中, 这样是O( 2^15*1000 ), 也是和dp一样的时间复杂度....有点贪心的feel-----------------------------------...
阅读全文
摘要:看了一下数据范围...这不是暴力吗...O( 15 * 2 ^ 10 * 10 ) 很轻松就可以过啊..-----------------------------------------------------------------#include#include#include#include#...
阅读全文
摘要:本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 !二分图最大点权独立集...黑白染色一下 , 然后建图 :S -> black_node , white_node -> T , 流量都为点权 . 然后 black_node -> white_node ( 两点有公共边...
阅读全文
摘要:卡我空间....这道题应该是主席树入门题...无修改 , 离散化都不用...出题人业界良心啊一开始的空白树我 build 出来结果就多了整整 2n 个 Node , 然后就 MLE 了...( 双倍经验 , 另一道见上图 )--------------------------------------...
阅读全文
摘要:简单的状压dp...dp( x , h , s ) 表示当前第 x 行 , 用了 h 个 king , 当前行的状态为 s .考虑转移 : dp( x , h , s ) = ∑ dp( x - 1 , h - cnt_1( s ) , s' ) ( s and s' 两行不冲突 , cnt_1( ...
阅读全文
摘要:枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显然两个位于 x 的同一颗子树内的点是不可能被同时选到的 . 我们对 x 的每一颗子树进行 dfs ,...
阅读全文
摘要:概率dp...http://blog.csdn.net/Vmurder/article/details/46467899 ( from :[辗转山河弋流歌 by 空灰冰魂] )这个讲得很好 , 推推公式就可以 O( n ) , 但是 n 最大是99999999 , 怎么破....其实 n 很大时概率...
阅读全文
摘要:从终点往起点倒推 .在一个图 考虑点 u , 出度为 s : s = 0 , d[ u ] = 0 ; s ≠ 0 , 则 d( u ) = ( ∑ d( v ) ) / s ( ( u , v ) ∈ E )---------------------------------------------...
阅读全文
摘要:期望状压dp....------------------------------------------------------------------#include#include#include#include#include#define clr( x , c ) memset( x , c...
阅读全文
摘要:dp...或者说是记忆化搜索吧....注意到 1 #include#include#include#include#define clr( x , c ) memset( x , c , sizeof( x ) )#define rep( i , n ) for( int i = 0 ; i > k...
阅读全文
摘要:水水的树链剖分... 将边上的权值转到深度较大的点上 , 然后要注意这样做之后修改或者查询 u , v 转到同一条重链上时 ( 假设 u 深度小 ) , 不能把 u 的权值算上 , 因为是 u 和它的 fa 的边的权值 , 从 u 到 v 并没有经过这条边线段树维护 3 个域 set , add ,...
阅读全文
摘要:这道题做法应该很多吧....我用了线段树套treap....--------------------------------------------------------------------------------------------------------------#include#i...
阅读全文
摘要:线段树...我们可以枚举左端点 , 然后用线段树找出所有右端点中的最大值 .-----------------------------------------------------------------------------------------#include#include#includ...
阅读全文
摘要:水题...容易发现花费最大最小即是求 MST将每条边拆成一级 , 二级两条 , 然后跑 MST . 跑 MST 时 , 要先加 k 条一级road , 保证满足题意 , 然后再跑普通的 MST .----------------------------------------------------...
阅读全文
摘要:状压dp....我已开始用递归结果就 TLE 了... 不科学啊...我dp基本上都是用递归的..我只好改成递推 , 刷表法将全部公司用二进制表示 , 压成一个数 . 0 表示破产 , 1 表示没破产 . dp( S ) 表示 S 状态是否能够达到 , 能为 1 ( true ) , 不能为 0 (...
阅读全文
摘要:要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断.考虑一段序列 [ l , r ] , 假如我们找到了序列中唯一元素的位置 p , 那我们只需检查 [ l , p - 1 ] & [ p + 1 , r ]...
阅读全文
摘要:一开始写了个 BFS 然后就 T 了...这道题是迭代加深搜索 + A*------------------------------------------------------------------------------#include#include#include#include#def...
阅读全文
摘要:云神代码很短...0 ms过的...看了代码 , 大概是贪心... orz 我不会证数据这么小乱搞就可以了吧... ←_← 这道题网络流还是可以写的...既然限制了最多只能和 k 个不喜欢的人dance , 那么就把每个人拆成 a , b 两个点 . 限制完了之后, 因为 n boy_b( i )...
阅读全文
摘要:BIT 套 splay其实也是不难...每个 BIT 的结点保存一颗 splay , 询问就二分答案然后判断rank...---------------------------------------------------------------#include#include#include#i...
阅读全文
摘要:本来想学一下配对堆的...结果学着学着就偏了...之前 kpm 写过这道题 , 前面的边不理它都能 AC .. 我也懒得去写前面的加边了...用 C++ pb_ds 库里的 pairing_heap 水过去的...-------------------------------------------...
阅读全文
摘要:一道水题WA了这么多次真是....统考终于完 ( 挂 ) 了...可以好好写题了...先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图.每个 farm 拆成一个 cow 点和一个 shelter 点, 然后对于每个 farm x : S -> cow( x ) = cow( x ) ...
阅读全文
摘要:题意 : 一段序列 , 求一段子序列和取余 M 的最大值其实是一道水题...前缀和 , 然后就是找 ( sum( r ) - sum( l ) ) % M 的最大值 . 考虑一个 sum( r ) , 在 sum( k ) ( 1 sum( r ) , sum( b ) sum( b ) > s...
阅读全文
摘要:早上数学考挂了...欲哭无泪啊下午去写半个小时政治然后就又可以来刷题了..树链剖分 , 为什么跑得这么慢...---------------------------------------------------------------------#include#include#include#i...
阅读全文