2009 CSW Contest of JLU 解题报告(新生可看)

 马上就是2010级新生赛了,为了让帮助新生熟悉比赛,再次写出去年新生赛的题目题解,代码有些是我所写,也有孔牛的代码,可能有纰漏,请阅者见谅。

 

 

2600: 打印田字格

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 1640 281 Standard

淘气小孩abc上课总是走神,今天又是如此,老师决定好好惩罚他一下,决定罚他写田字格(囧)。可是abc的作业本都被他折成各种各样的纸飞机了飞的无影无踪了,他已经没有作业本了。所以他哭着闹着找了你去帮他。 你的任务很简单。根据给出的宽度。生成田字格。田字格有*和空格组成。 其中田字格的宽度n已经给出。

Input

输入由多组测试数据组成。每组测试数据一行。一个整数n。

Output

对于每组测试数据。首先输出一行。Case号。以下输出一个田字格。在每组测试数据后输出一个空行。

Sample Input

1
2

Sample Output

Case 1:
*****
* * *
*****
* * *
*****

Case 2:
*******
*  *  *
*  *  *
*******
*  *  *
*  *  *
*******

 

Problem Source: zzc

 

This problem is used for contest: 140  141 

Submit / Problem List / Status / Discuss


#include<stdio.h> int main() { int n,i,j; int num=0; int s; while(scanf("%d",&n)!= EOF) { num++; s=3+2*n; printf("Case %d:/n",num); for(i=1;i<=s;i++) printf("*"); printf("/n"); for(i=1;i<=n;i++) {printf("*"); for(j=1;j<=n;j++) printf(" "); printf("*"); for(j=1;j<=n;j++) printf(" "); printf("*"); printf("/n"); } for(i=1;i<=s;i++) printf("*"); printf("/n"); for(i=1;i<=n;i++) {printf("*"); for(j=1;j<=n;j++) printf(" "); printf("*"); for(j=1;j<=n;j++) printf(" "); printf("*"); printf("/n"); } for(i=1;i<=s;i++) printf("*"); printf("/n"); printf("/n"); } return 0; }

 

 

 

2601: ICPC排行榜

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 89 13 Standard

Final终于要在哈尔滨举行了。在比赛进行了4个小时的时候会封榜。你就看不到排名了。abc非常想提前知道最终的排名。所以他弄到了队伍列表和提交记录。你的任务很简单。根据队伍列表和提交记录生成最终的排行榜。所有提交记录以时间序给出。注意:队伍列表中有些队伍的末尾带一个*,这些队伍是不参与排名的。但是你要把他们放在排行榜中正确的位置上。*不是队伍名的一部分。为了简化,队伍名都是符合C标识符规则的字符串。题目是从A开始编号的。返回状态为Yes的题目为通过。否则未通过。排名以ICPC标准,先以题数排序,然后以时间排序。弱相同,维持原顺序。排名相同。

Input

本题包含多组测试数据。你需要处理到结尾。每组测试数据包括:的一行n,m,t。表示队伍的数量、提交记录的数量和题目的数量。一下n行。每行一个字符串,包含可选的*表示一支队伍。以下m行。每行表示一个提交记录。包括队伍名,提交的时间,提交的题目,返回状态。

Output

对于每组数据。首先输出一行Case号。之后输出排行榜。的一行排行榜头。Rank(4列)空一列 Teamname(20列左对齐)空一列还有题目号每个占7列。居中。solv/att通过的题目数和总的提交次数。注意一道题目通过之后再提交不计入总的提交次数里。 以下下n列每列表示一个学校的状态。排序输出。即先输出第一名。。然后第二名。排名按照ICPC标准。即先以题数排序。然后以时间排序。时间为每道题的时间总和(第一次通过的时间+之前错误的次数*20)正确处理*的队伍。你的输出需要与排行榜头对齐。参见样例。在每组数据后输出一个空行。

Sample Input

4 6 5
hunters*
hah
acac
dust
hunters 4 A Yes
hunters 8 B Yes
hah 9 C Yes
acac 9 C Yes
hunters 90 C CE
hunters 90 E TLE

Sample Output

Case 1:
Rank Team                 Solved Time    A       B       C       D       E    att/sol
---- hunters*             2      12     1/4     1/8     1/---   0/---   1/---   4/2  
1    hah                  1      9      0/---   0/---   1/9     0/---   0/---   1/1  
1    acac                 1      9      0/---   0/---   1/9     0/---   0/---   1/1  
3    dust                 0      0      0/---   0/---   0/---   0/---   0/---   0/0  

 

Problem Source: zzc

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

 

 

#include <iostream> #include <string> using namespace std; struct team{ string name; int id; int sub[20],tim[20],ok[20]; int totok,tottim,totsub; }te[1001]; int n; void clear(team* k){ memset(k->sub,0,sizeof(k->sub)); memset(k->ok,0,sizeof(k->ok)); memset(k->tim,0,sizeof(k->tim)); k->totok=k->tottim=k->totsub=0; } int getid(string s){ int i,j; for(i=0;i<n;i++){ if(te[i].name.size()<s.size())continue; if(te[i].name.size()==s.size()){ for(j=0;j<s.size();j++){ if(te[i].name[j]!=s[j])break; } if(j==s.size())return i; } if(te[i].name.size()==s.size()+1&&te[i].name[te[i].name.size()-1]=='*'){ for(j=0;j<s.size();j++){ if(te[i].name[j]!=s[j])break; } if(j==s.size())return i; } } } bool cmp(team a,team b){ if(a.totok!=b.totok)return a.totok>b.totok; if(a.tottim!=b.tottim)return a.tottim<b.tottim; return a.id<b.id; } int main(){ //freopen("in.txt","r",stdin); //freopen("o.txt","w",stdout); int m,p,i,ca=1,ppi; while(cin>>n>>m>>p){ for(i=0;i<n;i++){ clear(&te[i]); te[i].id=i; } for(i=0;i<n;i++){ cin>>te[i].name; } string s,sta; char ph; int ti,id,pro; for(i=0;i<m;i++){ cin>>s>>ti>>ph>>sta; if(i!=0&&ti<ppi)while(1); ppi=ti; id=getid(s); pro=ph-'A'; if(te[id].ok[pro]==1)continue; else { if(sta=="Yes"){ te[id].tim[pro]=ti; te[id].ok[pro]=1; te[id].sub[pro]++; te[id].totok++; //te[id].totsub+=te[id].sub[pro]; te[id].tottim+=(te[id].sub[pro]-1)*20+ti; te[id].totsub++; } else { te[id].sub[pro]++; te[id].totsub++; } } } sort(te,te+n,cmp); printf("Case %d:/n",ca++); printf("Rank Team Solved Time "); for(i=0;i<p;i++){ printf(" "); printf("%c",'A'+i); printf(" "); } printf("att/sol/n"); // while(1); int pre,sum,prek,j; sum=0; pre=-1; for(i=0;i<n;i++){ if(te[i].name[te[i].name.size()-1]=='*'){ printf("---- "); } else { if(pre==-1){ printf("%-5d",1); pre=i; prek=1; sum++; } else { if(te[i].totok==te[pre].totok&&te[i].tottim==te[pre].tottim){ printf("%-5d",prek); } else { printf("%-5d",sum+1); pre=i; prek=sum+1; } sum++; } } cout<<te[i].name; for(j=0;j<21-te[i].name.size();j++)putchar(' '); //printf("%-21s",te[i].name); printf("%-7d",te[i].totok); printf("%-5d",te[i].tottim); for(j=0;j<p;j++){ if(te[i].ok[j]==1){ printf("%3d",te[i].sub[j]); printf("/"); printf("%-4d",te[i].tim[j]); } else { printf("%3d",te[i].sub[j]); printf("/"); printf("--- "); } } printf("%3d",te[i].totsub); printf("/"); printf("%-3d",te[i].totok); cout<<endl; } cout<<endl; } }

 

 

2602: 斐波那契数列

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 899 214 Standard

abc的数学老师刚教了他们斐波那契数列。斐波那契数列数列的每一项是前两项的和。斐波那契数列的相邻两项之比趋近黄金分割虑。现在abc正在研究斐波那契数列的令一项性质。就是斐波那契数列的前n项和Sn。(斐波那契数列的前两项 fib[1]=1,fib[2]=1) abc需要知道一个整数sum大概是斐波那契数列的前多少项和。但是一个一个的算太麻烦了。不擅长变成的abc找到了你。记斐波那契数列的前n项和为Sn。给出一个整数Sum。求n使得S(n) <= Sum < S(n + 1) Sum在int范围内。

Input

本题有多组输入数据组成。每组数据为一个整数sum占一行。

Output

对于每组数据。首先输出一行Case号。下一行输出一个整数n。在每组数据之后输出一个空行。

Sample Input

3

Sample Output

Case 1:
2

 

Problem Source: zzc

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

 

#include<stdio.h> int main() { int n; int sum,a,b,i,num,t; num=0; while (scanf("%d",&n)!= EOF) { num++; sum=2; a=1;b=1; i=1; while(sum<=n) { t=a+b; a=b; b=t; sum+=b; i++; } printf("Case %d:/n",num); printf("%d/n",i); printf("/n"); } return 0; }

 

 

2603: 2012世界末日

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
10s 65536K 224 84 Standard

     种种迹象表明,公元2012年为世界末日,而科学家们进一步预测,人类将被一种神秘的时空机器送到另一个宇宙,所以不要害怕,我们只是搬了个新家而已~

     每一次改变都是一种进步,这个新的世界并不像我们的地球,不再有南方北方(不倒翁已为此头疼很久),不再有贫富贵贱,人们也不会再因为自己的长像头疼,因为同性别的人都变成了一个模样。当然,最大的不同是,人们发现这个世上的人并不只有男和女两种性别,性别种数变得不确定(想必找工作不会再有性别歧视了,大男子小女子的说法也将不复存在),还好人们保持了同性互斥,异性相吸的特性,只有不同性别的人才愿意走在一起。

     十年后的一天,jlu的Boss:Dr.Lee想请ACM校队的成员一起吃个饭,注意这些成员的性别可能都已变化。可以肯定的是,校队的人数不会超过12,性别数不会超过10。Dr.Lee家里有一张长长的沙发,洽好能坐下所有学生(Dr.Lee一直在忙着做饭),JLU_ACMes都还正常,当然都希望坐在自己身边的人与自己不同性别。Dr.Lee是个数学爱好者,他很想知道一共有多少种坐法能够让自己的学生们都满意?但他意识到可能的种数会很多,想求助2009级的ACMer们~

     现在已知这次参加聚餐的ACMers共有n种性别,每种性别的人数也已知,你的任务是,输出共有多少种入坐方案,使得相邻的ACMers异性。

     例如: 3种性别时,有1个人性别是1,两个人性别是2,三个人性别是3,则共有以下10种方案:

1 3 2 3 2 3
2 3 1 3 2 3
2 3 2 3 1 3
3 1 2 3 2 3
3 1 3 2 3 2
3 2 1 3 2 3
3 2 3 1 2 3
3 2 3 1 3 2
3 2 3 2 1 3
3 2 3 2 3 1

 

Input

     每行第一个数是ACMers的性别种数n(n<=10),接着的n个数分别表示各种性别ACMer的人数(总人数不超过12)。

Output

     满足题设要求的方案数。

Sample Input

3 1 2 3

Sample Output

10

 

Problem Source: SongLijun

 

This problem is used for contest: 140  150 

Submit / Problem List / Status / Discuss

#include<stdio.h> int sum,n,m; int a[20],f[20]; void dfs(int depth) { int i; if(depth==sum) { m++; return; } for(i=0;i<n;i++) if(i+1!=f[depth-1]&&a[i]>0) { f[depth]=i+1; a[i]--; dfs(depth+1); a[i]++; } } int main() { int i; while(scanf("%d",&n)!=EOF) { sum=0; m=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } dfs(0); printf("%d/n",m); } return 0; }

 

 

2604: clever ACMer

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 329 177 Standard

近日Peter得了种怪病,一看课本就犯困,持续了一段时间后他的成绩直线下滑。Peter非常着急,于是去天机宫找神医homeboy,但是homeboy只给聪明人看病,只有通过考核才有资格被他医治。于是他给Peter出了一道题:给定两种操作+1 或 ×2 ,从1变到n所需要的最少操作数是多少? 作为一名ACMer,Peter没几分钟就做出了这道题,homeboy非常欣赏他,用其祖传的玄幻神针治好了Peter。自此,Peter又变回了以前那个好学的少年。 计算机前的你能做出来吗?

Input

输入一个整数n,n<=2^32-1,当n=0时,退出。

Output

输出从1变到n所需要的最少操作数。

Sample Input

1
2
3
15
176
0

Sample Output

0
1
2
6
9

 

Problem Source: hujiafeng

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss


#include<stdio.h> int main() { unsigned int n; int num; while((scanf("%d",&n),n)!=0) { num=0; while (n>=3) { if (n % 2==0) {n=n/2; num++;} if (n%2 !=0 ) {n=n-1;num++;} } if (n==3) num+=2; if (n==2) num+=1; printf("%u/n",num); } return 0; }

 

2605: 字符串的值

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 647 190 Standard

ww是一个聪明的gg,可是他不喜欢英语却喜欢研究算法。他总说我是一个爱国的人所以不学英语,但是程序设计确实十分的有趣,他认为英文单词和一个字符串没有什么区别。 所以他根本不可能分辨一个句子。可是英语考试又是一个事实,所以他绞尽脑汁想出了一个方法去判断两个句子是否相同。 每个字符都有一个值。A-Z分别为1-26,不计大小写。其他字符为0。一个字符串的值就是一个字符串中所有字符的值的和。 当然,在abc眼中一个句子就是一个字符串。 他分辨两个句子的方法就是看两字符串(句子)的值是否相同。 你的任务不是分辨两个句子,而是求一个句子(字符串)的值。 句子中可能包含空格和标点。

Input

输入有多组测试数据组成。每个测试数据占一行。一个字符串。你需要处理到输入结束。

Output

对于每组测试数据。首先输出一行。Case号。之后一行输出一个整数,该字符串的值。在每组数据后输出一个空行。

Sample Input

abc
a *

Sample Output

Case 1:
6

Case 2:
1

 

Problem Source: zzc

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

#include<stdio.h> char l(char c) { if ( c>='A' && c<= 'Z') return c+'a'-'A'; else return c; } int main () { int num,sum,i; char s[1000]; num=0; while (gets(s) != 0) { num++; sum=0; i=0; while(s[i]!= '/0') { if ( l(s[i])>='a' && l(s[i])<='z') { sum+=l(s[i])-'a'+1; } i++; } printf("Case %d:/n",num); printf("%d/n",sum); printf("/n"); } return 0; }

 

 

2606: 星空

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 219 21 Standard

sky是一个喜欢浪漫的人,对浩淼的星空总是有无穷的幻想,每天晚上他都会在独院里听着music,欣赏着银河的璀璨,可是随着时间的的延续,他发现天空中的每颗星的亮度竟都是不同的。而且每一秒都在不停的闪烁,亮度总是不同,真是神奇的自然,他看到天上的n颗星辰,他记得爷爷曾经告诉他星星在第s初时的亮度分别为l[1][0]~l[n][0],每一秒,在同一时刻的同一瞬间,第n颗星的亮度增加m,第n-1颗星的亮度增加这个时候的第n颗星的亮度,第i颗星的亮度增加这个时候第i+1颗星的亮度,sky不禁感慨这世界的奇妙,这些所有的变化竟都恰恰集中在1s内完成,sky真想预言出ts末在璀璨的星空中,各颗星究竟是怎样的亮度

Input

输入由多组数据组成。每组数据包括:三个整数n, m, t (0 < n <= 50, 0 < t <= 10^9) n个整数l[1][0]~l[n][0]

Output

对于每组数据的一行输出Case号。之后输出n行,每行一个整数表示每颗星的亮度 模 2345的值每组数据之后输出一个空行。

Sample Input

3 1 3
1 2 3

Sample Output

Case 1:
35
17
6

 

Problem Source: zzc

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=101; const int mod = 2345; class Matrix { int n,m;//矩阵的row and colum int num[maxn][maxn];//从1开始 public: Matrix(){memset(num,0,sizeof(num));} Matrix(const Matrix &a) {n=a.n;m=a.m; memcpy(num,a.num,sizeof(a.num));} Matrix(int x,int y):n(x),m(y){} Matrix & operator =(const Matrix & a); friend Matrix operator + (const Matrix &a,const Matrix &b); friend Matrix operator - (const Matrix &a,const Matrix &b); friend Matrix operator * (const Matrix &a,const Matrix &b); friend Matrix operator % (const Matrix &a,int n); friend ostream & operator <<(ostream & cout,const Matrix & a); friend istream & operator >>(istream & cin,Matrix & a); void Modefy_n_m(int x,int y,int v); void out();//只在此题中有用,其他题目可删去 }; Matrix & Matrix:: operator =(const Matrix &a) { for(int i=1;i<=a.n;i++) for(int j=1;j<=a.m;j++) num[i][j]=a.num[i][j]; } istream & operator >>(istream & cin,Matrix & a) { for(int i=1;i<=a.n;i++) { for(int j=1;j<=a.m;j++) { cin>>a.num[i][j]; } } return cin; } ostream & operator <<(ostream & cout,const Matrix & a) { for(int i=1;i<=a.n;i++) { for(int j=1;j<=a.m;j++) { cout<<a.num[i][j]<<" "; } cout<<endl; } return cout; } Matrix operator % (const Matrix &a,int n) { Matrix t(a.n,a.m); for(int i=1;i<=a.n;i++) { for(int j=1;j<=a.m;j++) { t.num[i][j]=a.num[i][j]%n; } } return t; } Matrix operator * (const Matrix &a,const Matrix &b) { Matrix t(a.n,b.m); for(int i=1;i<=a.n;i++) { for(int j=1;j<=b.m;j++) { int cnt=0; for(int k=1;k<=a.m;k++) { cnt+=a.num[i][k]*b.num[k][j]; cnt%=mod;//这是此题需要,别的题目可删去 } t.num[i][j]=cnt; } } return t; } Matrix operator + (const Matrix &a,const Matrix &b) { Matrix t(a.n,a.m); for(int i=1;i<=a.n;i++) for(int j=1;j<=a.m;j++) t.num[i][j]=a.num[i][j]+b.num[i][j]; return t; } Matrix operator - (const Matrix &a,const Matrix &b) { Matrix t(a.n,a.m); for(int i=1;i<=a.n;i++) for(int j=1;j<=a.m;j++) t.num[i][j]=a.num[i][j]-b.num[i][j]; return t; } void Matrix:: Modefy_n_m(int x,int y,int v) { num[x][y]=v; } void mul(Matrix &a,int t,Matrix temp) { if(t==1) return ; if(t==2) { a=a*a; return ; } mul(a,t/2,temp); a=a*a; if(t&1) a=a*temp; } void Matrix::out() { for(int i=1;i<m;i++) printf("%d/n",num[1][i]); printf("/n"); } int main() { int n,m,t; int pl=1; while(scanf("%d%d%d",&n,&m,&t)==3) { Matrix tt(1,n); cin>>tt; Matrix a(1,n+1);a=tt;a.Modefy_n_m(1,n+1,m); Matrix temp(n+1,n+1); for(int i=1;i<=n+1;i++) for(int j=1;j<=i;j++) temp.Modefy_n_m(i,j,1); Matrix tmp(temp); mul(temp,t,tmp); a=a*temp; printf("Case %d:/n",pl++); a.out(); } return 0; }

 

 

 

2607: Last time see you again

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
3s 131072K 80 8 Standard

大学的时光是值得怀念的,有多少事情珍藏在我们的记忆里,又有多少人我们一辈子都忘不掉。 123abc是一个不起眼的小男孩,他曾经在很多方面努力过,也经历了很多失败,在这些努力和失败中,他收获了自己的人生。 whx是123abc认识的一个女生,123abc很喜欢她,总是用各种方法想见到她,可是whx生气了, 她不想见到123abc,这令123abc很伤心。 whx明天就要离开吉林大学了,123abc想看她最后一眼,虽然whx不想看到不起眼的123abc,但是123abc只想看她最后一眼,内心默默祝福她。根据可靠线报,whx将从地点1出发,最后到达地点n (2<=n<=10000),然后离开长春,这是最后一次机会,123abc不想错过这次机会,于是他也得到了长春市的所有地形。每个地点被标号为1—n,其中1表示吉林大学,n表示火车站,其他表示长春市的其他地点,若两个地点有公交车或者轻轨直达,则之间有一条路(这是一个无向图,注意啊)。边数为m(0<=m<=400000). 123abc现在想知道,除了吉林大学和火车站,还有多少地方一定可以等到whx(因为地点1和n太明显了,whx会更生气的,还是邂逅比较好)。

Input

每组测试数据第一行n和m,接下来的m行每行两个数x,y(1<=x<=n,1<=y<=n),表示地点x和地点y是可以相互到达的。每组测试数据以空行结束。

Output

分为三种情况; 1.从1到n没有路,则输出Information Error! 2.从1到n的路都经过的点数(除了1和n)为0,输出Poor 123abc! 3.否则输出这样地点的个数

Sample Input

2 1
1 2

3 0

8 6
1 2
1 3
2 3
3 8
8 5
8 6

Sample Output

Poor 123abc!
Information Error!
1

 

Problem Source: 123abc

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

 

#include<cstdio> #include<cstring> const int V=10010; const int E=800010; int deep[V],ans[V]; //深度和访问的最小主先 int head[V],e; int n,m,cnt,sum; struct EDGE { int v,next; } edge[E]; inline int min(int x,int y) { return x<y?x:y; } void addedge(int u,int v) { edge[e].v=v; edge[e].next=head[u]; head[u]=e++; } void dfs(int u,int fa) { int sons=0, tofather=0; deep[u]=ans[u]=cnt++; for(int p=head[u]; p!=-1; p=edge[p].next) { sons++; int v=edge[p].v; if(v==u) continue; int tag=deep[n]; if (deep[v]==-1) { dfs(v,u); ans[u]=min(ans[u], ans[v]); if ((fa==-1 && sons>1) || (fa!=-1 && ans[v] >= deep[u])) { if (u != 1 && u != n && tag == -1 && deep[n] != -1) { sum++; } } } else if (v != fa || tofather) ans[u] = min(ans[u], deep[v]); if (v==fa) tofather=1; } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { e=0; cnt=0; memset(head,-1,sizeof(head)); memset(deep,-1,sizeof(deep)); memset(ans,-1,sizeof(ans)); for(int i=1; i<=m; i++) { int x,y; scanf("%d%d",&x,&y); addedge(x,y); addedge(y,x); } sum=0; dfs(1,-1); if (deep[n]==-1) { printf("Information Error!/n"); continue; } if (sum==0) printf("Poor 123abc!/n"); else printf("%d/n",sum); } return 0; }

 

 

2608: 石子

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 131072K 480 120 Standard

Xiao Tang和Xiao Jiang非常喜欢玩一种有趣的小游戏: 有N个石子,两人轮流从中取出1个, 3个或4个石子,当石子被取空时,游戏结束。最后一个取石子的人获胜, 第一次总是Xiao Tang取. 当然,他们俩都足够聪明,总会采取最优的策略。

Input

每行会有一个正整数N(N<=100000), 代表石子的个数, N=0 代表输入结束

Output

输出获胜人的名字。

Sample Input

1
2
0

Sample Output

Xiao Tang
Xiao Jiang

 

Problem Source: homeboy

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

 

#include<stdio.h> int main() { int num;int max; int n; num=0; max=0; int b[100000]; while((scanf("%d",&n),n)!=0) { b[1]=1;b[2]=0;b[3]=1;b[4]=1;b[5]=1;b[6]=1; if (n>6) { if ((n-6) % 7==1 || (n-6)% 7==3) printf("Xiao Jiang/n"); else printf("Xiao Tang/n"); } else { if (b[n]==0) printf("Xiao Jiang/n"); else printf("Xiao Tang/n"); } } return 0; }

 

 

2609: sequence

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
4s 65536K 112 21 Standard

有一个数列a[1], a[2], ..., a[n] (n>=3) 。每次可以从中任意挑出三个相邻的数 a[i-1], a[i], a[i+1] (i>=2), 进行如下操作: (a[i-1], a[i], a[i+1]) --> (a[i-1]+a[i], -a[i], a[i]+a[i+1]) 给定初始序列和目标序列,是否能够通过以上操作,将初始序列转化为目标序列?

Input

每个case的第一行有一个整数N(3<=N<=1000), 代表序列中数的个数第二行有N个整数代表初始序列第三行有N个整数代表目标序列 N=0代表输入的结束

Output

若能转换输出Yes, 否则输出No

Sample Input

3
0 0 0
1 1 1

6
1 6 9 4 2 0
7 -6 19 2 -6 6

0

Sample Output

No
Yes

 

Problem Source: homeboy

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss

#include<stdio.h> #include<algorithm> using namespace std; int main() { int i,n; int a[1000],b[1000]; while((scanf("%d",&n),n)!=0) { for(i=0;i<n;i++) { scanf("%d",&a[i]); if(i!=0) a[i]+=a[i-1]; } for(i=0;i<n;i++) { scanf("%d",&b[i]); if(i!=0) b[i]+=b[i-1]; } sort(a,a+n); sort(b,b+n); for(i=0;i<n;i++) { if(a[i]!=b[i]) break; } if(i==n) printf("Yes/n"); else printf("No/n"); } return 0; }

 

 

2610: grid

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
1s 65536K 155 52 Standard

百无聊赖寒假日,TY在家实在太无聊了, =___________=b, 他用一些1*1*1的小正方体积木堆出了一个a*b*c的长方体(a, b, c分别是长,宽,高) 为了不让TY太过无聊,JJX给他出了个有意思的题目: 这个长方体的"体对角线"——坐标化后从点(0, 0, 0)到点(a, b, c)的线段, 一共能穿过多少个小正方体?

Input

每行三个正整数a, b, c,代表长方体的长, 宽, 高。a, b, c均为 0 时代表输入结束

Output

穿过的小正方体的个数

Sample Input

1 1 1
2 3 4
0 0 0

Sample Output

1
6

 

Problem Source: homeboy

 

This problem is used for contest: 140 

Submit / Problem List / Status / Discuss


#include<stdio.h> int gcd(int a,int b) { if(a<b) return gcd(b,a); if(b==0) return a; else return gcd(b,a%b); } int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); while(a!=0&&b!=0&&c!=0) { int t; t=a+b+c-gcd(a,b)-gcd(a,c)-gcd(b,c)+gcd(gcd(a,b),c); printf("%d/n",t); scanf("%d%d%d",&a,&b,&c); } return 0; }

你可能感兴趣的:(list,测试,ini,input,Matrix,output)