1111我和程序有个约会
Posted BobHuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1111我和程序有个约会相关的知识,希望对你有一定的参考价值。
5604: Kannyi打印模板
总提交: 143 测试通过:35
描述
Kannyi要去沈阳参加比赛,赛前要用5106的打印机打一份模板以便赛场上使用。
奈何机房打印机出了点问题,双面打印总是不能很好完成,打印机会打印出偶数面,但是中间会夹杂白纸类似的情况,按理说他只要把它再放进去就好了,但是现在他要手动打印避免错误。他选择分段进行打印,BobHuang说那让我用代码给你生成吧。请你写一份和BobHuang一样的代码。
比如这个份模板5页,偶数页已经打印并整理好了,他需要把这三页一起打印,输出1,3,5就好了。
输入
输入数据包含多个测试实例,每个测试实例占一行,为这份模板的页数n和分成的段k。
多组数据以n=0,k=0结束。
输出
每个样例输出第一行为Case x:
然后输出为k行,第i行为第i段当要打印的页数,相邻两页用","隔开。
样例输入
5 1
6 2
20 3
0 0
样例输出
Case 1:
1,3,5
Case 2:
1,3
5
Case 3:
1,3,5,7
9,11,13,15
17,19
这个其实就是循环模拟题,模拟出来一行需要打印的就好。
这里数据出了锅,卡了chengyu的做法,不好意思啊。
#include<stdio.h> int main() { int n,k,ca=0; while(scanf("%d%d",&n,&k),n||k) { int s=((n+1)/2+k-1)/k,f=0,i; printf("Case %d: ",++ca); for(i=1; i<=n; i+=2) { if(f!=s-1&&i!=n&&i!=n-1)printf("%d,",i),f++;//不是最后一个数or不到换行 else printf("%d ",i),f=0; } } return 0; }
这里还有一份验题组的代码
#include<stdio.h> int main() { int n,k,i,m=1,r,t,j; while(scanf("%d %d",&n,&k),n||k) { printf("Case %d: ",m++); if(n%2==0) { r=n/2; n--; } else r=n/2+1; if(r%k==0) r=r/k; else r=r/k+1; j=0; for(i=1; i<=n; i+=2) { if(!j) printf("%d",i); else printf(",%d",i); j++; if(j==r) { printf(" "); j=0; } } if(j) printf(" "); } return 0; }
5605: 祝crq生日快乐
Total Submit: 184 Accepted:164
Description
2008-2018 TOJ已经走过了10年,这10年的故事有些我们不能知道,有些在2018年校赛的演讲稿可以看到当你有改变世界能力时,请做一个良...
不管你做不做ACM,每个计算机系同学都面临着一个问题,就是进行程序设计,从C语言到C++,再到C#、Java,再到汇编、php,你离不开的就是编程。crq对于程序设计的热爱,我认为是高过每一个人的。你对他反映TOJ的不仅限于题目问题,往往都会第一时间解答。C语言的入门也是一个十分头疼的问题,但是crq会带着大家一同走过那段艰难的行程。每年开学初他都会投入大量的经历到C语言的入门中去,很多同学都是他投入时间的受益者。甚至你可以和他聊些自己的私事,他也会帮你排忧解难满,着实一个热心肠。我相信除了我,不少同学也受益过,但是毫无疑问我们剥夺了他休息的时间,即使他帮助别人也获得了快乐。
在参加算法竞赛的时间里,我意识到了自己投入时间去学习才是最重要的,自己要踏踏实实的,一步一个脚印,往往才是学习最行之有效的方法。所以在这个投入和产出不一定成正比的竞赛中,兴趣是重要的。你可以很菜,但是你需要保持一颗永远向上的心。crq在这个竞赛中也投入了很多时间和精力,很多出色的毕业生都是玩这个的,和他悉心浇灌ACM这块土地是分不开的。
我们不需要歌功颂德,对于这些老师们来讲,他们最大的幸福就是看着我们在所学专业有所收获。以上也纯粹为学长的叨叨,也希望各位老师可以天天开心,各位同学可以快乐地度过自己的大学生活。
11月11日不仅是购物狂欢节,也是crq的生日,请为他送上生日祝福。
Input
本题没有输入。
Output
请输出"Happy Birthday!"(不包含引号)。
Sample Input
Sample Output
Happy Birthday!
真的是纯粹学长想说的话,输出就行啦,一起祝老师生日快乐
#include<stdio.h> int main() { printf("Happy Birthday!"); return 0; }
5606: taozi的小难题
Total Submit: 164 Accepted:18
Description
从前有一个抠门的国王taozi,一天他的领土受到了其它国家的侵略,于是taozi决定组建一个骑士团击退敌人。当然招募骑士也是需要花费金币的,这里就以骑士的攻击力来给金币,抠门的taozi看到了这么多骑士前来,很头痛,于是taozi找到了聪明的你,让你去帮他解决这个问题。
Input
输入多组数据,对于每组数据,第一行输入一个n,m,分别代表n个敌人和m个骑士,接下来n个数代表敌人的攻击力a,然后m个数代表雇佣骑士的攻击力b,多组数据以n=0,m=0结束。
数据规定
1≤n,m≤10000
1≤a,b≤100
Output
对于每组数据,输出国王最少需要花费多少金币雇佣骑士才能杀死所有敌人,如果不行输出-1。
Sample Input
2 3
5 4
7 8 4
2 1
5 5
10
0 0
Sample Output
11
-1
Hint
第一组数据,taozi选择第3号骑士打败2号敌人,选择第1号骑士打败1号敌人,总共花费11元。
第二组数据,taozi无论怎么选都打不过敌人。
这个题目本来是sort,但是
#include<stdio.h> int main() { int i,j,k,n,m,x; while(scanf("%d%d",&n,&m)!=EOF,n||m) { int a[105]={0},b[105]={0}; for(i=0;i<n;i++) { scanf("%d",&x); a[x]++; } for(i=0;i<m;i++) { scanf("%d",&x); b[x]++; } int sum=0,f=1; for(i=1;i<=100;i++) { for(j=1;j<=a[i];j++) { f=0; for(k=i;k<=100;k++) { if(b[k]>0) { b[k]--; sum+=k; f=1; break; } } if(f==0)break; } if(f==0)break; } if(f==0)printf("-1 "); else printf("%d ",sum); } return 0; }
5607: taozi的签到题
Total Submit: 637 Accepted:75
Description
题目很简单,就是求1到n中能被2或3或6或8整除的数有几个。
Input
多组输入,每行输入一个正整数n(n<=1000000),以n为0结束(组数在10000左右)。
Output
输出1到n中能被2或3或6或8整除的数的个数。
Sample Input
10
0
Sample Output
7
查询比较多,所以大家疯狂wa
我们可以理智分析下,是8的倍数一定是2的倍数,6的倍数一定是2和3的倍数
所以所求就是2的倍数个数-3的倍数个数+6的倍数个数
#include<stdio.h> int main() { int n; while(scanf("%d",&n),n)printf("%d ",n/2+n/3-n/6); return 0; }
或者预处理,预处理就是提前处理出答案,下一次还在上一次的基础上进行判断
#include <stdio.h> #define N 1000005 int a[N]; int main() { int n,i; for(i=1;i<N;i++) { a[i]=a[i-1]; if(i%2==0||i%3==0||i%6==0||i%8==0) a[i]++; } while(scanf("%d",&n),n)printf("%d ",a[n]); return 0; }
5608: 单身狗沙漠逃生
Total Submit: 20 Accepted:5
Description
1111是个有趣的节日,某单身狗没钱可花,没事可做。
沙漠里有一条很长的公路,单身狗想沿着公路进沙漠去探险。每走x公里路后,单身狗就要消耗x份食物(x为大于0的分数)。单身狗共准备了n份食物,但他身上最多背负m份食物(n%m为0,而且n/m<11)。如果食物可以在路边存放,为保证能原路返回出发点,单身狗最远能进入沙漠多少公里?
Input
输入数据包含多个测试实例,每个测试实例占一行,为这份食物份数n和最多背负的食物数m。(n<1111)
多组数据以n=0,m=0结束。
Output
每组数据输出一行,代表单身最多进入沙漠的总公里数,为一最简分数,即分子和分母互质。
Sample Input
600 120
1 1
0 0
Sample Output
137/1
1/2
Hint
这是一个极端构造的问题,我们可以尝试去构造极端条件并求解。
由于单身狗每次只能背负120份食物,故他要从出发点出发5次。
每次出发走一段距离后,就将食物放在路边做补充,然后返回出发点背负食物。
但是这个距离要走几次是固定的,比如第一段路就要走10 次,第二段路要走8次,第三段路要走6次,第四段路要走4次,第五次路要走2次。但是每段路的消耗的食物数和是固定的,均为120份。
所以距离为120/10+120/8+120/6+120/4+120/2=137。
所以题目变为了分数加法(雾)?好人做到底,偷偷告诉你,1~10的最小公倍数为2520。
这个题目害怕大家想不到做法,所以提示里题解了一波。
其实就是第一段路要走2*(n/k)次,消耗k份食物...最后一段路走2次,消耗k份食物。
合并同类项借助2050的做法
#include<stdio.h> int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main() { int n,k; while(scanf("%d%d",&n,&k),n||k) { int a=0,b=2*2520,i; for(i=1;i<=n/k;i++)a+=k*2520/i; int t=gcd(a,b); printf("%d/%d ",a/t,b/t); } }
分数加法的做法
#include<stdio.h> int a,b; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int d() { int t=gcd(a,b); a/=t,b/=t; } int main() { int n,m,i; while(~scanf("%d%d",&n,&m),n,m) { a=m,b=2; for(i=2; i<=n/m; ++i)a=2*a*i+m*b,b*=2*i,d(); printf("%d/%d ",a,b); } }
以上是关于1111我和程序有个约会的主要内容,如果未能解决你的问题,请参考以下文章