
POJ+百练
文章平均质量分 70
BRCOCOLI
初学者 记录成长 Fighting
展开
-
百练 4130 Saving Tang Monk [BFS+优先队列+状态压缩]
百练题目地址判重3个状态就够了 位置+钥匙除了#位置,其他位置都可以经过多次注意钥匙数可以为零因为打蛇要time+2,所以用优先队列蛇的数量#include#include#include#include#include#include#includeusing namespace std;const int maxn=100+5;int N,K,vis[原创 2016-07-23 14:44:22 · 1218 阅读 · 0 评论 -
POJ 1611 The Suspects
题目地址只需要在并查集上加一个数组total保存根的总结点数就好有两种途径:1)在求父节点时,直接将子结点的total值全累加到根节点上#include#include#include#include#include#include#includeusing namespace std;const int maxn=30000+5;int p[maxn],tota原创 2016-07-23 15:50:22 · 225 阅读 · 0 评论 -
POJ 1988 Cube Stacking
题目地址total[x]记录最下方木块是x,这一堆总共有多少木块under[x]记录x木块下面有几块木块#include#include#include#include#include#include#includeusing namespace std;const int maxn=30000 + 5;int Par[maxn],total[maxn],under[原创 2016-07-23 17:21:19 · 282 阅读 · 0 评论 -
POJ 1182 食物链 *
题目地址用relaton[]数组保存结点与父节点的关系同时要考虑两个集合并的时候,在状态压缩时要判断子结点与新的父节点的关系思路来源:http://blog.youkuaiyun.com/qq_33901573/article/details/52005905http://blog.youkuaiyun.com/roney_win/article/details/9408571#i原创 2016-07-23 22:26:43 · 273 阅读 · 0 评论 -
POJ 2524 宗教信仰 .
题目地址水题 求有多少个集合#include#include#include#include #include#include#include#includeusing namespace std;const int maxn=50000+5;int p[maxn];int ans=0;int getParent(int x){ if(p[x]==x) retur原创 2016-07-23 23:05:53 · 1319 阅读 · 0 评论 -
POJ 2492 A Bug's Life .
POJ 1182 食物链 * 的简易版本此题目POJ题目地址这类问题共同点就是 1)分为固定几类,2)有类似一个环 男-->女--> 男要点就是:1)思考集合与集合合并的时候两个根的关系 2)结点压缩的时候,结点与根的关系怎么根据边递推上去#include#include#include#include #include#inc原创 2016-07-24 00:16:52 · 311 阅读 · 0 评论 -
POJ 1703 Find them, Catch them .
题目地址#include#include#include#include #include#include#include#includeusing namespace std;const int maxn=100000+5;int p[maxn],r[maxn];int getParent(int x){ if(p[x]==x) return x; in原创 2016-07-24 10:43:00 · 248 阅读 · 0 评论 -
POJ 1861 Network .
最最基础题百练OJ有毒 POJ是对的,在百练怎么都不对题目地址#include#include#include#include #include#include#include#includeusing namespace std;const int maxn=15000+5;int p[1000+5],r[maxn];struct edge{ int fr原创 2016-07-24 11:48:08 · 251 阅读 · 0 评论 -
百练 2560 Freckles .
题目地址#include#include#include#include #include #include#include#include#includeusing namespace std;const int maxn=100+5;typedef pair Point;int N,p[maxn],r[maxn*maxn];vector points;vect原创 2016-07-24 14:19:14 · 230 阅读 · 0 评论 -
POJ 2236 Wireless Network .
题目地址#include#include#include#include #include#include#include#includeusing namespace std;const int maxn=(1001+5);int p[maxn];double d[maxn][maxn];int N,maxd;int getPar(int x){ retu原创 2016-07-24 15:58:51 · 364 阅读 · 0 评论 -
POJ 1456 Supermarket [贪心+并查集]
题目地址贪心:优先选利益最大的商品,从deadline向前推直到都放不了再选下一个商品利益最大的关键是判断哪一些日子不能再放了,最简单的方法就是一个数组+一个for循环判断但更快的是用并查集,p=find(deadline) 当p>0,p就是可以放的日子 否则放不了;放好后更新parent[p]=p-1;向前一天递推#include#include#includ原创 2016-07-24 18:14:10 · 309 阅读 · 0 评论 -
POJ 3264 Balanced Lineup .
题目地址最基础的线段树题目,很明显的区间操作,所以第一时间要想到线段树用线段树解题,关键是要想清楚每个节点要存哪些信息(当然区间起终点,以及左右子节点指针是必须的),以及这些信息如何高效更新,维护,查询。不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。#include#include#include#includeusing namespac原创 2016-07-24 19:23:42 · 249 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers -
题目地址一般求和首先想到就是每个结点保存sum的值代表这个区间的和那么求区间的和就是找到[s,e]这个区间的结点并返回该sum值,复杂度为O(logn)但是这样子有个不好的地方就是假如最坏的情况下把1~n区间都加c值,那么每个1~n的叶子结点都要遍历到且+c ,则时间复杂度就为O(nlogn)于是就在结点中保存Inc这个值,表示该区间[s,e]每个数都加了c,那么上述情况复杂度就变原创 2016-07-24 21:25:32 · 241 阅读 · 0 评论 -
POJ 1151 Atlantis *
题目地址一直WA 一个一个字符比对正确代码,想吐槽的是 答案输出只能%f !!! woc还有犯了一些小错误 比如坐标值y用int保存了从左到右每个x值,把y的坐标分为n-1个区间,那么就转化为线段树了#include#include#include#includeusing namespace std;const int maxn=100+5;原创 2016-07-25 20:44:49 · 271 阅读 · 0 评论 -
POJ 2528 Mayor's posters -
题目地址要用到离散化一直Runtime Error 发现原因是数组开在main() 函数里 应该是开不下导致的#include#include#include#includeusing namespace std;struct CPoster{ int L,R;}pos[10100];struct CNode{ int L,R; bool Covered;原创 2016-07-25 01:06:52 · 301 阅读 · 0 评论 -
POJ 3321 Apple Tree *
改变某点值,计算和很像树状数组很难想到的是如何把它变为区间具体做法是做一次dfs,记下每个节点的开始时间Start[i]和结束时间End[i],那么对于i节点的所有子孙的开始时间和结束时间都应位于Start[i]和End[i]之间然后用树状数组C统计Start[i]到End[i]之间的附加苹果总数。这里用树状数组统计区间可以用Sum(End[i])-Sum(Start[原创 2016-07-25 22:43:33 · 280 阅读 · 0 评论 -
POJ 2007 Scrambled Polygon .
题目地址就是把点逆时针顺序排序把每个点看成从原点出发的向量利用叉积逆时针转180°以内为正的性质就能逆时针将点排序了#include#include#include#include#includeusing namespace std;typedef pair Point;vector G;double operator ^ (const Point& x,cons原创 2016-07-29 08:43:52 · 269 阅读 · 0 评论 -
百练 2624 4th Point .
水题一道.. 题目地址:http://www.bailian.openjudge.cn/practice/2624#include#includeusing namespace std;struct Point{ //点 double x,y; Point(double x,double y):x(x),y(y) {} Point operator + (const Poi原创 2016-07-30 02:07:40 · 375 阅读 · 0 评论 -
POJ 1066 Treasure Hunt (线段与线段相交) -
题目地址:http://poj.org/problem?id=1066可以1)从相邻两点的中间出发,求中间穿过多少直线但首先要极角排序,而且极角相同情况下离原点近的在前面也可以2)直接从每个墙的端点出发,这样就不用再排序了注意但n=1时要输出11)方法代码如下#include#include#include#include#includeusing namespa原创 2016-08-03 17:03:51 · 218 阅读 · 0 评论 -
POJ 3696 The Luckiest number 欧拉定理+快速幂+GCD *
题目地址:http://poj.org/problem?id=3696思路来源:1,2,3,4关键是推公式:(10^x-1)/9*8=L*k,->(10^x-1)*8=9*L*k->(10^x-1)*8/gcd(9*L,8)=9*L/gcd(9*L)*k 而8/gcd(9*L,8)与9*L/gcd(9*L,8)互质,因为他们除掉了gcd->9*L/gcd(9*L,8)|(1原创 2016-08-13 16:32:27 · 366 阅读 · 0 评论 -
POJ 1286 Necklace of Beads Polya .
题目地址:http://poj.org/problem?id=1286旋转+翻转,裸的算法#include#include#includeusing namespace std;typedef long long LL;int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}int euler_phi(in原创 2016-08-15 14:01:34 · 260 阅读 · 0 评论 -
POJ 2689 Prime Distance 素数筛选 -
题目地址:http://poj.org/problem?id=2689思路来源:http://blog.youkuaiyun.com/w20810/article/details/43313261#include#include#include#include#includeusing namespace std;typedef long long LL;vector primes;b原创 2016-08-13 14:06:06 · 295 阅读 · 0 评论 -
POJ 2142 The Balance .
题目地址:http://poj.org/problem?id=2142有两种可能的情况:a与d放在一起,即 ax+d=byb与d放在一起,即 ax=by+d因为x,y是任取的 ,所以解下面一个方程ax+by=d 利用扩展欧几里得定理,可得两组解,1. x的最小非负解,及其对应的y2. y的最小非负解,及其对应的x因为求的是|x|+|y|的最小值,比较一下就好了原创 2016-08-13 12:39:21 · 248 阅读 · 0 评论 -
POJ 2478 Farey Sequence 欧拉函数 .
题目地址:http://poj.org/problem?id=2478对于每个分母,既约真分数的个数就是小于n的与n互质的个数,即欧拉函数的值φ(n)n#include#include#include#include#include#includeusing namespace std;typedef long long LL;void phi_table(int n,LL *原创 2016-08-13 12:07:18 · 236 阅读 · 0 评论 -
POJ 2891 Strange Way to Express Integers 中国剩余定理的一般情况
题目地址:http://poj.org/problem?id=2891思路:http://blog.youkuaiyun.com/qq_34446253/article/details/52192786#include#include#includeusing namespace std;typedef long long LL;LL gcdEx(LL a,LL b,LL& x,LL& y)原创 2016-08-12 17:09:25 · 279 阅读 · 0 评论 -
POJ 1006 Biorhythms .
裸的中国剩余定理求三个数的周期就是求他们的最小倍数而且这三个数正好互素,所以肯定是中国剩余定理#includeusing namespace std;int gcdEx(int a,int b,int& x,int& y){ //求ax+by=gcd(a,b) 的整数解 返回gcd(a,b); if(b==0) { x=1; y=0; return a; } in原创 2016-08-07 17:04:39 · 282 阅读 · 0 评论 -
POJ 3233 Matrix Power Series (矩阵乘法+快速幂+等比二分求和) -
题目地址:http://poj.org/problem?id=3233关于矩阵的计算参见另外一篇博客:http://blog.youkuaiyun.com/qq_34446253/article/details/52133426再加上快速幂算法和等比二分求和就好了#include#include#include#include#includeusing namespace std原创 2016-08-06 00:04:06 · 347 阅读 · 0 评论 -
POJ 1258 Agri-Net MST .
题目地址:http://poj.org/problem?id=1258裸的算法#include#include#include#includeusing namespace std;const int INF=1<<30;struct Edge{ int vex; int w; Edge(int v=0,int w=INF):vex(v),w(w){} bool原创 2016-08-15 16:42:41 · 265 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate -
题目地址:http://poj.org/problem?id=1228因为每条边至少要有3个点,所以要判断每条边有几个点共线方法是求出凸包的点,再任意枚举凸包上相邻的两个点,再遍历其他点利用叉积看是否与它共线要注意:但点数小于6是肯定不可能的,还有所有点都共线的情况也是不可能的#include#include#include#include#includeusin原创 2016-08-03 22:24:44 · 283 阅读 · 0 评论 -
POJ 2154 Color Polya定理+欧拉函数优化 -
题目地址:http://poj.org/problem?id=2154一直WA,然后发现[m^n%p]/2与m^(n-1)%p不一样...#include#include#includeusing namespace std;typedef long long LL;int N,P;int euler_phi(int n){ int res=1; for(int i=2;原创 2016-08-15 18:23:43 · 467 阅读 · 0 评论 -
POJ 1279 Art Gallery .
题目地址:http://poj.org/problem?id=1279求完面积要取绝对值,输出答案要用%f而不是%lf模板题,直接套模板就好了#include#include#include#include#includeusing namespace std;#define Vector Pointconst double EPS=1e-6;int Sign(doub原创 2016-08-04 12:30:47 · 667 阅读 · 0 评论 -
POJ 3159 Candies (Dijkstra+堆优化) .
题目地址:http://poj.org/problem?id=3159时间挺紧的#include#include#include#include#include#includeusing namespace std;const int maxn=30000+5; typedef pair pii;struct Edge{ int to,weight; Edge(int原创 2016-08-16 14:20:29 · 298 阅读 · 0 评论 -
快速幂算法
原理:a^b可以分为以下几种情况若b是偶数,a^b=a^(b/2) * a^(b/2)若b是奇数,a^b=a^(b/2) * a^(b/2) * a;这样就可以用递归了代码如下int pow_mod(int a,int n,int m) //a^n 结果对m取模 { if(n==0) return 1; int x= pow_mod(a,n/2,m); long l原创 2016-08-04 17:36:07 · 338 阅读 · 0 评论 -
POJ 1860 Currency Exchange Bellma求有无环 .
题目地址:http://poj.org/problem?id=1860正好是Bellman的逆运算求的是最长路径,且如果有一条能一直走的正环(代表资产一直增加)就输出YES#include#include#include#includeusing namespace std;const int INF=(1<<30);struct Edge{ int from,to; d原创 2016-08-16 16:08:38 · 276 阅读 · 0 评论 -
POJ 2240 Arbitrage Bellman判断有无环 .
题目地址:http://poj.org/problem?id=2240string s; cin>>s 超级慢 TLE ,用scanf %s 就47ms#include#include#include#include#includeusing namespace std;const int INF=(1<<30);struct Edge{ int from,to; doub原创 2016-08-16 17:17:30 · 285 阅读 · 0 评论 -
POJ 2387 Til the Cows Come Home (Spfa) .
题目地址:http://poj.org/problem?id=2387考虑双向边,还有重边,裸的算法#include#include#include#include#includeusing namespace std;const int INF=(1<<30);const int maxn=1000+5;struct Edge{ int to; int weight;原创 2016-08-16 18:26:18 · 269 阅读 · 0 评论 -
POJ 3256 Cow Picnic SPFA
题目地址:http://poj.org/problem?id=3256 题目求的是,所有奶牛都可以到的草坪有几块那只要利用SPFA,枚举所有草坪,求出所有奶牛草坪能否到达该草坪就好了因为要求的是其他草坪能否到达该草坪,所以把边都反向就好了#include#include#include#include#includeusing namespace std;const i原创 2016-08-16 19:06:17 · 322 阅读 · 0 评论 -
POJ 1190 生日蛋糕
生日蛋糕#include#include#include#include#include#includeusing namespace std;const int maxn=10000+5;int N,M,minS,minV[maxn],minA[maxn];int getMaxS(int r,int h,int H){ int ans=0; for(int i=0;i原创 2016-07-21 21:42:30 · 260 阅读 · 0 评论 -
POJ 1724 ROADS
ROADS#include#include#include#include#include#includeusing namespace std;const int maxn=10000+5;int N,K,R;int best[105][maxn],shortRoad=(1<<30),vis[maxn];struct Point{ int to,L,T; Point(原创 2016-07-21 21:41:17 · 241 阅读 · 0 评论 -
百练 4116 拯救行动
4116:拯救行动#include#include#include#include#include#includeusing namespace std;const int maxn=200+5;int R,C,vis[maxn][maxn];char G[maxn][maxn];int r0,c0,r1,c1;struct Point{ int x,y,ste原创 2016-07-21 21:40:04 · 1111 阅读 · 0 评论