
自己构建方法解决的问题
文章平均质量分 53
acm_JL
这个作者很懒,什么都没留下…
展开
-
poj-1852
解题思路:我们直接忽略蚂蚁的相遇事件,假设所有的蚂蚁即使相遇了也不会做出改变,仍然走自己的路。这样每一个蚂蚁掉落的时间就只有2个取值,一个是向左走的时间,一个是向右走的时间,全部掉落的最早时间是每只蚂蚁尽快掉落用时的最大值,因为这些蚂蚁现在互不干扰,同理,全部掉落的最迟时间就是每只蚂蚁尽量慢掉落用时的最大值。#include#includeusing namespace std;in原创 2015-11-21 20:59:32 · 818 阅读 · 0 评论 -
uva_10922
#include#includeusing namespace std;char str[100];int main() { int i,j,sum=0,deep=0; while(cin>>str) { sum=0; deep=0; if(strlen(str)==0||str[0]=='0') break; for(i=0;i<strlen(str);i+原创 2015-12-13 21:51:59 · 486 阅读 · 0 评论 -
uva_10929
#include#includeusing namespace std;int main(){ string str; int i,a=0,b=0; while(cin>>str) { for(i=0;i<=str.length();i=i+2) a+=str[i]-'0'; for(i=1;i<=str.length();i=i+2) // str.length()原创 2015-12-13 22:06:38 · 571 阅读 · 0 评论 -
poj_2739
#includeusing namespace std;const int maxp=2000,n=10000;int prime[maxp],total=0,m;bool isprime(int k){ for(int i=0;i<total;i++) { if(k%prime[i]==0) return false; } return true;}int ma原创 2015-12-13 16:23:06 · 484 阅读 · 0 评论 -
poj_1003
#includeusing namespace std;const int maxn=300;const double delta=1e-8;int zero(double x){ if(x<-delta) return -1; return x>delta;}int main(){ double len[maxn]; int total; len[0]=0.0;原创 2015-12-13 16:23:45 · 435 阅读 · 0 评论 -
poj_3006
#include#includeusing namespace std;bool isPrime(int num){ if(num<2){ return false; } for(int i=2;i<=sqrt(1.0*num);i++){ if(num%i==0){ return false; } } return true;}int main(int a原创 2015-12-13 20:07:13 · 361 阅读 · 0 评论 -
poj_2242
#include #include #include #include #include #include using namespace std;#define clc(s,t) memset(s,t,sizeof(s))#define PI 3.141592653589793double dis(double a,double b,double c,double d){原创 2015-12-13 20:13:13 · 518 阅读 · 0 评论 -
poj_2136
#include #include #include #include using namespace std;int main(){ int len,i,j,maxhigh=0; string s; int c[26]; memset(c,0,sizeof(c)); while (cin>>s) { len=s.length(); for(i=0;i<len;i+原创 2015-12-13 20:32:15 · 531 阅读 · 0 评论 -
poj_2339
解题思路:利用两个矩阵,一个存储昨天,一个存储今天。当昨天的S旁边为P的时候,就在今天的矩阵中将P改成S,其他情况,依次类推。注意的是每更新一次就要把更新后的矩阵当做昨天的矩阵,然后赋值给今天,在进行新的循环/*strcpy和memcpy主要有以下3方面的区别。1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。2原创 2015-12-07 00:53:32 · 818 阅读 · 0 评论 -
poj_2664
主要还是看懂题意。3 2 //选择了3科,两个类别0123 9876 2222 //选择的3科科目号2 1 8888 2222 //2表示在这个类别里共有两科8888和2222,最少要选择一个3 2 9876 2222 7654原创 2015-12-07 01:06:29 · 473 阅读 · 0 评论 -
uva-10921
#include#include#includeusing namespace std;char num[50]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'};//注意要加‘’ char s[100];int main()原创 2015-12-08 21:29:23 · 544 阅读 · 0 评论 -
poj_1833
#include #include #include using namespace std;int num[1024];int main(){ int cas,n,k,i,j; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&k); for(i=原创 2015-12-13 20:59:15 · 516 阅读 · 0 评论 -
Money
时间限制(普通/Java):1000MS/3000MS 运行内存限制:32768KByte比赛描述 土豪BJ当前身上有现金x元,为了接济他的穷diao基友Tc,他对Tc说你现在可以交换我当前现金的任意两个相邻数字最多k次,多出来的钱都给你,Tc想知道自己最多能得到多少现金。输入输入第一行为一个整数T代表数据组数,每组数据只有一行包括两个数字x和k,原创 2016-04-13 22:35:53 · 832 阅读 · 0 评论 -
poj2573
解题思路:由于一次过桥最多两个人,且手电筒需要往返传递,因此以两个成员过桥为一个分析单位,计算过桥时间,我们按照过桥时间递增的顺序将n个成员排序,设当前序列中,A是最快的人,B是次快的人,a是最慢的人,b是次慢的人。又两种过桥方案:(1)用最快的成员传递手电筒帮助最慢和次慢的人过桥,所有时间为2*A+a+b;(2)用最快和次快的成员传递手电筒帮助最慢和次慢的人过桥:步骤如下原创 2015-11-21 16:28:26 · 1021 阅读 · 0 评论 -
poj_1338
对于每一个质数2 3 5,我们都要找到对应的之前已经计算出的最小的丑数使之乘以这个质数后大于当前的丑数,然后再从这三个里取最小的那个,我们记录三个数a2,a3,a5,分别保存对应的质数计算到哪个下标了,然后更新所有质数对应的下标,使之乘积大于当前的丑数#include using namespace std;const int M=1501;int ans[M];int getMin(in原创 2015-12-13 20:40:29 · 403 阅读 · 0 评论 -
poj-1528
题目不难,主要注意输出格式即可。#include #include //有此头文件才可以用printf输出方式。 #include//包含cout输出格式的头文件 using namespace std;int main(){ int i,n,a[120]; printf("PERFECTION OUTPUT\n"); while(scanf("%d",&n))原创 2015-11-22 13:44:48 · 616 阅读 · 0 评论 -
poj-2538
解题思路:用一个字符数组存储键盘上面的字符,利用putchar和getchar进行输入输出字符,找到对应字符出现的位置,输出其前面一个即可,采用字符数组避免了大量的switch/case语句。#includeint main(){ char *s="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";//用字符数组的形式存储元素,省去了大原创 2015-11-23 02:07:43 · 913 阅读 · 0 评论 -
poj-2608
#includeint main(){ char *alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";//用字符数组存储字母 char *num="01230120022455012623010202";//用字符数组存储对应的数字字符 char ch,last; last='0';//last的主要作用是判断是否输出和剔除重复数字。 while((ch=g原创 2015-11-23 03:12:16 · 694 阅读 · 0 评论 -
poj-2234
此题属于尼姆博奕(Nimm Game):有n堆各若干个物品,两个人轮流从某一堆取任意多(或者最多m个,只需把每堆%m)的物品,规定每次至少取一个,多者不限,最后取光者得胜。 强记策略: n堆物品数量对应的n个二进制数,连续n-1次异或运算,若结果为0,则说明所有位平衡,后者获胜,若结果为1,则说明存在非平衡位,前者获胜。#includeusing namespace std;int原创 2015-11-22 00:01:43 · 691 阅读 · 0 评论 -
poj-1597
解题思路:题目的意思就是一个生成随机数的函数, seed[x+1] = ( seed[x] +step) % mod,判断这个随机生成函数的好坏的依据是如果能够产生0~mod-1内的所有数,就是一个好的,否则坏。假设在k步之后,seed[k] = seed[0],故有seed[k] = ( seed[0] +step*k ) % mod=seed[0],显然step* k原创 2015-11-23 01:19:22 · 1015 阅读 · 0 评论 -
poj-2612
解题思路:题目其实不难,但是处理的时候技巧性很强,在输入过程中利用标志flag直接判断有无触发地雷,直接省去了两个for循环。多次使用a?b:c的结构,省去了大量不必要的判断语句,其实解题时还要注意的就是,我们应该把所有的点周围的地雷数利用二重循环存储到数组中,而不应该在判断的时候在临时计算。此题给我最大的启发就是,提前将一些要计算的算好存起来,不要一边判断一边计算,效率极低还易出错。#inclu原创 2015-11-25 01:37:57 · 879 阅读 · 0 评论 -
poj-2661-Factstone Benchmark
解题思路:在1960年,字的大小是4位,以后每十年翻一番,就意味着,y年的字的位数为k=pow(2,(y-1960)/10),而k位的无符号整数是pow(2,k)-1,n!要小于等于pow(2,k)-1。直接进行求解容易溢出和超时,所以采用对数运算。n!c++代码如下:#include#includeusing namespace std;int main(){ int原创 2015-11-21 00:11:35 · 627 阅读 · 0 评论 -
poj-2361
解题思路:由于X先走并且两个人轮流执子,所以当网格图无效的时候,存在下列5种情况: (1)O的个数大于X (2)X的个数至少比O大2 (3)O和X同时赢 (4)X赢,但是双方的棋子数一样 (5)O赢,但是双方棋子数不同 技巧:用一个标志位flag来判断是否合法,尤其注意掌握判断行、列、对角线的元素是否相同的方法,技巧性较强。#includechar plan原创 2015-11-25 10:54:49 · 880 阅读 · 0 评论 -
poj_2196
#include using namespace std;int calc(int k, int b){ int result=0; while(k/b) { result+=(k%b); k/=b; } result+=(k%b); return result;}int main(){ int i; for(i=2992;i<=9999;i++) if((原创 2015-12-13 16:42:35 · 507 阅读 · 0 评论 -
poj_1019
//超时了 #includeusing namespace std;int len[1010];int main(){ int m,t,i,sum; cin>>m; for(i=1;i<=1000;i++) len[i]=i; while(m--) { cin>>t; sum=0; i=1; while(sum<t) { sum+=len[i];原创 2015-12-13 21:14:09 · 363 阅读 · 0 评论 -
poj_1005
#include#includeint num;float x,y;int i,year;double calc;int main(){ scanf("%d",&num); for(i=1;i<=num;i++) { scanf("%f %f ",&x,&y); calc=(x*x+y*y)*3.14/2/50; year=ceil(calc); //向上取整函数原创 2015-12-13 16:24:14 · 420 阅读 · 0 评论 -
poj-1581
#include #include #include #include //定义符号常量using namespace std;int main(){ int n,sub,time,firstsub,firsttime,i,j,k; string team,firstteam; cin>>n; firstsub=0; firsttime=INT_MAX;//定义在 #inc原创 2015-12-13 20:02:29 · 675 阅读 · 0 评论 -
Dreaming
Dreaming时间限制(普通/Java):4000MS/12000MS 运行内存限制:16384KByte比赛描述 BJ梦到自己被n个妹子围住,每个妹子对他有个好感度ai,他对这些妹子的吸引力被定义为位置连续的妹子对他好感度和的最大值,现在他想知道自己的吸引力是多少。输入第一行为一个数字T代表数据组数,每组数据的第一行为一个数字n表示妹子原创 2016-04-13 23:24:41 · 570 阅读 · 0 评论