1111我和程序有個約會
5604: Kannyi打印模板
時間限制(普通/Java):1000MS/3000MS 內存限制:65536KByte總提交: 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> intmain() { 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:\n",++ca); for(i=1; i<=n; i+=2) { if(f!=s-1&&i!=n&&i!=n-1)printf("%d,",i),f++;//不是最後一個數or不到換行 elseprintf("%d\n",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:\n",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("\n"); j=0; } } if(j) printf("\n"); } return 0; }
5605: 祝crq生日快樂
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal 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的小難題
Time Limit(Common/Java):500MS/1500MS Memory Limit:65536KByteTotal 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,但是
因為攻擊力最多100 ,所以開始開兩個100的數組 ,然後100^2完事#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\n"); else printf("%d\n",sum); } return 0; }
5607: taozi的簽到題
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal 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",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\n",a[n]); return 0; }
5608: 單身狗沙漠逃生
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal 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\n",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\n",a,b); } }
1111我和程序有個約會