08 2013 档案
摘要:A题:水题。。 1 #include 2 #include 3 const int maxn = 1005; 4 char s[ maxn ]; 5 int main(){ 6 //freopen("in.txt","r",stdin); 7 while( scanf("%s",s)!=EOF ){ 8 int len = strlen(s); 9 int c1 = 0,c2 = 0,c3 = 0;10 for( int i=0;i 2 const int maxn = 100005; 3 typedef long long LL..
阅读全文
摘要:ac自动机 模板题 1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std; 15 typedef long long int64; 16 //typedef __int64 int64; 17 typedef pair PII; 18 #define MP(a,b) make_pair((a),(b)) 19 const int m...
阅读全文
摘要:模拟一遍即可。注意一些特殊情况,见代码。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxn = 10005; 9 10 struct Ploy{ 11 int cnt;//项的数目 12 int coe[ maxn ];//各项系数 13 int exp[ maxn ];//各项指数 14 }a; 15 struct Ploy2{ 16 int coe1,coe2; 17 int exp1,...
阅读全文
摘要:题意:给定的这些点是否有一个对称中心。PS:我写得有点啰嗦。。就是把小的x和大的x进行匹配。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const double eps = 1e-8; 7 const int maxn = 10005; 8 9 struct Point{ 10 double x,y; 11 }; 12 Point pnt1[ maxn ],pnt2[ maxn ]; 13 Point cc; 14 15 int cmp1( Point a,Point b ){ 16 ...
阅读全文
摘要:题意简单。询问n个人的宗教关系。 1 #include 2 3 const int maxn = 50005; 4 5 int fa[ maxn ]; 6 int vis[ maxn ]; 7 8 void init( int n ){ 9 for( int i=1;i<=n;i++ )10 {fa[i] = i;vis[i] = 0;}11 }12 int find( int x ){13 if( x==fa[x] )14 return x;15 return fa[x] = find( fa[x] );16 }17 void u...
阅读全文
摘要:1 /* 2 疾速优化+hash存边 3 题意:给定一个包含N(1 ≤ N ≤ 10,000)个顶点的无向完全图,图中的顶点从1到N依次标号。从这个图中去掉M(0 ≤ M ≤ 1,000,000)条边,求最后与顶点1联通的顶点的数目 4 思路(BFS):从顶点1开始不断扩展,广度优先搜索所有的与当前扩展点联通的顶点。开始每次都要判断所有的顶点是否与cur相连, 5 若相连则push,反之跳过。 6 */ 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 ...
阅读全文
摘要:1 /* 2 线段树+扫描线+离散化 3 求多个矩形的面积 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std; 15 const int maxn = 105; 16 const int maxm = 210; 17 struct SegTree{ 18 int l,r; 19 int cover; 20 double L_val,R_val...
阅读全文
摘要:见代码。 1 /* 2 线段树+Lazy 3 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度。 4 现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 using namespace std; 20 typedef long long int64; 21 //typedef __int64 int64; 22 typedef pa...
阅读全文
摘要:ubuntu 和 win7 远程登陆:第一种(通过win7自带的远程桌面来连接ubuntu)1. windows7配置 我的电脑-》属性-》远程设置。-----允许远程连接2. ubuntu配置终端-》输入命令:$sudoapt-getinstallxrdp装完后再输入$sudoapt-getins...
阅读全文
摘要:题意:给定一个01矩阵。T个询问,每次询问大矩阵中是否存在这个特定的小矩阵。 1 /* 2 64位的位运算!!! 3 题意: 4 给定一个01矩阵。T个询问,每次询问大矩阵中是否存在这个特定的小矩阵。 5 (64位记录状态!!!) 6 */ 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 using namespace std; 18 typedef long long int64; 1...
阅读全文
摘要:简单的字典树 1 /* 2 字典树 3 构造字典树。注意初始化! 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 using namespace std; 16 typedef long long int64; 17 //typedef __int64 int64; 18 typedef pair PII; 19 #define MP(a,b) make_pair((a),(b))...
阅读全文
摘要:模拟题 1 /* 2 模拟 3 注意:相同一边的车有先后顺序! 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 using namespace std;16 typedef long long int64;17 //typedef __int64 int64;18 typedef pair PII;19 #define MP(a,b) make_pair((a),(b)) 20 const int maxn =
阅读全文
摘要:最小生成树 1 /* 2 prim 3 题意:给定一些点,一些卫星,一个卫星能连接两个点,点和点之间通信有一定的距离限制。 4 问能使得所有的点联通的最小距离。 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 typedef long long int64;18 //typedef __int64 int64;19 typedef pair PII;20 #defi
阅读全文
摘要:1 /* 2 博弈 3 关键态:较大数是较小数的2倍以上。 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 using namespace std;16 typedef long long int64;17 //typedef __int64 int64;18 typedef pair PII;19 #define MP(a,b) make_pair((a),(b)) 20 const int maxn = .
阅读全文
摘要:见代码。 1 /* 2 凸包(稳定凸包) 3 题意:给出一些点,这些点要么是凸包的顶点要么是边上的。 4 证明每条边上都至少有3个点。 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 using namespace std; 17 typedef long long int64; 18 //typedef __int64 int64; 19 typedef pair PII; 2...
阅读全文
摘要:1 /* 2 2-sat 3 题意:给定一个圆,圆上一些点。两点一线。现给出一些线,这些线可以在圆内连起来,也可以在圆外。 4 问有没有可能所有的线画完 且 不出现相交。 5 思路:把线画在圆内或圆外 看成一个组合。其它的则建边。 6 */ 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 using namespace std; 19 20 typed...
阅读全文
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using namespace std;13 14 const int maxn = 105;15 const int maxm = 1005;16 const int inf = 0x3f3f3f3f;17 const double pi = acos(-1.0);18 const double eps = 1e-8;19 20 struct Ed.
阅读全文
摘要:1 /* 2 贪心。 3 题意:给定一些点 一些边 点和边都有价值。现在A B 选点。求A-B的maxVal 4 思路:分割边。边的1/2分给两个端点。 5 如果这两个点被同一个人取,则ok;否则 做减法也行,对题意无影响。 6 */ 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #include17 using namespace std;18 typedef long long int64;19 //typedef __int...
阅读全文
摘要:见Goolglehttp://zh.wikipedia.org/zh-cn/%E6%95%B4%E6%95%B8%E5%88%86%E6%8B%86 1 /* 2 数学公式 3 ans[i]:i可以有ans[i]种方法得到。(由1-i的数相加) 4 */ 5 #include 6 typedef long long int64; 7 const int maxn = 100000; 8 const int64 mod = 1000000007; 9 int64 ans[ maxn+15 ];10 void init(){11 int64 flag,k;12 ans[ 0 ] =...
阅读全文
摘要:dp[i][j]:从前i个中挑出某些且cost不超过j的最大val。dp[i][j]:应该有1到i-1的dp[k][j-?]来更新!! 1 /* 2 DP 3 dp[i][j]:从前i个中挑出某些且cost不超过j的最大val。 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 using namespace std;16 typedef long long int64;17 //typedef __int64
阅读全文
摘要:思路是想到了一些 不过愣是没敢写。。。。。。。。。。。 1 /* 2 题意:给定一个整数n(2 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using namespace std;13 typedef long long int64;14 //typedef __int64 int64;15 const int maxn = 105;16 const int inf = 0x7fffffff;17 const double pi=acos(-1.0);18 const doubl.
阅读全文
摘要:题意:一个空平面,每次增加一个点,其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By ) mod Cy求出现有点集中的最近点对的距离的平方,共增加n个点,求每次求得的平方的和http://blog.csdn.net/liuledidai/article/details/9664031 1 /* 2 set+最近点对 3 每次对于一个新插入的点,找出x与之最近的,然后分别向两侧搜 4 题意:一个空平面,每次增加一个点, 5 其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By
阅读全文
摘要:1 /* 2 状态压缩DP 3 dp[ i ]:达到i状态的最小step。 4 题意:每次可以去掉一个回文串,求最少几步能取完。 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std; 15 typedef long long ll; 16 //typedef __int64 int64; 17 const int maxn = 18; 18 const int inf = 0x3f3f3f...
阅读全文
摘要:1 /* 2 找规律 3 题意:abs(i%A - i%B) 对i从0~N-1求和 4 从0~N-1一个一个算必TLE,着A,B两者差相同的部分合并起来算 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 using namespace std;15 typedef long long int64;16 //typedef __int64 int64;17 const int maxn = 105;18 const int inf = 0x7ffffff.
阅读全文
摘要:tarjan+缩点+树的直径题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少。先tarjan缩点,再在这棵树上求直径。加的边即是连接这条直径的两端。 1 /* 2 tarjan+缩点+树的直径 3 题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少。 4 先tarjan缩点,再在这棵树上求直径。加的边即是连接这条直径的两端。 5 */ 6 #pragma comment(linker, "/STACK:1024000000,1024000000") 7 #include 8 #include 9 #includ.
阅读全文
摘要:手动列出前5项可发现规律 1 /* 2 推导公式 3 a[n] = 2^(n-1) + (n-2)*2^(n-3) 4 */ 5 #include 6 #include 7 #include 8 using namespace std; 9 typedef long long int64;10 const int64 mod = 1e9+7;11 12 int64 FastPow( int64 n,int64 m ){//n^m13 int64 sum = 1;14 while( m>=1 ){15 if( m%2==1 ){16 sum...
阅读全文
摘要:1 /* 2 bfs+求树的直径 3 关键:if k 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 using namespace std;16 typedef long long ll;17 //typedef __int64 int64;18 const int maxn = 100005;19 const int inf = 0x7fffffff;20 const double pi=acos(-1.0);21 const double eps = 1e-8;22 struc.
阅读全文
摘要:注意精度。 1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using namespace std;13 typedef long long ll;14 //typedef __int64 int64;15 const int maxn = 105;16 const int inf = 0x7fffffff;17 const double pi=acos(-1.0);18 const double eps = 1e-8;19 20 int.
阅读全文
摘要:最长公共子序列。 1 /* 2 LCS 最长公共子序列 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using namespace std;13 typedef long long ll;14 //typedef __int64 int64;15 const int maxn = 1005;16 const int inf = 0x7fffffff;17 const double pi=acos(-1.0);18 const double eps =
阅读全文
摘要:简单题。 1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 using namespace std;14 const int maxn = 1000005;15 int IsPrime[ maxn ],IsSpecialPrime[ maxn ];16 int GetSum( int x ){17 int ans = 0;18 while( x ){19 ans += x%10;20 ...
阅读全文
摘要:1 /* 2 题意:n行m列的矩阵,1表示可以放东西,0表示不可以。曼哈顿距离为2的两个位置最多只能有一个位置放东西。 3 问最多放多少个东西。 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 using namespace std;15 const int maxn = 105;16 const int maxm = 12;17 const int N = 170;18 int mat[ maxn ];19 int dp[ ma.
阅读全文
摘要:1 /* 2 母函数(生成函数) 3 题意: 4 有n种资产,每种资产num份,每份有val的价值 5 问取出总价值的1/3有多少种方案 6 */ 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 const int maxn = 10005;18 int c1[ maxn ],c2[ maxn ];19 int val[ 105 ],num[ 105 ];20 int main(){21 ...
阅读全文
摘要:1 /* 2 最大点权独立集=总权值-最小点权覆盖集 3 最大点权独立集=最大流 4 最小点权覆盖集=最小割 5 6 题意: 7 给你一个m*n的格子的棋盘,每个格子里面有一个非负数。 8 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大。 9 根据奇偶建立二分图, 10 if(i+j)%2==0 源点和该点连接,权值为该点的点权, 11 if(i+j)%2==1 该点和汇点连接,权值为该点的点权, 12 之后若i+j为偶数的点和i+j为奇数的点之间相邻,那么就连一条从为偶数的点到为奇数的点的边,权值为无穷大...
阅读全文
摘要:简单的压缩状态dp 1 /* 2 状态压缩dp 3 同hdu2167 4 利用滚动数组!! 5 */ 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 using namespace std;16 const int maxn = 20;17 int binary[ maxn+5 ];18 int s[ 1<<(maxn) ];19 //int sum[ maxn ][ 1<<maxn ];20 //int dp[ ma
阅读全文
摘要:状态压缩dp详见代码 1 /* 2 状态压缩dp 3 dp[ i ][ j ]:第i行j状态的最大和 4 dp[i][j] = max( dp[i-1][k]+sum[i][j] ); 5 题意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出 6 */ 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 const int maxn = 15;18 in
阅读全文
摘要:错排公式。用64位! 1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 using namespace std;14 typedef __int64 int64;15 const int maxn = 1005;16 const int64 mod = 1000000007;17 int main(){18 int64 a[ 105 ];19 //printf("%d\n",mod);20 a[...
阅读全文
摘要:思路:以y的值进行离散化根据x的值 对每一条y轴边进行处理,如果是"左边"则插入,是"右边"则删除。 1 /* 2 扫描线+线段树+离散化 3 求多个矩形的周长 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std; 15 const int maxn = 5005; 16 const int maxm = 10010; 17 struct SegT
阅读全文
摘要:1 /* 2 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 using namespace std;14 const int maxn = 1005;15 int main(){16 int ca,T;17 T = 1;18 scanf("%d",&ca);19 while( ca-- ){20 int x;21 scanf("%d",&x);22 ...
阅读全文
摘要:1 /* 2 bfs+标记状态 3 如何记录状态是关键!! 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 using namespace std; 15 const int maxn = 115; 16 const int inf = 9999999; 17 char mat[ maxn ][ maxn ]; 18 int vis[ maxn ][ maxn ][ 2 ][ 2 ]; 19 const...
阅读全文