
POJ
文章平均质量分 64
bladeLight
这个作者很懒,什么都没留下…
展开
-
POJ 3176
//11148335 c00h00g 3176 Accepted 1364K 79MS G++ 675B 2012-12-30 13:21:47//水体,练手,数塔问题 #include#include#includeusing namespace std;int mat[355][355];int dp[355][355];int N;int main(){ sca原创 2012-12-30 13:17:31 · 718 阅读 · 0 评论 -
POJ 2028 When can we meet?
//11168440 c00h00g 2028 Accepted 396K 32MS G++ 824B 2013-01-10 15:55:32//首先统计每个日期出现的次数,然后枚举出现的次数最大为n最小为q,如果找到break输出 //奇怪:改成=105就不行了 #include#include#includeint date[105];int n,q;int main(){原创 2013-01-10 15:52:09 · 645 阅读 · 0 评论 -
POJ 1141
//11208462 c00h00g 1141 Accepted 428K 0MS G++ 1601B 2013-01-25 16:44:59//其实黑书中只需要相等和分割两部分就行了。即只需要判断brac[i][j]=='()'或'[]'的情况和枚举分割点的情况//此题黑书中已经给出了比较具体的解释,关键是如何输出,其实我们只需要使用path[i][j]来记录分割点k,然后//递归输出就行原创 2013-01-25 16:45:18 · 282 阅读 · 0 评论 -
POJ 1026 Cipher
//11170981 c00h00g 1026 Accepted 404K 110MS G++ 1120B 2013-01-11 22:24:41//只需要考虑每一个字符的周期,使用circle数组记录//比如说题目中的例子 1->4->7->1可知,这三个数的周期是3,只需要使用k%3就可以知道需要操作的次数 #include#include#includeint a[205];原创 2013-01-11 22:22:53 · 275 阅读 · 0 评论 -
POJ 1068
//11172378 c00h00g 1068 Accepted 408K 0MS G++ 1427B 2013-01-12 19:48:14//比较简单,简单模拟一下 #include#includechar ch[25];int p[25];int t,n,cur;int main(){ scanf("%d",&t); while(t--){ s原创 2013-01-12 19:44:34 · 304 阅读 · 0 评论 -
POJ 2632 模拟
//11174234 c00h00g 2632 Accepted 452K 32MS G++ 6938B 2013-01-13 22:30:37//题意,只需要按照给定的操作进行移动,出现碰撞要推出//WA1次,原因:需要返回的是第一次碰撞的结果,如果某条路径上可能出现多个碰撞,输出第一个就可以了 #include#include#include#includeusing names原创 2013-01-13 22:30:49 · 501 阅读 · 0 评论 -
POJ 2411 位压缩dp
参考:http://blog.youkuaiyun.com/woshi250hua/article/details/7952496状态转移方程:dp[i+1][k]=sum(dp[i][j]);对于每一行,因为最多有11列,所以最多有2^11=2048个状态,由于一行的状态只受前一行状态的影响,因此关键是j如何才能转向k。本题目采用的是插头dp,如果某个位置为0表示该位置是一个插头,可以将木块竖着放。否则原创 2013-01-28 18:20:07 · 352 阅读 · 0 评论 -
POJ 1080 dp
//11175259 c00h00g 1080 Accepted 640K 0MS G++ 1444B 2013-01-14 16:18:02//题意:根据给定的矩阵,求两个字符串的最大相似度//转移方程为 dp[i][j]=max(dp[i-1][j-1]+mat[a[i]][b[j]],dp[i][j-1]+mat['-'][b[j]],dp[i-1][j]+mat['-'][a[i]])原创 2013-01-14 16:21:56 · 386 阅读 · 0 评论 -
POJ 2002 快速查找
这是一道几何+快速查找的题目。根据扩展方向的不同,主要有两种坐标的形式。我们只需要选择想一个方向的扩展,因为我们需要枚举所有的节点。但是这要做还是会有重复的,根据AB求CD坐标和根据AD求BC坐标,其实这两种确定的是一个正方形,所以最后的结果需要除以2。 另,枚举两个点,求得另外两个点,判断求出的这两个点是否在给定的点集中。我使用的是二分查找策略,首先需要对坐标先按照x排序,原创 2013-01-29 17:30:18 · 404 阅读 · 0 评论 -
POJ 1664 放苹果
此题目其实和整数划分的代码一样,但是解释却不同。令f(m,n)表示m个苹果放入n个盘子中,则1、m==1或n==1时,只有一种方法2、m3、m==n时,分为两部分,第一部分为1,表示所有盘子一个盘子放一个,只有一种情况;第二部分为f(m,m-1)表示将m个苹果放入m-1个盘子中。4、m>n时,分为两部分,第一部分为有一个盘子不放f(m,n-1).#include#in原创 2013-01-29 00:42:57 · 341 阅读 · 0 评论 -
POJ 1083 Moving Tables
//11168388 c00h00g 1083 Accepted 396K 0MS G++ 765B 2013-01-10 15:27:02//WA 2次,原因,未考虑from>to的情况//题意,只需要保存最大重叠次数就行了 #include#include#includeint room[405];int T,N;int main(){ scanf("%d",&T)原创 2013-01-10 15:23:12 · 289 阅读 · 0 评论 -
POJ 1087 UNIX dinic
将设备和插座都看成节点,并增加源点和终点。从源点s到每个设备连一条线,容量为1;从设备到该设备应该插入的插座连一条线,容量为1;对于适配器,假设输入的为a b,a表示该适配器的插座(即提供的插孔),b表示插头(即往插孔上插的插头),从a到b连一条线,容量为无穷大,表示a可以插在b上,向外提供a插座;从以前室内拥有的插座到终点t连一条线,容量为1;如下图所示://11168017 c原创 2013-01-10 10:46:42 · 282 阅读 · 0 评论 -
POJ 1308
//11159531 c00h00g 1308 Accepted 396K 0MS G++ 2471B 2013-01-05 16:30:10//剧搓无比的代码//情况太多了,一开始只考虑了,节点入度大于1和是否有一个共同祖先两个因素//看了discuss,知道了还有几种情况没考虑,第一种是:1 2 2 1 0 0,这种会形成环,会导致我的findset一直递归(Memory Limit E原创 2013-01-05 16:30:13 · 382 阅读 · 0 评论 -
POJ 2524 并查集
//11160831 c00h00g 2524 Accepted 632K 313MS G++ 851B 2013-01-06 09:42:44//简单的并查集,主要是如何统计集合的个数,如果有一个共同的祖先则统计一次 #include#includeint pa[50005];bool vis[50005];int findset(int x){return pa[x]!=x?pa原创 2013-01-06 09:39:05 · 309 阅读 · 0 评论 -
POJ 1861 kruskal+优先队列+并查集
//11161129 c00h00g 1861 Accepted 900K 110MS G++ 1462B 2013-01-06 13:00:00//kruskal+优先队列+并查集 #include#include#includeusing namespace std;int N,M,i,j,res;struct Edge{ int from,to,w; Edge原创 2013-01-06 12:56:06 · 472 阅读 · 0 评论 -
POJ 1251 kruskal+优先队列+并查集
//将scanf改成cin就ac了 //使用的是kruskal+优先队列 #include#include#include#include#includeusing namespace std;struct Edge{ int from,to,w; Edge(int x,int y,int z):from(x),to(y),w(z){} bool ope原创 2012-12-23 00:21:39 · 473 阅读 · 0 评论 -
POJ 1029
//11162842 c00h00g 1029 Accepted 792K 47MS G++ 3378B 2013-01-07 10:35:07//枚举每一个硬币是否有可能是false coin//等号左右两边的数字肯定不是false coin,只需要枚举除此之外的硬币//将大于号转化为小于号来处理//WA 1次,原因:看下面这组数据,枚举1的时候并不能产生矛盾,因为没有处理这种情况,当假原创 2013-01-07 10:34:37 · 546 阅读 · 0 评论 -
POJ 1789
//11163000 c00h00g 1789 Accepted 15844K 657MS G++ 1411B 2013-01-07 12:35:43 用kruskal的话需要计算边的个数没有prim方便#include#include#includeint N;char input[2005][8];int quality(const char* a,const char* b){原创 2013-01-07 12:31:11 · 576 阅读 · 0 评论 -
POJ 1459 最大流
//11166005 c00h00g 1459 Accepted 688K 579MS G++ 1585B 2013-01-08 22:10:35//第一道网络流//需要添加源点s和汇点t,power station上的最大发电量转化为源点到该发电站边的容量,同理consumer到t的边的容量为consumer的最大耗电量//这一题读入是难点,如果使用c++读入比较简单,使用c读入的话需要注原创 2013-01-08 22:10:53 · 408 阅读 · 0 评论 -
POJ 1149 最大流 PIGS
//11166606 c00h00g 1149 Accepted 696K 47MS G++ 1819B 2013-01-09 12:03:48//将顾客看成顶点,构造网络流//废话不多说,参看大牛解释 http://wenku.baidu.com/view/0ad00abec77da26925c5b01c.html #include#include#include#includeu原创 2013-01-09 12:00:35 · 301 阅读 · 0 评论 -
POJ 1221
//题意:求从左到中间非递减的对称序列的个数//参考:http://blog.youkuaiyun.com/linulysses/article/details/5820916//根据序列的个数划分为 1、奇数个元素 2、偶数个元素 //不管n为奇数还是偶数,都可以划分成含有奇数个元素的序列,我们可以枚举中间的元素i,然后求剩下元素的和y=(n-i)/2(必须整除),只需求f(y,i)//如果n为偶数原创 2013-01-24 20:42:29 · 777 阅读 · 0 评论 -
POJ 1120
题意:给一个20*20矩阵,每个位置上有一个0-3之间的值,给定16个元素的数组D,对于矩阵的每个元素,它的变化为D[k],其中k为自身元素+上下左右元素的和。最后,根据最后的矩阵输出响应的字符。//11222749 c00h00g 1120 Accepted 168K 0MS C++ 1363B 2013-01-30 17:20:08//WA 2次 原因:这题目不是以EOF结束,而且只有一原创 2013-01-30 17:18:34 · 586 阅读 · 0 评论 -
POJ 1035 字符串
题目大意:给定一个字典,然后给定一组单词集合,如果该单词在字典中,则输出correct;否则,如果该单词能够通过1>插入一个字母 2>删除一个字母 3>替换一个字母三种操作中的一种转化为字典序中的某个单词,输出该单词。直接暴力过的,c++能过,g++超时。//11222230 c00h00g 1035 Accepted 1200K 500MS C++ 1530B 2013-01-30 15:0原创 2013-01-30 15:07:03 · 578 阅读 · 0 评论 -
POJ 1775 dfs或dp
这一题要注意两点1、0!=1 2、最后是一个负数,并不一定是-1可以使用dfs来做也可以当做背包来做。//11352654 c00h00g 1775 Accepted 384K 500MS G++ 635B 2013-03-15 17:31:41//不是很会写递归,参考别人的程序 #include#include原创 2013-03-15 17:28:53 · 705 阅读 · 0 评论 -
POJ 2159 模拟
这一题的题意太晦涩了,含义是指:将任意字母替换为任意一个字母,只要不出现多个字母替换成同一个就可以,即为一一映射。因此,我们只需要判断两个字符含有的不同的字母数量以及对应出现的次数都相同就行了。//11410806 c00h00g 2159 Accepted 356K 32MS G++ 1015B 2013-03-29 15:59:15#include#include#include#原创 2013-03-29 15:56:15 · 1170 阅读 · 0 评论 -
POJ 2739 满足条件的连续素数和的个数
//11422316 c00h00g 2739 Accepted 828K 16MS G++ 896B 2013-04-01 15:55:42#include#include#includeconst int Max=100000;int p[Max];int a[Max];int sum[Max];int cp_prime(int n){ int l=(int)sqrt原创 2013-04-01 15:57:50 · 1204 阅读 · 0 评论 -
POJ 3299 水题
//11363256 c00h00g 3299 Accepted 780K 0MS G++ 1173B 2013-03-18 11:58:22#include#include#include#includeusing namespace std;#define E 2.718281828double get_e(double d){ return 6.11*pow(E,54原创 2013-03-18 11:56:23 · 966 阅读 · 0 评论 -
BOJ 316 Password dp
Password这道题目,本来就知道要用dp来做,但是不知道怎么去想。问了同学,他的大致思路是这样的,假设字符串为ch[1005],字符串长度为len,设置dp[0]=1,1->len-1初始化为0。dp[i]表示i位之前总共有多少种组合方法,所以我们要求的结果是dp[len]。 举个例子: 1 2 3 初始化dp: 1原创 2013-03-21 15:20:23 · 863 阅读 · 0 评论 -
BOJ 319 3230391's easy problem
考察素因子分解+打表,比如6=2*3,即2的x次方*3的y次方,x可以取0或1,3可以取0或1,故2*2=4种因子/* for(int i=2;i<num;i++) { for(int j=prim[i-1];1;j+=2) { int k,l; for(k=0,l=sqrt(j);prim[k]<=l&&j%prim[k];k+原创 2013-03-22 20:24:33 · 864 阅读 · 0 评论 -
POJ 1033 模拟
//11158197 c00h00g 1033 Accepted 672K 454MS G++ 1947B 2013-01-04 22:40:37//几十天没看,回过头来,终于想通了//我没有处理环的情况//假设有这样一组数据,1->2,2->3,3->4,4->1,排列应该为 4 1 2 3(输入),我们的做法应该是将1234放入栈中,然后出栈将//4放到从后找出来的一块空的区域,剩下的原创 2013-01-04 22:44:45 · 485 阅读 · 0 评论 -
POJ 3461 kmp
今天重新读了一遍算法导论上的kmp算法,感觉理解比以前更加深刻了,随手写了这段代码。算法导论中,每次都是拿当前字符的下一个字符去比较,如果不能匹配成功的话,根据之前字符串的最长前缀和最长后缀进行移动字符串。注意注释的那一句,为了找到所有的字符串应该这样移动。#include#include#includechar w[10005];char t[1000005];int next[原创 2013-04-07 16:44:24 · 2314 阅读 · 0 评论 -
大牛代码
#includeusing namespace std;int N, K;int arr[10005];bool ok(int v){ int index = 0; int ki = 0; int sumi = 0; while(index < N && ki < K){ if(sumi + arr[index] <= v){ sumi += arr[index];原创 2013-03-24 13:40:13 · 1769 阅读 · 0 评论 -
POJ 2506 高精度+递推+记忆化搜索
根据编程之美上讲的瓷砖覆盖地板问题,可得f(n)=2*f(n-2)+f(n-1),如果不使用记忆化搜索的话,计算f(n)的时候的时间复杂度是指数级别的,因为每次都需要重复计算,修改后的时间复杂度是O(n)。不明白为什么f(0)=1。//11348277 c00h00g 2506 Accepted 728K 16MS G++ 869B 2013-03-14 16:05:34#include原创 2013-03-14 16:03:39 · 941 阅读 · 1 评论 -
POJ 3080 查找公共最长子串 kmp+枚举
找出所有串的最长公共子串,我枚举第一个串的每一个子串,然后使用kmp在剩余子串中查找,看是否存在。这里使用了一个减枝,如果枚举的串的长度j-i+1小于已经得出的串,则直接跳过。//11347502 c00h00g 3080 Accepted 384K 16MS G++ 2503B 2013-03-14 11:54:08#include#include#includeint n,m;原创 2013-03-14 11:51:16 · 1125 阅读 · 0 评论 -
POJ 1840 hash
//11225868 c00h00g 1840 Accepted 24868K 407MS G++ 1083B 2013-01-31 22:52:46//我自己想的是移过去一项,即a1*x1^3+a2*x2^3+a3*x3^3+a4*x4^3=-a5*x5^3,然后将左边即为x,枚举左边,可以解出x5,然后判断x5是否在范围内//不过,可能是精度的问题,结果都不正确//然后看晚上用的都是ha原创 2013-01-31 22:56:52 · 371 阅读 · 0 评论 -
POJ 1562
水题//11237724 c00h00g 1562 Accepted 440K 0MS G++ 925B 2013-02-05 00:00:27//一开始使用gets读的,不知道怎么滤过第一个回车,改成scanf就对了 #include#include#includechar mat[105][105];int vis[105][105];int n,m;int dir[8]原创 2013-02-04 23:57:01 · 313 阅读 · 0 评论 -
POJ 1410 几何 浙大模板
#include#include#include#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point{double x,y;};struct line{point a,b;};double xmult(point p1,point p2,point p0){ return (p1.x-p0.x)*(p原创 2013-02-05 12:55:10 · 476 阅读 · 0 评论 -
POJ 3268 01背包+找最小
题意:书架有一个高度h,有N头牛,可以将这些牛叠在一起,求将这些牛叠在一起超过h的最小值。dp[i]表示高度为i时,从N头牛中选择若干头能够达到的最大高度,显然dp[i]=h则输出dp[i]-h。//11240455 c00h00g 3628 Accepted 828K 32MS G++ 641B 2013-02-06 00:14:59#include#include#include原创 2013-02-06 00:16:04 · 390 阅读 · 0 评论 -
POJ 1860
Bellman_Ford算法求解,只需将其改为求最长路,判断图中是否有正环存在,在执行松弛操作时如果某一次没有发生松弛操作,则只需判断d[s]与原始钱的数目的大小关系即可;如果成功的松弛完毕,则说明图中存在着正环,就可以使货币增值.#include#include#includestruct Edge{ int u,v; double rate,com;};Edge转载 2013-03-09 21:58:39 · 599 阅读 · 0 评论 -
POJ 3295
只需要枚举p,q,r,s,t的所有组合即可,总共32中情况,然后用栈来实现。//11332729 c00h00g 3295 Accepted 600K 0MS G++ 2067B 2013-03-10 10:57:10#include#include#include#includeusing namespace std;char input[105];stack st;in原创 2013-03-10 10:52:54 · 539 阅读 · 0 评论