比赛链接:
http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=3475#info
比较没状态,成绩不算好。题目有很水,都是靠脑子的。
某L是一个旅游爱好者,并且伴有轻微强迫症。不管去什么地方旅游,他总是要走遍每一个景点,以求不留遗憾。
前段时间,他又去了一个名叫YNBHX的景区,这个景区非常特别,它一共有N个景点和N-1条小道,每条小道连接这N个景点中的某两个,并保证从景区内每一个景点都能通过若干条小道到达另一个景点。
由于景区人数微多,景区规定,每人每天可以选择任意一个景点出发到达另一个景点,但途中不能走回头路(即每一条小道在同一天之内只能经过一次),现在某L想知道,对于这个神奇的景区,他要想游览完所有的景区至少需要几天?=,=
第一行一个整数N,表示共有N个景点。(N<=1000)
接下来N-1行,每行两个整数A、B,表示景点A和景点B之间有一条小道。
一个整数K,表示某L要想游览完所有景点至少需要K天。
Sample Input1 3 1 2 2 3 Sample Input2 4 1 2 1 3 1 4
Sample Output1 1 Sample Output2 2
#include <cstdio> #include <cstring> int in[2000],out[2000]; int main() { int n; while(~scanf("%d",&n)) { int x,y; memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); for(int i=1;i<n;i++) { scanf("%d%d",&x,&y); in[x]++;in[y]++; } int ans=0; for(int i=0;i<1001;i++) { if(in[i]>2) { ans+=(in[i]-2); } } printf("%d\n",(ans+1)/2+1); } return 0; }
2 200 2 300 400 100 5 50 4 20 40 5
2 1 3 4
#include <cstdio> #include <algorithm> using namespace std; struct Node { int sum; int num; }; Node a[2000]; int comp(Node x,Node y) { if(x.sum!=y.sum) return x.sum>y.sum; } int main() { int n,k,T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { scanf("%d",&a[i].sum); a[i].num=i; } sort(a+1,a+k+1,comp); int ans[2000],cas=0,count=0; for(int i=1;i<=k;i++) { count+=a[i].sum; if(count<n) { ans[cas++]=a[i].num; } //else if(count==n) // break; else{ ans[cas++]=a[i].num;break; } } sort(ans,ans+cas); for(int i=0;i<cas;i++) printf("%d\n",ans[i]); printf("\n"); } return 0; }
大钰儿最近看了一部日剧《Liar Game》,非常喜欢里面的一个游戏,叫少数决游戏。游戏的规则很简单,有N个人进行投票,选项为Yes和No,每个人投且仅投一票。选择了得票数较少的一项的游戏者晋级下一轮,如果Yes和No得票相同,或者大家都投了相同的票,则重新投一次。如此投票直到剩下1个人或者2个人为止。这时,剩下的人就获得了游戏的胜利。
比如,有7个人投票,编号为1到7。其中1,3,6,7选择了Yes,2,4,5选择了No。那么2,4,5便可以进入下一轮(因为No的得票比Yes少,投票给No的人晋级下一轮)。在第二轮中,2投了Yes,4,5投了No,那么2就是最后的胜利者(Yes的得票比No少,只有2号投了Yes)。
假设参加游戏的N个人里面有一个你的小团体,你可以安排他们的投票,并假设其他人都是随机投票的。只要最终剩下的1个或者2个人都属于这个小团体,那么你就获胜了。
现在问题来了,这个小团体至少需要多少人才能保证你的胜利呢?
输入有多组数据(数据不超过10000组),以EOF结尾。
每组数据占一行,只包含一个整数N(1<=N<= 1,000,000,000),代表参加游戏者的数量。
对每组数据,输出一个整数,代表为了保证小团体获胜,至少需要的人数。
3 4 8
2 2 4
比如3个人进行投票,你的小团体有2个人,你让他们一个投Yes,一个投No,那么无论第3个人投什么票都会被淘汰。最终剩下的肯定是小团体中的一员,所以你肯定能获胜。但3个人中小团体只有一个人,显然就不能保证胜利了。所以,如果游戏者总共有3个人的话,小团体至少要2个人才能保证你的胜利。当游戏者有4个人,小团体还是2个人,你还是安排一个人投Yes,一个人投No。由于剩下的两个人是随机投票,总会有一次他们投的是一样的票,那么最后剩下的肯定就是小团体中的一个了。这种情况下,我们认为小团体还是会获得游戏的胜利。
#include <cstdio> int search(int x) { if(x==1) return 1; if(x==2) return 2; if(x%2) return search(x/2)*2; else return search(x/2-1)*2; } int main() { int n; while(~scanf("%d",&n)) { printf("%d\n",search(n)); } return 0; }
第一行为一个整数T(T<=5000)表示数据组数,接下来的T行每行一个整数x(0<x<30000)。
对于每组数据,如果nono会数到睡着则输出"zzz",否则输出一个数表示nono需要数到多少。
2 1 2
1 10
#include <cstdio> int a[100000]; void isit() { int cas=1; int i; for(i=1;i<=100000;i++) { int k=i,sum=0; while(k) { if(k%10==1){ sum++; a[cas++]=i; } k/=10; } a[i]=a[i-1]+sum; } } int main() { isit(); int T; scanf("%d",&T); while(T--) { int n,ans=0,ok=1; scanf("%d",&n); if(a[n]<10000) printf("%d\n",a[n]); else printf("zzz\n"); } return 0; }
........ ...*...* ....*... ....#.#. ....#... .#..*... ...*..#. ....#... ..*..... ...*...* .*..*#.* .*#.*... .*..*... .*..*... ...#..#. ...#..#.
43.00
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char Map1[11][11], Map2[11][11]; int flag[11][11]; void fun1() { memset(flag, 0, sizeof(flag)); for(int i = 1; i <= 8; i++) { for(int j = 1; j <= 8; j++) { if(!flag[i][j]) { char ch = Map1[i][j]; Map1[i][j] = Map1[j][8-i+1]; Map1[j][8-i+1] = ch; flag[i][j] = 1; flag[j][8-i+1] = 1; } } } } void fun2() { memset(flag, 0, sizeof(flag)); for(int i = 1; i <= 8; i++) { for(int j = 1; j <= 8; j++) { if(!flag[i][j]) { char ch = Map2[i][j]; Map2[i][j] = Map2[j][8-i+1]; Map2[j][8-i+1] = ch; flag[i][j] = 1; flag[j][8-i+1] = 1; } } } } int add() { int sum = 0; for(int i = 1; i <= 8; i++) for(int j = 1; j <= 8; j++) { if(Map1[i][j] == Map2[i][j]) { if(Map1[i][j] == ‘.‘) sum += 1; else if(Map1[i][j] == ‘*‘) sum += 2; else if(Map1[i][j] == ‘#‘) sum += 3; } } return sum; } int main() { int i, j; for(i = 1; i <= 8; i++) for(j = 1; j <= 8; j++) cin >> Map1[i][j]; for(i = 1; i <= 8; i++) for(j = 1; j <= 8; j++) cin >> Map2[i][j]; int ans = 0; for(i = 0; i < 4; i++) { fun1(); for(j = 0; j < 4; j++) { fun2(); ans += add(); } } printf("%.2lf\n",ans*1.0/16); return 0; }
原文:http://blog.csdn.net/y990041769/article/details/20794329