上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 25 下一页
摘要: 没有任何变换(III变U和删UU操作)之前,I 的个数一定是2^x个(也就是2的整数次幂)若仅考虑III变U,那么设U的个数为k,I 的个数变为2^x-3*k再加上删除UU操作,假设我们删除了2*n个U,设实际U的个数为cntU, 则k=cntU+2*n设 I 的实际个数为cntI,cntI = 2^x - 3*(cntU+2*n), n有解的情况为:( 2^x - 3*cntU - cntI ) % 6 == 0只要找到一个x满足这个条件即可,不过要注意( 2^x - 3*cntU - cntI )>=0,因为 -6%6 = 0,之前没有判断这里,WA的很惨…… 1 #include 阅读全文
posted @ 2013-08-08 19:01 冰鸮 阅读(611) 评论(0) 推荐(0)
摘要: 官方题解:题意转化一下就是:给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。分析:设这列数前i项和为s[i],则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,即 s[j]%m-s[i-1]%m == 0,因此,只需要每一个余数找使s[i]%m等于该余数的最小的i,和s[j]%m等于该余数的最大的j,相减即为最长的连续的数的长度。i 要从1开始,不然会WA。#include #include #include #incl 阅读全文
posted @ 2013-08-07 21:32 冰鸮 阅读(219) 评论(0) 推荐(0)
摘要: 题意:给一些n,求出最小的只包含0,1的n的倍数设两数a, b满足: a #include #include #include using namespace std;const int MAXN = 20010;struct node{ int val; int pre;};int n;int ans[MAXN];node D[MAXN];void solved(){ memset( D, -1, sizeof(D) ); queue Q; Q.push(1); D[1].val = 1; D[1].pre = -1; while ( !Q.e... 阅读全文
posted @ 2013-08-07 20:25 冰鸮 阅读(392) 评论(0) 推荐(0)
摘要: 原文地址:http://blog.sina.com.cn/s/blog_6974c8b20100zc61.html作者:starszys“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的重链的顶端节点,fa[v]表示v的父亲,son[v]表示与v在同一重链上的v的儿子节点(姑且称为重儿子),w[v]表示v与其父亲节点的连边(姑且称为 阅读全文
posted @ 2013-08-07 11:12 冰鸮 阅读(169) 评论(0) 推荐(0)
摘要: 官方题解:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的点时,这一权值将互相抵消。#include #include #include #include using namespace std;const int MAXN = 100010;int N, M;double node[MAXN];int main(){ while ( ~scanf( "%d%d", &N, &M ) ) { for ( int i = 1; i <= N; ++i ) scanf( &quo 阅读全文
posted @ 2013-08-06 21:07 冰鸮 阅读(208) 评论(0) 推荐(0)
摘要: 不是我做的……放在这里留着存底,有时间刷掉……原地址:http://www.haogongju.net/art/2033448先是经典的GSS系列吧网址就不贴了。。SPOJ GSS一搜就行了GSS1 线段树记下左右边的就行了。。水题 不解释GSS2 比较经典 必须得离线 排下序 从左到右扫一遍 具体细节自己想吧。。GSS3 同GSS1 加个修改。。太水了GSS4 好题啊 给个提示 开根几次就到1了。。GSS5 把各种细节处理好久OKGSS6 带插入的 写了个Splay 效率低下。。。必须+IO优化才能过 太弱了 T_TGSS7 树上GSS 这是我第一道LCT。。代码丑的一B LCT还是边看边写 阅读全文
posted @ 2013-08-06 20:47 冰鸮 阅读(545) 评论(0) 推荐(0)
摘要: 当火车处在换基站的临界点时,它到某两基站的距离相等。因此换基站的位置一定在某两个基站的中垂线上,我们预处理出任意两基站之间的中垂线,对于每次询问,求询问线段与所有中垂线的交点。检验这些交点是否满足条件(详见代码),如果满足,那么它是一个交换点。#include #include #include #include using namespace std;const int MAXN = 60;const double eps = 1e-7;struct Point{ double x, y; Point( double x = 0, double y = 0 ):x(x), y(y... 阅读全文
posted @ 2013-08-06 20:23 冰鸮 阅读(332) 评论(0) 推荐(0)
摘要: 参照了nocow上的解法,照搬过来……易知一个数X在数列中在另一个数Y前,当且仅当X前缀小于Y或前缀相等X短,那么我们分布考虑,比如对于数48561:5位上:10000~48560;4位上:1000~4856;3位上:100~485;2位上:10~48;1位上:1~4.这样我们就得到了1..N中48561的位置,可以用这个来判错.接下来的方法类似,为了使得我们的N满足要求,我们必须去找比48561大且前缀比其小的数,同样有:6位上:100000~485609; //注意红色部分比原数减少了1,之前没注意这里一直WA…………---------------------以上nocow上给出的题解-- 阅读全文
posted @ 2013-08-06 10:45 冰鸮 阅读(428) 评论(0) 推荐(0)
摘要: 问这个人掉落的海域包含几个岛屿。八方向相连为同一片海域,四方向相连为同一个岛屿。与边界相连的岛屿不算。方法:在给定地图外面填充一圈".",从这个人掉落的地方开始进行floodfill,标出他所在的海域。然后再从(0, 0)点进行一次floodfill,把之前标记的海域之外的东西全部清掉。最后统计岛屿个数即可。注意:坐标是反着的#include #include #include #include #include using namespace std;const int MAXN = 510;const int dx[] = { -1, 0, 1, 0, -1, -1, 阅读全文
posted @ 2013-08-05 18:46 冰鸮 阅读(276) 评论(0) 推荐(0)
摘要: 设horns和hoofs的数量分别为 x 和 y ,题目要求:满足 x+y 2 #include 3 #include 4 #include 5 #include 6 7 const double eps = 1e-3; 8 const double INF = 1e10; 9 10 using namespace std; 11 12 double A, B; 13 int N; 14 15 int dcmp( double a ) 16 { 17 if ( fabs(a) i ) tmp = i; 39 40 doubl... 阅读全文
posted @ 2013-08-05 12:35 冰鸮 阅读(242) 评论(0) 推荐(0)
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 25 下一页