08 2015 档案

摘要:通道题意:一个公司获得了一个厂房n(10^5)天的使用权和一笔启动资金C(10^9),准备在n天里租借机器生产来获得收益可以租借的机器有M(10^5)个,每个机器有四个值,D,P,R,G (D= P[j]可以看出是O(n^2)的,显然不行啊令h[j] = f[j] + R[j]- P[j] - G[... 阅读全文
posted @ 2015-08-31 18:32 mithrilhan 阅读(242) 评论(0) 推荐(0)
摘要:通道题意:区间K大代码:#include#includeusing namespace std;int n,m,sz,tot;int root[100001],a[100001],ls[8000001],rs[8000001],s[8000001];int num[100001],hash[1000... 阅读全文
posted @ 2015-08-30 21:39 mithrilhan 阅读(354) 评论(0) 推荐(0)
摘要:通道题意:选2条不相交的路径,使得包含的点最多,一条路径的定义是h[u] >= h[v] && d[u]v可走思路:太高深的doubility!转自:i和j之间,大于等于a[i]并且小于等于a[j]的数如果超过一定的值的时候,i就不向j连边,因为选2条路径,如果两个点之间夹在他们之间的点很多的话,费... 阅读全文
posted @ 2015-08-20 21:13 mithrilhan 阅读(266) 评论(0) 推荐(0)
摘要:通道题意:区间k大,单点修改思路:裸,复杂度n(lgn)^2代码:#include #include #include #include #include using namespace std;const int N = 60010 * 5;const int M = 100100 * 4;#de... 阅读全文
posted @ 2015-08-20 18:13 mithrilhan 阅读(175) 评论(0) 推荐(0)
摘要:通道题意:有3*n个人,分成n组,每组三个人。给出k个三元组,这三个人不可组队,问最后可以组队的总方案数思路:当k=0时,有(C[3*n][3]*C[3*n-3][3]*……*C[3][3])/n!种方案,展开以后可以得到dp[n]=(3*n)!/n!/6^n。显然可以写成递推式:dp[n]=dp[... 阅读全文
posted @ 2015-08-19 22:49 mithrilhan 阅读(150) 评论(0) 推荐(0)
摘要:通道题意:给两个数a和b,然后在[a,b]内的每一个数y都可以表示成x^k=y,要求x尽量最小,k尽量最大,然后求所有的k之和思路:很容易知道[1,n]中有多少个数可以表示成k次方的形式,即n^(1/k)个,但是,一个数的平方包含了4 6 8 10……次方.如果知道至多只能表示成k次方的数有多少个,... 阅读全文
posted @ 2015-08-19 20:14 mithrilhan 阅读(187) 评论(0) 推荐(0)
摘要:通道题意:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数。思路:我们可以由n^(1/p),知道指数为p的有多少个数。通过观察,可以发现若一个数可以表示成x^(k*t),则可以表示成(x^k)^t。因此指数必然为素数。枚举素数便可以得到指数为p的个数,但是可能出现重复,例如:... 阅读全文
posted @ 2015-08-19 19:54 mithrilhan 阅读(171) 评论(0) 推荐(0)
摘要:通道题意:给出n个数,n-1个操作方法,求(n-1)!的操作顺序得到的和是多少思路:代码:#include #include #include using namespace std;typedef long long ll;template inline bool rd(T &ret) { ... 阅读全文
posted @ 2015-08-18 19:12 mithrilhan 阅读(130) 评论(0) 推荐(0)
摘要:通道题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数思路:ans = cal(b, d) - cal(a - 1, d) - cal(b, c - 1) + cal(a - 1, c- 1),加上... 阅读全文
posted @ 2015-08-17 21:42 mithrilhan 阅读(168) 评论(0) 推荐(0)
摘要:通道题意:给定整数N,求1#include #include using namespace std;typedef long long ll;template inline bool rd(T &ret) { char c; int sgn; if(c = getchar() , c ... 阅读全文
posted @ 2015-08-17 21:41 mithrilhan 阅读(161) 评论(0) 推荐(0)
摘要:通道思路:可以证明点(x,y)与(0,0)所连线段上不包含原点有的点为gcd(x,y)于是问题就变成了求gcd(x,y)(1 #include#include#include#include#define inf 0x7fffffff#define ll long longusing namespa... 阅读全文
posted @ 2015-08-17 21:41 mithrilhan 阅读(127) 评论(0) 推荐(0)
摘要:通道题意:有三个数N, M, K, 然后N个特定序列。 从这特定的序列里必须改变K个数字, 取值范围为 [1,M]。 然后求出各序列的最大公约数为1~M分别多少个思路:代码:#include #include #include using namespace std;//const int V = ... 阅读全文
posted @ 2015-08-17 21:40 mithrilhan 阅读(202) 评论(0) 推荐(0)
摘要:通道题意:这题求[1,n],[1,m]gcd为k的对数。而且没有顺序思路:设f(k)为gcd(x,y)=k的数对(x,y)的对数,我们要求的是f(1)设F(k)为gcd(x,y)为k的倍数的数对(x,y)的对数,可以想到F(k)=floor(b/k)*floor(d/k),由莫比乌斯反演得:令lim... 阅读全文
posted @ 2015-08-17 21:39 mithrilhan 阅读(155) 评论(0) 推荐(0)
摘要:通道题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数#include #include using namespace std;typedef long long ll;template inline bool rd(T &ret) { char c; int s... 阅读全文
posted @ 2015-08-17 21:39 mithrilhan 阅读(184) 评论(0) 推荐(0)
摘要:通道题意:求gcd(a,b,c) = 1 a,b,c typedef long long ll;template inline bool rd(T &ret) { char c; int sgn; if(c = getchar() , c == EOF) return false; ... 阅读全文
posted @ 2015-08-17 21:38 mithrilhan 阅读(215) 评论(0) 推荐(0)
摘要:通道题意:给出n个数,m组序列,然后每次可以选择一个序列给对应的每个数加定值,及询问该组对应数之和思路:可以知道修改某一组后,肯定对应和其他组有相交部分也要对应修改,每次去修改肯定不现实,然后对于sqrt(n)以内的数可以O(n)修改,其他的只要计算对应的增量即可,然后维护对于大于sqrt(n)的序... 阅读全文
posted @ 2015-08-17 20:09 mithrilhan 阅读(259) 评论(0) 推荐(0)
摘要:通道题意:询问[l,r]区间的权和,权定义为sum(k^2*a[i]),k表示a[i]出现的次数思路:区间每增加一个a[i],增量是(2*x+1)*a[i],因为(x+1)^2*a[i] = (x^2 +2*x + 1)*a[i]分块排序即可,块内按r排序代码:#include #include #... 阅读全文
posted @ 2015-08-17 18:20 mithrilhan 阅读(165) 评论(0) 推荐(0)
摘要:通道题意:区间[L, R] 之间排序后有多少段连续的数思路:一个一个的向里面添加,只需要判断a[i]-1 和 a[i]+1是否已经添加在内,如果两个都在,则总段数减1,如果两个都不在,总段数加1,其他情况总段数不变代码:分块、#include #include #include #include u... 阅读全文
posted @ 2015-08-17 13:45 mithrilhan 阅读(179) 评论(0) 推荐(0)
摘要:通道题意:区间涂色,询问区间内颜色相同的个数思路:将原区间划分乘sqrt(n)个区间,每次暴力查询和跟新两边的区间,中间的区间直接用hash存每种颜色的节点的数量。这里用到了类似线段树的lazy思想,区间成段修改直接打个标记,等到要划分这个区间的时候先把标记传下去,然后更新代码:#include #... 阅读全文
posted @ 2015-08-17 13:17 mithrilhan 阅读(184) 评论(0) 推荐(0)
摘要:通道题意:给一个树,树上每个节点都有两个属性:忠诚度和能力,给出若干查询,求每个子树中能力 > 树根能力的点中,忠诚度最高的那个思路:子树dfs序即可,然后忠诚度排个序,取能力值大于u且忠诚度最高的,虽然线段树也可以搞,练练分块。代码:#pragma comment(linker, "/STACK:... 阅读全文
posted @ 2015-08-17 10:37 mithrilhan 阅读(160) 评论(0) 推荐(0)
摘要:通道题意:有一个5*6的矩阵,每个位置都表示按钮和灯,1表示亮,0表示灭。每当按下一个位置的按钮,它和它周围灯的状态全部翻转,问在这样的一个方阵中按下哪些按钮可以把整个方阵都变成灭的,这时1表示按了,0表示没按代码:#include #include #include #include #inclu... 阅读全文
posted @ 2015-08-16 19:19 mithrilhan 阅读(181) 评论(0) 推荐(0)
摘要:通道题意:从1开始 每次等概率从一个点到和他相邻的点 有向 走到不能走停止 求停止时每个点的期望思路:白书P156代码:#include #include #include #include using namespace std; const int N = 105; co... 阅读全文
posted @ 2015-08-15 23:02 mithrilhan 阅读(238) 评论(0) 推荐(0)
摘要:通道题意:按要求建一棵树,求树上的价值=sum(len*cnt),len为回文长度,cnt为该回文在树上出现了多少次思路:建好树从0开始往下跑就可以了,每跑完一条链,就回溯下。代码:#pragma comment(linker, "/STACK:102400000,102400000")#inclu... 阅读全文
posted @ 2015-08-15 22:40 mithrilhan 阅读(339) 评论(0) 推荐(0)
摘要:通道题意:相交回文对数思路:用总的方案数减去不相交方案数,注意内存优化,邻接表表示代码:#include #include #include #include using namespace std;typedef long long ll;typedef pair pii;const int MA... 阅读全文
posted @ 2015-08-15 21:32 mithrilhan 阅读(340) 评论(0) 推荐(0)
摘要:通道题意:求不相交回文对数思路:dp[i]代表以i为结尾有多少个回文,然后在求个前缀和,dp[i]就代表[1,i]以每一个结尾共有多少个,然后结果就是sum(dp[i-1]*add(s[len-i-1]))代码:#include #include #include using namespace s... 阅读全文
posted @ 2015-08-15 21:31 mithrilhan 阅读(201) 评论(0) 推荐(0)
摘要:通道题意:求所有回文按长度排序后,前k个奇数长度的子串乘积之和。思路:len[i]代表长度为i的有多少个子串,避免超时,树状数组维护即可代码:#include #include #include using namespace std;typedef long long ll;const int M... 阅读全文
posted @ 2015-08-15 21:31 mithrilhan 阅读(172) 评论(0) 推荐(0)
摘要:通道 阅读全文
posted @ 2015-08-15 21:30 mithrilhan 阅读(140) 评论(0) 推荐(0)
摘要:通道题意:2个字符串,求相同的回文串对数 (S, T), 其中S == T思路:由于并不需要本质不同,所以需要count一下,然后相同部分肯定dfs是一样的,累加即可。代码:#include #include #include using namespace std;typedef long lon... 阅读全文
posted @ 2015-08-15 21:28 mithrilhan 阅读(234) 评论(0) 推荐(0)
摘要:通道题意:求最长不相交双回文串思路:dp1[i]表示[1,i]的回文串,dp2[i]表示[i+1,len]的回文串,ans=max(dp1[i]+dp2[i]);代码:#include #include #include using namespace std;typedef long long l... 阅读全文
posted @ 2015-08-15 21:27 mithrilhan 阅读(168) 评论(0) 推荐(0)
摘要:通道题意:每加入一个字符,求增加了多少个本质不同的子串思路:可知增量要么1要么0,避免超时,字符输出即可。代码:#include #include #include using namespace std;typedef long long ll;const int MAX_N = 5000005;... 阅读全文
posted @ 2015-08-15 21:25 mithrilhan 阅读(192) 评论(0) 推荐(0)
摘要:通道题意:定义一个字符串的子串的值为该子串的长度乘以数量,求这个最大值思路:直接统计即可。代码:#include #include #include using namespace std;typedef long long ll;const int MAX_N = 600005;const int... 阅读全文
posted @ 2015-08-15 21:24 mithrilhan 阅读(168) 评论(0) 推荐(0)
摘要:通道题意:求每读入一个字符,对答案贡献了多少个本质不同的回文串。思路:我们知道回文自动机上每个节点就代表不同的回文串,所以统计节点数即可。代码:#include #include const int MAX_N = 600005;const int SIG = 26 ;struct PTree { ... 阅读全文
posted @ 2015-08-15 21:23 mithrilhan 阅读(178) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/u013368721/article/details/42100363今天我们来学习一个神奇的数据结构:Palindromic Tree。中译过来就是——回文树。那么这个回文树有何功能?假设我们有一个串S,S下标从0开始,则回文树能做到如下几点:1.求... 阅读全文
posted @ 2015-08-15 21:20 mithrilhan 阅读(249) 评论(0) 推荐(0)
摘要:通道题意:一群猴子围成圈,每个猴子互相不认识,猴王要给大家互相认识,每个猴子认识别人需要一个时间花费,而且A猴子认识B猴子,则A猴子认识的所有猴子和B猴子认识的所有猴子都能认识,这个代价为所有AB猴子认识的猴子的时间花费和。思路:运用动态规划,枚举每个区间的分割点,从而找到最小花费。因为题目中给出的... 阅读全文
posted @ 2015-08-15 12:34 mithrilhan 阅读(409) 评论(0) 推荐(0)
摘要:通道题意:n*m的字符矩阵,每次只能向右或向下走,求从(1,1)走到(n,m)的路径中有多少个回文。思路:我们可以从两端开始走。dp[i][j][k]:分别走i步(也可以理解为半径为i),A到达j行,B到达k行的回文数。走的半径逐渐减少即可。可以知道第x1行只能由前一次的x1行或x1+1行转移,第x... 阅读全文
posted @ 2015-08-14 13:14 mithrilhan 阅读(199) 评论(0) 推荐(0)
摘要:通道题意:一棵树,每个节点有一个点值(字符),问u子树的深度为k的所有节点组成的字符串是否为回文思路:搜出dfs序及该节点的深度,那么u节点深度为K的那一段肯定在dfs序[l,r]区间内,然后对于回文的处理,要么这段异或和为0,要么lowbit(x)=x代码:#include using names... 阅读全文
posted @ 2015-08-14 13:09 mithrilhan 阅读(191) 评论(0) 推荐(0)
摘要:通道题意:f(l,r)=∑ri=l∑rj=igcd(ai,ai+1....aj),q次询问。思路:考虑每加入一个点,那么贡献了r-l+1个区间,然后会发现区间内与新加入的r这个的gcd都是一块一块的,然后树状数组维护这个即可。代码:#include #include #include #includ... 阅读全文
posted @ 2015-08-13 21:00 mithrilhan 阅读(273) 评论(0) 推荐(0)
摘要:通道题意:1个人在数轴上来回走,以pi的概率走i步i∈[1, m],给定n(数轴长度),m,e(终点),s(起点),d(方向),求从s走到e经过的点数期望思路:E[x] = sum((E[x+i]+i) * p[i])(i∈[1, m]) ,(走i步经过i个点,所以是E[x+i]+i)E[x] = ... 阅读全文
posted @ 2015-08-12 21:28 mithrilhan 阅读(164) 评论(0) 推荐(0)
摘要:通道题意:有n种卡片,吃零食的时候会吃到一些卡片,告诉你在一袋零食中吃到每种卡片的概率,求搜集齐每种卡片所需要买零食的袋数的期望思路:假设S状态中为1的数位表示还没有拿到的卡片,那么每次可能会拿到这其中的某一张卡片,也可能拿到原来已经拿到的卡片,还可能一张卡片也拿不到后两种情况的状态不变。dp[0]... 阅读全文
posted @ 2015-08-12 21:06 mithrilhan 阅读(141) 评论(0) 推荐(0)
摘要:通道题意:吸血鬼在一个洞穴遍地的地方,他拥有初始战斗力,如果战斗力大于了洞穴的c值他就能花时间逃出去,否则他的战斗力增加c,然后随机选择下一个要去的洞穴,问他出去所花时间的期望思路:设dp[v] ,表示当能力值为v的时的期望。所以方程很容易写了,dp[v] = sum{ ti/n }(v直接逃出去)... 阅读全文
posted @ 2015-08-12 20:58 mithrilhan 阅读(130) 评论(0) 推荐(0)
摘要:通道题意:有m个位置,每个位置填入一个数,数的范围是1~n,问至少有L个位置的数一样的概率思路:总数是n^m,我们求没有L个位置一样的数的概率 * 设 dp[i][j]表示用前i个数,填充j个位置的方案数(要符合没有L个位置是一样的数) * dp[i][j]=dp[i-1][j]+Sigm( dp[... 阅读全文
posted @ 2015-08-12 20:39 mithrilhan 阅读(205) 评论(0) 推荐(0)
摘要:通道题意: n个盒子里装有礼物,m个人随机选择礼物,选完之后空盒子放回,问选中的礼物数的期望思路:dp[i]表示第i个人得到礼物的概率,第i个人得到礼物的概率:假如第i-1个人没有得到礼物,那么i得到礼物的概率和i-1一样。假如第i-1个人得到了礼物,那么i得到礼物的概率是i-1得到礼物概率减去1/... 阅读全文
posted @ 2015-08-12 16:18 mithrilhan 阅读(123) 评论(0) 推荐(0)
摘要:通道题意:有n个人排队等着在官网上激活游戏。Tomato排在第m个。对于队列中的第一个人: 1、激活失败,留在队列中等待下一次激活(概率为p1) 2、失去连接,出队列,然后排在队列的最后(概率为p2) 3、激活成功,离开队列(概率为p3) 4、服务器瘫痪,服务器停止激活,所有人都无法激活了。... 阅读全文
posted @ 2015-08-12 15:41 mithrilhan 阅读(167) 评论(0) 推荐(0)
摘要:通道题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2时可以直接跳到5,最后问跳到n时平均置几次骰子思路:dp[i]:到达i是,离终点的期望次数代码:#include #include #include using namespace std;con... 阅读全文
posted @ 2015-08-12 15:02 mithrilhan 阅读(124) 评论(0) 推荐(0)
摘要:通道题意:一颗树对于在点i有3种情况:1:被杀死回到点1 --- 概率为ki,2:找到出口退出----慨率为ei,3:和该点相连有m条边,随机走一条,求从点1开始到退出的平均需要走的边数思路: 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。E[1]即为所求。 叶子结点: E... 阅读全文
posted @ 2015-08-12 15:00 mithrilhan 阅读(159) 评论(0) 推荐(0)
摘要:通道题意:有三个骰子,分别有k1,k2,k3个面。每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。当分数大于n时结束。求游戏的期望步数。初始分数为0思路:假设dp[i]表示拥有分数i到游戏结束的期望步数则 (1):dp[i]=SUM(p[k]*dp[i+k])+p[0]... 阅读全文
posted @ 2015-08-12 14:07 mithrilhan 阅读(211) 评论(0) 推荐(0)
摘要:通道题意:一个软件有s个子系统,会产生n种bug某人一天发现一个bug,这个bug属于一个子系统,属于一个分类每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n,问发现n种bug,每个子系统都发现bug的天数的期望思路: dp[i][j]表示已经找到i种bug,j个系统的bug,达到... 阅读全文
posted @ 2015-08-12 13:27 mithrilhan 阅读(112) 评论(0) 推荐(0)
摘要:通道题意:每次走一步的概率是p,走两步的概率是1-p,然后有n个点上有地雷。问YYF走过雷区的概率是多少思路:dp[i]=p*dp[i-1]+(1-p)dp[i-2]转移矩阵: ans[i] | p ,1-p | ans[i-1] =| | *ans[i-1] | 1 ,... 阅读全文
posted @ 2015-08-11 21:50 mithrilhan 阅读(145) 评论(0) 推荐(0)
摘要:通道题意:加线段,删线段,每次加线段询问当前线段完整覆盖了多少条线段思路:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端点。 再查询有多少个线段的右端点大于该线段右端点, 两者之差就是答案。用两个树状数组搞定。代码:#include #include #include #include... 阅读全文
posted @ 2015-08-11 19:21 mithrilhan 阅读(153) 评论(0) 推荐(0)
摘要:通道题意:给n个点,现在要使这n个点连通,并且要求代价最小。现在有2个点之间不能直接连通(除了第一个点),求最小代价思路:先求mst,然后枚举边,对于生成树上的边替换,用树形dp O(N^2)求出每条生成树边的最小替代边。然后替换后的最大值代码:#include #include #include ... 阅读全文
posted @ 2015-08-10 23:34 mithrilhan 阅读(219) 评论(0) 推荐(0)
摘要:通道题意:给定n个点的树,问树的直径有多少条代码:#include#includeconst int N=500000;const int inf=0x3fffffff;int head[N],num,Len[N],ans,node[N],k;struct edge{ int ed,w,nex... 阅读全文
posted @ 2015-08-10 21:21 mithrilhan 阅读(142) 评论(0) 推荐(0)
摘要:通道题意:给一个树,边有颜色,点有权值。满足路径上没有两个相邻边同色的路径是好的路径,求好的路径的(路径上的点的权值和)的总和思路:边权排序,从任意一点开始深搜,每颗子树搜索完毕之后向上返回pair每次深搜完一个子节点之后,增加的过这一点的gorgeous边的总分数为: 之前深搜的所有子节点向上返回... 阅读全文
posted @ 2015-08-10 16:13 mithrilhan 阅读(203) 评论(0) 推荐(0)
摘要:通道题意:一棵树,求不经过路径的最小标号代码:#include #include #include #include #include #include #include using namespace std; #define maxn 1005000#define inf 0x3f3f3f3f ... 阅读全文
posted @ 2015-08-09 13:38 mithrilhan 阅读(280) 评论(0) 推荐(0)
摘要:通道题意:给出一棵树,根节点是1,要求根据以下要求选择最多的节点:①不能选择1②若选择当前节点,那么该节点的父节点和儿子都不能选择。③若某节点的某一个儿子节点被选择,那么该节点的其他儿子不能被选择样例分析图:思路:用dp[u][2]表示u节点是否被选择的最大值,则dp[u][1]=sum{dp[v]... 阅读全文
posted @ 2015-08-05 21:29 mithrilhan 阅读(203) 评论(0) 推荐(0)
摘要:通道题意:边权树,有m个点是危险的,现在想将树分成m块使得每块中恰好只有一个危险的点,问最小的花费是多少思路:dp[i][0|1以i节点为根节点的子树中,i所在的连通块中没有(有)危险节点的最小花费;如果i是叶子节点:如果i为危险点dp[i][0] = inf,dp[i][1]= 0;否则dp[i]... 阅读全文
posted @ 2015-08-05 21:05 mithrilhan 阅读(168) 评论(0) 推荐(0)
摘要:通道题意:一棵树上有K个黑色节点,剩余节点都为白色,将其划分成K个子树,使得每棵树上都只有1个黑色节点,共有多少种划分方案思路:dp[i][0]和dp[i][1]分别表示i子树所在联通块不存在黑节点和已经存在一个黑节点的方案数代码:#include#include#include#include#i... 阅读全文
posted @ 2015-08-05 20:17 mithrilhan 阅读(225) 评论(0) 推荐(0)
摘要:通道题意:根据那个递推式,找找规律即可。代码:#include #include #include #include #include using namespace std;typedef long long ll;inline bool rd(int &ret) { char c; int... 阅读全文
posted @ 2015-08-04 23:12 mithrilhan 阅读(245) 评论(0) 推荐(0)
摘要:通道题意:从A,B分别取出子串X,Y,求多少种不同的X+Y思路:代码:#include #include #include using namespace std;const int MAX_N = 200007;typedef unsigned long long ll;struct SAM { ... 阅读全文
posted @ 2015-08-04 22:34 mithrilhan 阅读(358) 评论(0) 推荐(0)
摘要:通道题意:给出n个点,m条边,现在要给边定向使得点的出度和入度的差不超过1思路:对每个点进行出度和入度的判断,如果出度大,就先进行反向的搜索(每搜索一条边u,v就认为这是一条v到u的有向边),反之,进行正向搜索(每搜到一条边u,v认为这是一条u到v的有向边),一直搜索到找不到边能继续为止,每条边只遍... 阅读全文
posted @ 2015-08-04 21:24 mithrilhan 阅读(200) 评论(0) 推荐(0)
摘要:通道题意:3种操作,加点,加边,删边,然后对于每次加点操作为不超过k个点,求对于每次加点时加点数量的方案的字典序最小。思路:要保证字典序最小,就倒着来,能加的都加进去。建图方法就是拆点,源点向i建流量为k,tot+i到汇点建流量为1,i到tot+v建流量为1.代码:#include #include... 阅读全文
posted @ 2015-08-04 20:00 mithrilhan 阅读(201) 评论(0) 推荐(0)
摘要:void solve(){ int ans=0,i,j,front1,front2,rear1,rear2; front1=rear1=0; front2=rear2=0; for(i=1,j=1;jfront1&&d[qmax[rear1-1]]front2&&d[qmin... 阅读全文
posted @ 2015-08-04 11:56 mithrilhan 阅读(321) 评论(0) 推荐(0)
摘要:通道题意:给出一个字符串和一个k,将字符串分成k段,每段的求法是sigma【(i − P OS) ∗ P OS】,问如何分段使得总和最小思路:设dp[i][j] 为将前j个字符分成i段的最小值。a[i]为第i个字符在原始字符串的位置。那么dp[i][j] = min(dp[i][j],dp[i-1]... 阅读全文
posted @ 2015-08-03 13:03 mithrilhan 阅读(259) 评论(0) 推荐(0)
摘要:通道题意:求一个区间[1,m]内与i的互质的数的个数。这里1#include #include typedef long long LL;const int maxn = 100010;LL ans;int n,m;int fac[maxn];int prime[maxn];int facCnt;v... 阅读全文
posted @ 2015-08-02 19:15 mithrilhan 阅读(176) 评论(0) 推荐(0)
摘要:通道题意:一台机器要按照顺序完成n个任务,每个任务都有一个代价f和需要时间t。机器完成任务的方式是分批处理,对于每一批任务需要首先预处理s时间,同批任务中所有单个任务都是同时完成,代价为完成的时刻乘以各自的代价。求最小代价思路:分批考虑情况太多,可以先将问题转化。每个任务对对最后代价的贡献实际上等于... 阅读全文
posted @ 2015-08-02 16:35 mithrilhan 阅读(193) 评论(0) 推荐(0)
摘要:通道题意:用数轴描述一条高速公路,有N个村庄,每一个村庄坐落在数轴的某个点上,需要选择P个村庄在其中建立邮局,要求每个村庄到最近邮局的距离和最小思路:用f[i][j]表示建好i个邮局时覆盖到第j个村庄的最优解,那么就可以得到f[i][j]=min{f[i-1][k]+w[k+1][j]}(k#inc... 阅读全文
posted @ 2015-08-02 16:28 mithrilhan 阅读(163) 评论(0) 推荐(0)
摘要:通道题意:二维坐标上的点,建一个长度和最小的树包含全部点思路:定义状态 dp[i,j]表示点i到点j合并在一起的最小花费(树枝的长度),状态转移方程:dp[i,j]= min(dp[i,k]+dp[k+1,j]+cost(i,j) ) i #include #include #include... 阅读全文
posted @ 2015-08-02 15:46 mithrilhan 阅读(160) 评论(0) 推荐(0)
摘要:通道题意:有n个数,分段,每段长度至少为T,这段权值为全修改为最小数花费,求总花费最小思路:先对n个数进行排序,dp[i]表示前i个数得到的最少值,则:从j+1~i作为一组dp[i]=dp[j]+sum[i]-sum[j]-(i-j)*s[j+1];//sum[i]表示前i个数的和=>dp[i]=d... 阅读全文
posted @ 2015-08-02 14:39 mithrilhan 阅读(158) 评论(0) 推荐(0)
摘要:总结一下凸包维护规律: 斜率为负,从小到大,维护U左半部分凸包,求最小y截距 斜率为负,从大到小,维护倒U右半部分凸包,求最大y截距 斜率为正,从小到大,维护U右半部分凸包,求最小y截距 斜率为正,从大到小,维护倒U左半部分凸包,求最大y截距 阅读全文
posted @ 2015-08-02 13:03 mithrilhan 阅读(402) 评论(0) 推荐(0)
摘要:通道题意:给你n个矩形,长宽已知,求用不超过k个大矩形包含所有给定矩形,使得大矩形总面积和最小思路:dp[i][j]表示前i个用j个大矩形的最少面积 ,则dp[i][j]=Min(dp[k][j-1]+w[i]*h[k+1]) ,斜率维护。代码:#include#includeusing names... 阅读全文
posted @ 2015-08-02 12:35 mithrilhan 阅读(186) 评论(0) 推荐(0)
摘要:通道题意:求出长度大于k子序列使得其各个元素之和的平均数最大,并输出最大平均值思路:浅谈数形结合思想在信息学竞赛中的应用代码:#include#include#include#include#includeusing namespace std;const int MAXN=100010;int s... 阅读全文
posted @ 2015-08-02 12:24 mithrilhan 阅读(206) 评论(0) 推荐(0)
摘要:通道题意:给出n个数字,要你把这n个数字分成m堆,每一堆的价值是(max(val)-min(val))^2要你求出分成m堆之后得到的最小价值思路:排序,dp[i][j]表示前j个数字,分成i堆的最小价值,dp[i][j]=min(dp[i-1][k]+(val[j]-val[k+1])^2) 。代码... 阅读全文
posted @ 2015-08-01 22:52 mithrilhan 阅读(192) 评论(0) 推荐(0)