05 2012 档案

摘要:hdu-2147:kiki's gameP点:就是P个石子的时候,对方拿可以赢(自己输的)N点:就是N个石子的时候,自己拿可以赢现在关于P,N的求解有三个规则(1):最终态都是P(2):按照游戏规则,到达当前态的前态都是N的话,当前态是P(3):按照游戏规则,到达当前态的前态至少有一个P的话,当前态是N题意:在一个m*n的棋盘内,从(1,m)点出发,每次可以进行的移动是:左移一,下移一,左下移一。然后kiki每次先走,判断kiki时候会赢(对方无路可走的时候)。我们可以把PN状态的点描绘出来::#include"stdio.h"int main( ){ int n, 阅读全文
posted @ 2012-05-29 22:05 朝圣の路 阅读(1597) 评论(0) 推荐(0)
摘要:思路:直接暴力就好了,不过wa了一次,当时没注意到都是正整数解;代码如下:#include"stdio.h"int main( ){ int i,j,k,sum,flag; while(~scanf("%d",&sum)) { flag=0; for(i=1;i*i<=sum;i++) { for(j=1;j*j<=sum;j++) { if(j*j+i*i>sum) break; for(k=... 阅读全文
posted @ 2012-05-28 23:11 朝圣の路 阅读(239) 评论(0) 推荐(0)
摘要:说起来真惭愧,这题刚开始看没什么思路,然后也没怎么仔细想就直接看别人思路了。思路是这样的:在n个人中找m个人,然后就变成了插板问题。代码如下:#include"stdio.h"__int64 cal(__int64 m,__int64 n){ __int64 s=1,i; for(i=1;i<=m;i++) s=s*(n-i+1)/i; return s;}int main( ){ __int64 n,sum,i; while(~scanf("%I64d",&n)) { sum=0; for(i=2;i<=n;i++... 阅读全文
posted @ 2012-05-28 17:07 朝圣の路 阅读(318) 评论(0) 推荐(0)
摘要:注意v和d都是double类型;代码如下:#include"stdio.h"int main( ){ int i,sum,time,b; double v,d,a; while(~scanf("%lf%lf",&v,&d)) { a=v/d; b=a; if(a-(int)a>0.0001) b++; sum=time=0; for(i=1;;i++) { if(sum+i>=b) break; ... 阅读全文
posted @ 2012-05-28 15:18 朝圣の路 阅读(231) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2483需要对矩阵进行预处理来降低复杂度。代码如下:#include"stdio.h"#include"string.h"int a[305][305],vis1[305][305],vis2[305][305];int sum[305][305];int main( ){ int i,j,r,c,t,count,k,s; scanf("%d",&t); while(t--) { count=0; scanf("%d%d", 阅读全文
posted @ 2012-05-28 14:38 朝圣の路 阅读(251) 评论(0) 推荐(0)
摘要:此题的思路和代码都是别人的,我觉得写得比较清晰,就直接复制过来吧。代码如下:#include <stdio.h>#include <string.h>#define N 128#define inf 0x7fffffffstruct node{ int val; //权值int left, right, parent;}p[1000];int f[N]; //存放每个字母权值int len[N]; //统计编码的长度void hufuman(int n){ int i, min1, min2, pos1, pos2, flag; for(i =0; i <... 阅读全文
posted @ 2012-05-27 17:37 朝圣の路 阅读(180) 评论(0) 推荐(0)
摘要:Interview ArrangementAccepted : 58Submit : 349Time Limit : 5000 MSMemory Limit : 65536 KB作为一名即将毕业大学生,小明即将参加一系列的面试,每场面试都有一个开始时间Si和一个结束时间Ti。小明可以选择参加面试或者放弃面试,但是迟到和早退是不允许的。每场面试对小明心都有不同的价值Vi。请你帮小明安排一些互不冲突的面试,使得最后参加面试的总价值最大。Input有多组测试数据。每组数据的第一行是一个整数1 ≤ N ≤ 100000。接下来N行,每行有三个整数0 ≤ Si< Ti≤ 1000000000, - 阅读全文
posted @ 2012-05-22 15:34 朝圣の路 阅读(355) 评论(0) 推荐(0)
摘要:Girls and BoysAccepted : 50Submit : 213Time Limit : 1000 MSMemory Limit : 65536 KB有N名单身女生和N名单身男生,每个人心中都有一个按喜欢程度对所有异性的排名。每天,所有单身男生都会向自己最喜欢的单身女生表白,而收到表白的女生则会接受她最喜欢的向她表白的男生。于是他们将脱离单身并组成情侣,且永不分离。假设你有读心术,可以知道每个人心中的排名,那么你能够预测最后哪些人将会成为情侣么?Input有多组测试数据。每组测试数据的第一行是一个整数1 ≤ N ≤ 100。接下来N行,每行是一个1到N的排列,代表各个男生对女生的 阅读全文
posted @ 2012-05-21 21:25 朝圣の路 阅读(236) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1701刚开始没看懂题意,不过后来看看别人的才明白,原来是至少的人数必须之多的人数少,以这个作为标度进行逻辑;代码如下:#include"stdio.h"int main( ){ int t,i; double p,q; scanf("%d",&t); while(t--) { scanf("%lf%lf",&p,&q); for(i=1;;i++) { if((int)(p*i/100)<(int)(q*i/100).. 阅读全文
posted @ 2012-05-21 13:42 朝圣の路 阅读(285) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1868没想出来盗用别人的思路:如:15 = 1+2+3+4+5 = 4+5+6 = 7+8,结果为3。设n可以表示成i个连续整数之和,首项为a,则n=a+(a+1)+……(a+i-1)=i*a+(1+2+……+(i-1))=i*a+(i*(i-1)/2)-->a=(n-(i*(i-1)/2))/i 所以我们可以按当前程度i从可能的最大长度k到2(若15=15也算则到1)去试,若能求得首项为整数(可以通过是否能整除判断),则可以表示成i个整数之和。#include"stdio.h"in 阅读全文
posted @ 2012-05-21 00:05 朝圣の路 阅读(131) 评论(0) 推荐(0)
摘要:代码如下:#include"stdio.h"#include"string.h"#include"stdlib.h"int flag[1005];struct node{ int date,score;}x[1005];int cmp(const void *a,const void *b){ node *aa=(node*)a,*bb=(node*)b; if(aa->score!=bb->score) return bb->score-aa->score; else return aa->date-b 阅读全文
posted @ 2012-05-20 20:28 朝圣の路 阅读(216) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1051这题思路跟1257那道差不多。。。半贪心半dp代码如下:#include"stdio.h"#include"stdlib.h"int a[5005][2],w[5005][2];struct node { int x,y;}bar[5005];int cmp(const void *a,const void *b){ node *aa=(node*)a,*bb=(node*)b; if(aa->x!=bb->x) return aa->x-bb- 阅读全文
posted @ 2012-05-20 03:55 朝圣の路 阅读(418) 评论(0) 推荐(0)
摘要:在一堆数里面把这些数分成降序的排列并使所分的组数最少!!代码如下:#include"stdio.h"int min[100000];int main( ){ int n,x,i,j,count; while(~scanf("%d",&n)) { count=1; for(i=1;i<=n;i++) { scanf("%d",&x); for(j=0;j<count;j++)//个人觉得这里是最经典的地方,因为一石二鸟,既找出了离x最近的最小的数又。。。。 if(... 阅读全文
posted @ 2012-05-17 00:27 朝圣の路 阅读(232) 评论(0) 推荐(0)
摘要:#include"stdio.h"#include"string.h"int tab[4][2]={0,1,1,0,0,-1,-1,0};int vis1[205][205],count,vis2[205][205];int n,m;int note[40002][2];char a[205][205];int yi[2],me[2],con[205][205];void bfs(int x1,int y1,int vis[205][205]){ int xx,yy,x,y,i; int q[40005],rear=1,front=0; q[front] 阅读全文
posted @ 2012-05-16 23:08 朝圣の路 阅读(422) 评论(0) 推荐(0)
摘要:唉。。。这两天真是多灾多难啊。。。净碰到蛋疼的题。犯一些蛋疼的错误(这题是在一个判断的地方关系弄错了)。这题的主要原理是多个集合的容斥原理。代码如下:#include"stdio.h"#include"math.h"__int64 prime[10005]={2,3},count=2;__int64 cnt,factor[20];__int64 n,m,ans;void cal(){ int i,j,flag; for(i=5;i<100000;i+=2) { flag=0; for(j=0;j<count;j++) if(i... 阅读全文
posted @ 2012-05-16 14:48 朝圣の路 阅读(353) 评论(0) 推荐(0)
摘要:好题啊。。。乍一看是复杂的排列组合问题,其实是:每个盘子都可以放到三个柱子上的任意一个,所以是3^n.经典!!代码如下:#include"stdio.h"int main( ){ __int64 num[31]={1}; int i,t,n; for(i=1;i<=30;i++) num[i]=num[i-1]*3; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%I64d\n",num[n]); } return 0;} 阅读全文
posted @ 2012-05-14 04:43 朝圣の路 阅读(377) 评论(0) 推荐(1)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1259无语了。。这题刚开始wa了一次,当时把每次变动之后J的位置都默认为2了,太2了。代码如下:#include"stdio.h"int main( ){ int t,m,x,y,p; scanf("%d",&t); while(t--) { scanf("%d",&m); p=2; while(m--) { scanf("%d%d",&x,&y); if(x==p)//刚开始把p写成2... 阅读全文
posted @ 2012-05-14 04:08 朝圣の路 阅读(222) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1982这题真是够纠结的啊,开始是pe但找不出神马原因,后来看了别人的代码,发现我没考虑"-----######---##-#-#"这种情况,导致我的pe,应该输出10个空格才对。代码如下:#include"stdio.h"char word[28]={"0ABCDEFGHIJKLMNOPQRSTUVWXYZ"};char a[10005];void output(){ int i,s=0,state=0; for(i=0;a[i]!='\0& 阅读全文
posted @ 2012-05-14 03:36 朝圣の路 阅读(376) 评论(0) 推荐(0)
摘要:这题要注意一下,字符串最后可能不是5的情况,这里容易遗漏!!!代码如下:#include"stdio.h"#include"string.h"#include"stdlib.h"int num[1000],count;char a[1005];int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;}void convert(char *a){int i,s=0,state=0;for(i=0;a[i]!='\0';i++){if(a[i]!=' 阅读全文
posted @ 2012-05-13 16:31 朝圣の路 阅读(204) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1207这题不知道该说啥,看网上别人都说这题是水题,但是我觉得挺难的啊。思路是这样的,先把j个盘子挪到第四个杆上,然后再把剩下的用按照经典汉诺达的模型移到目标杆上。还有一点是要注意的。。汉诺塔问题中,把盘子移到任意一个杆子上所以得步数是一定的,虽然我还不知道是为什么!如果哪位大神知道的话麻烦您给我留言,谢谢啦!代码如下:#include"stdio.h"int main( ){__int64 num[65]={0,1,3},min;int i,j,n;num[64]=18433;for(i= 阅读全文
posted @ 2012-05-13 15:57 朝圣の路 阅读(628) 评论(2) 推荐(0)
摘要:一旦遇到高次方连乘,一定要记得快速幂啊,太有用了!!! 阅读全文
posted @ 2012-05-12 21:10 朝圣の路 阅读(96) 评论(0) 推荐(0)
摘要:#include"stdio.h"#include"stdlib.h"struct ln{ int j,f; double p;}s[1005];int cmp(const void *a,const void *b){ return (*(ln*)a).p>(*(ln*)b).p?1:-1;}int main( ){ int m,n,i; double sum,sun; while(scanf("%d%d",&m,&n)&&(m!=-1||n!=-1)) { sum=sun=0; for(i=0 阅读全文
posted @ 2012-05-12 20:52 朝圣の路 阅读(381) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1248唉。。。这题,我不会完全背包问题,只能暴力了,还好数据比较弱,果断过了,但是用暴力方法过的感觉很不爽啊。代码如下:#include"stdio.h"int main( ){ int i,j,k,n,a,b,c,t; int max,x,y,z; scanf("%d",&t); while(t--) { scanf("%d",&n); max=0; a=n/150;b=n/200;c=n/350; for(i=0;i<=.. 阅读全文
posted @ 2012-05-10 14:59 朝圣の路 阅读(439) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1222个人觉得是一道挺经典的数论题,想了有一会儿,第一次wa了,一看才发现是求lcm时导致溢出,然后发现其实化简后根本用不到lcm只用到gcd就好。代码如下:#include"stdio.h"int gcd(int m,int n){ int a,b,c; a=m>n?m:n; b=m<n?m:n; c=a%b; while(c!=0) { a=b; b=c; c=a%b; } return b;}int main( )... 阅读全文
posted @ 2012-05-07 21:41 朝圣の路 阅读(195) 评论(0) 推荐(0)
摘要:恩。。。这题感觉挺经典的。。。开始wa了一次。。后来一看discuss,才知道原来i的三次方会溢出。然后改对了,代码如下:#include"stdio.h"__int64 a[100005],i;int main( ){ int n; for(i=1;i<=100000;i++) { if(i%3==0) a[i]=a[i-1]+i*i*i; else a[i]=a[i-1]+i; } while(scanf("%d",&n)&&n>=0) { printf("%I64d\... 阅读全文
posted @ 2012-05-07 19:18 朝圣の路 阅读(315) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1205这题如果想到了其实思路挺简单的,就是找最大的一组,然后往剩下的和里插空儿。#include"stdio.h"int main( ){ int n,i,t,a,max; __int64 sum; scanf("%d",&t); while(t--) { sum=max=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a); s... 阅读全文
posted @ 2012-05-06 21:17 朝圣の路 阅读(224) 评论(0) 推荐(0)
摘要:这道题当时看起来真是挺无语的。。。直到现在也没完全明白。科学家不缔造任何工具,而是揭示天然界中现成的隐躲着的真实,艺术家缔造真实的近似物。要猜到最年夜的数字m,也就是说,在1到m间的每一个数,你都能在n次内把它猜出来!http://hi.baidu.com/xiao%5Fyu%5Ffeng/blog/item/11ab800ed1a7a3236159f334.html幸福存在于一小我真正的工作中。所以说在最坏的情况下,在1到m间,你最多只要猜log2(m)+1(取整)次,所以易知==>m=2^n-1.即猜n次,你能猜到的最年夜的数为2^n-1.我们也可认为,在数1到2^n-1间,我们都可 阅读全文
posted @ 2012-05-06 19:27 朝圣の路 阅读(410) 评论(0) 推荐(0)
摘要:这题忘了当m=-4时最终应该等于0而不是4的情况。。wa了好多次。。。代码如下:#include"stdio.h"char a[15][15];int n,m;void output(){ int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%c",a[i][j]); printf("\n"); }}void output1(){ int i,j; for(i=1;i<=n;i++) { for(j=n;j>=1;j--) ... 阅读全文
posted @ 2012-05-05 23:51 朝圣の路 阅读(137) 评论(0) 推荐(0)
摘要:这是一道递推题,但是递推对我来说还比较困难,所以看了别人的代码之后发现可以用3次多项式来待定系数,挺有效了。代码如下:#include"stdio.h"int main( ){ int n; while(~scanf("%d",&n)) { printf("%d\n",(n*n*n+5*n+6)/6); } return 0;} 阅读全文
posted @ 2012-05-02 15:12 朝圣の路 阅读(284) 评论(0) 推荐(0)