等小和尚回來(lái)后,老和尚居然沒(méi)有睡覺(jué)。老和尚表示他的導(dǎo)員的Excel表格壞掉了(老和尚居然有導(dǎo)員?好吧……據(jù)說(shuō)是方丈),而且老和尚的導(dǎo)員要老和尚將寺中所有和尚的期末考試成績(jī)按降序排列來(lái)發(fā)獎(jiǎng)學(xué)金(和尚還有獎(jiǎng)學(xué)金?)不用多說(shuō),為了繼續(xù)睡午覺(jué),這個(gè)任務(wù)理所當(dāng)然的落在了小和尚身上。所有……你繼續(xù)幫忙吧。Input
寺中主要考試科目有C語(yǔ)言,線(xiàn)性代數(shù),高等數(shù)學(xué)和英語(yǔ)四個(gè)科目(怎么當(dāng)和尚都這么累),輸入的第一行是和尚的人數(shù)N(N<=100),第二行至第N+1行分別為C語(yǔ)言a[i],線(xiàn)性代數(shù)b[i],高等數(shù)學(xué)c[i]和英語(yǔ)的成績(jī)d[i](0 <= a[i],b[i],c[i],d[i] <= 100)。Output
現(xiàn)需要你將和尚們的成績(jī)以總成績(jī)降序排列,輸出數(shù)據(jù)的每行有兩個(gè)數(shù)字,第一個(gè)數(shù)字為和尚的編號(hào)(輸入時(shí)的第一個(gè)和尚成績(jī)即為和尚1,第二個(gè)為和尚2),第二個(gè)數(shù)字為和尚的總成績(jī)(如果總成績(jī)相同,則按C語(yǔ)言的成績(jī)排列,如在相同,則按線(xiàn)性代數(shù)輸出編號(hào),以此類(lèi)推。)Sample Input
598 50 27 6558 52 24 1698 96 90 8931 65 98 7865 67 66 90Sample Output
3 3735 2884 2721 2402 150#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct data{ int c; int x; int g; int y; int z; int number;}num[105];bool cmp(data a,data b){ if(a.z==b.z) return a.y>b.y; return a.z>b.z;}int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,j; for(i=0;i<n;i++) { scanf("%d%d%d%d",&num[i].c,&num[i].x,&num[i].g,&num[i].y); num[i].z=num[i].c+num[i].x+num[i].g+num[i].y; num[i].number=i; } sort(num,num+105,cmp); for(j=0;j<n;j++) { printf("%d %d/n",num[j].number+1,num[j].z); } } return 0;}健忘的老和尚
Problem:B
Time Limit:1000ms
Memory Limit:65536K
Description
當(dāng)小和尚排完名單后,老和尚突然一拍腦袋:“導(dǎo)員把每個(gè)人的人名都給我了,可我忘記告訴你了。”好吧……我們可憐的小和尚看來(lái)要費(fèi)二遍事了(好像之前的任務(wù)都是你幫他做的,好吧,你真可憐)Input
輸入數(shù)據(jù)為多組,輸入的第一行為和尚的人數(shù)N,可以得到獎(jiǎng)學(xué)金的人數(shù)M,和需要補(bǔ)考的人數(shù)O(在這里可以滿(mǎn)足M+O<=N,即得到獎(jiǎng)學(xué)金的和尚一定不用參加補(bǔ)考)。之后的N行每行都有一個(gè)字符串(即為和尚的名字,長(zhǎng)度小于100)和尚考試的總分a[i](0 <= a[i] <= 1000)。Output
前M行,每行是獲得獎(jiǎng)學(xué)金的小和尚的名字;后O行,每行是補(bǔ)考的小和尚的名字;由于老和尚覺(jué)得很對(duì)不起小和尚,所以他決定這次簡(jiǎn)單些,所以無(wú)論是獎(jiǎng)勵(lì)還是懲罰都按照總成績(jī)從低到高輸出和尚的名字即可。Sample Input
5 1 2a 192 aa 212ab 351bab 128bbaa 654Sample Output
bbaababa#include <stdio.h>#include <algorithm>using namespace std; struct in{ char name[1000]; int grade; };bool cmp1(in a,in b){ return a.grade>b.grade;}int main(){ int n,m,o; int a; while(scanf("%d %d %d",&n,&m,&o)!=EOF) { struct in stu[101]; for(a=0;a<n;a++) { scanf("%s",&stu[a].name); scanf("%d",&stu[a].grade); } sort(stu,stu+n,cmp1); for(a=m-1;a>=0;a--) printf("%s/n",stu[a].name); for(a=n-1;a>n-o-1;a--) printf("%s/n",stu[a].name); } return 0;}相約摩洛哥
Problem:C
Time Limit:1000ms
Memory Limit:65536K
Description
2015年5月ACM全球總決賽在摩洛哥卡薩布蘭卡舉行,到時(shí)會(huì)有來(lái)自世界各地的acm大牛齊聚摩洛哥。作為本次大賽的舉辦方負(fù)責(zé)人阿焜和阿祥被分配給了一個(gè)重要的任務(wù),就是在比賽中統(tǒng)計(jì)大家的排名。acm大賽排名規(guī)則(摘自百度百科): 最后的獲勝者為正確解答題目最多且總用時(shí)最少的隊(duì)伍。每道試題用時(shí)將從競(jìng)賽開(kāi)始到試題解答被判定為正確為止,其間每一次提交運(yùn)行結(jié)果被判錯(cuò)誤的話(huà)將被加罰20分鐘時(shí)間,未正確解答的試題不記時(shí)。例如:A、B兩隊(duì)都正確完成兩道題目,其中A隊(duì)提交這兩題的時(shí)間分別是比賽開(kāi)始后1:00和2:45,B隊(duì)為1:20和2:00,但B隊(duì)有一題提交了2次。這樣A隊(duì)的總用時(shí)為1:00+2:45=3:45而B(niǎo)隊(duì)為1:20+2:00+0:20=3:40,所以B隊(duì)以總用時(shí)少而獲勝。請(qǐng)你幫他倆完成這項(xiàng)任務(wù)吧!(保證沒(méi)有成績(jī)完全相同兩支隊(duì)伍)
Input
多組輸入,每組一個(gè)正整數(shù)n(1<=n<=100000),代表有n個(gè)隊(duì)伍參賽。接下來(lái)的n行,每行分別有一個(gè)字符串(只包含小寫(xiě)英文字母)作為隊(duì)伍名,長(zhǎng)度1<=len<=10;ABC三道題的ac時(shí)間(以分鐘為單位),時(shí)間為-1表示該題沒(méi)有ac。接下來(lái)又有n行,表示每道題的提交次數(shù),用3個(gè)正整數(shù)表示。Output
輸出排行榜。n行,每行一個(gè)隊(duì)伍的名字、解題數(shù)和總用時(shí)。Sample Input
3 team 30 10 20behappy 20 20 90newbee 15 16 171 1 11 1 101 1 1Sample Output
newbee 3 48team 3 60behappy 3 310#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct data{ char name[15]; int x; int y; int z; int xx; int yy; int zz; int ti; int zong;}num[105];bool cmp(data a,data b){ if(a.ti==b.ti) return a.zong<b.zong; return a.ti>b.ti;}int main(){ int n; while(scanf("%d",&n)!=EOF) { int i; for(i=0;i<n;i++) { scanf("%s",num[i].name); scanf("%d%d%d",&num[i].x,&num[i].y,&num[i].z); } for(i=0;i<n;i++) { scanf("%d%d%d",&num[i].xx,&num[i].yy,&num[i].zz); } for(i=0;i<n;i++) { num[i].zong=0; num[i].ti=0; } for(i=0;i<n;i++) { if(num[i].x!=-1) { num[i].zong+=num[i].x+(num[i].xx-1)*20; num[i].ti++; } if(num[i].y!=-1) { num[i].zong+=num[i].y+(num[i].yy-1)*20; num[i].ti++; } if(num[i].z!=-1) { num[i].zong+=num[i].z+(num[i].zz-1)*20; num[i].ti++; } } sort(num,num+n,cmp); for(i=0;i<n;i++) { printf("%s %d %d/n",num[i].name,num[i].ti,num[i].zong); } } return 0;}戲說(shuō)三國(guó)(注意審題!!)
Problem:D
Time Limit:1000ms
Memory Limit:65536K
Description
東漢末年,宦官當(dāng)權(quán),民不聊生。靈帝中平元年,張角兄弟發(fā)動(dòng)黃巾起義,官軍聞風(fēng)喪膽。為抵抗黃巾,幽州太守劉焉出榜招兵。榜文前,劉備、關(guān)羽、張飛三兄弟萍水相逢。三人都有為國(guó)效力之心,于是桃園結(jié)為異姓兄弟,開(kāi)始了一段三國(guó)浪漫傳奇…… 如果我問(wèn)你三國(guó)中誰(shuí)最聰明你一定會(huì)說(shuō)是諸葛亮,我要問(wèn)你誰(shuí)武功最高,保不準(zhǔn)你就要說(shuō)關(guān)羽。是啊,我們的劉備對(duì)于優(yōu)秀的手下向來(lái)十分滿(mǎn)意。可是有一天,劉備在無(wú)意間在朋友圈里看到了梁山的宋江正在進(jìn)行英雄排座次,最可氣的是這條動(dòng)態(tài)已經(jīng)被轉(zhuǎn)發(fā)評(píng)論了無(wú)數(shù)次了……這一下可氣壞了劉備,他決定也來(lái)一次,蜀中文武百官大排名。為了公平起見(jiàn),諸葛亮幫他制定一條評(píng)分標(biāo)準(zhǔn):每個(gè)官員有一個(gè)智育、德育、武育三個(gè)分?jǐn)?shù),分別以b%,a%,c%的比率計(jì)入加權(quán)總分,按總分降序排列,總分相同按智育折合后的分?jǐn)?shù)降序,智育相同按德育,依次類(lèi)推最終決定排名。(保證沒(méi)有排名一樣的兩個(gè)人)Input
輸入第一行t(1<=t<=1000)表示輸入的組數(shù)。接下來(lái)每組第一行1個(gè)整數(shù)n(1<=n<=100000)三個(gè)實(shí)數(shù)a,b,c(a+b+c=100)接下來(lái)n行每行包括英雄的名字,字符串s(1<=len<=20,全為小寫(xiě)字母) 智育、德育、武育的分?jǐn)?shù)(整數(shù))。(1~100)Output
每組第一行輸出是第幾組輸出Case #t:接下來(lái)輸出n行每行包括英雄的名字,總分,智育、德育、武育折合后的分?jǐn)?shù)(保留四位小數(shù))。Sample Input
13 20.00 20.00 60.00zhugeliang 90 80 0zhangfei 0 0 100guanyu 10 100 100Sample Output
Case #1:guanyu 82.0000 2.0000 20.0000 60.0000zhangfei 60.0000 0.0000 0.0000 60.0000zhugeliang 34.0000 18.0000 16.0000 0.0000#include <stdio.h>#include <stdlib.h>#include <algorithm>using namespace std;struct hs{char name[25];int q,w,e;float QQ,ww,ee,s;}h[100010];bool pp(hs,hs);int main(){ int n,i,j,t,r; float a,b,c; scanf("%d",&t); for (r=1;r<=t;r++) { scanf("%d%f%f%f",&n,&a,&b,&c); a/=100; b/=100; c/=100; for (i=0;i<n;i++) { scanf("%s",h[i].name); scanf("%d%d%d",&h[i].q,&h[i].w,&h[i].e); h[i].qq=b*h[i].q; h[i].ww=a*h[i].w; h[i].ee=c*h[i].e; h[i].s=h[i].qq+h[i].ww+h[i].ee; } sort(h,h+n,pp); printf("Case #%d:/n",r); for (i=0;i<n;i++) { printf("%s %.4f %.4f %.4f %.4f/n",h[i].name,h[i].s,h[i].qq,h[i].ww,h[i].ee); } } return 0;}bool pp(hs q,hs w){ return q.s>w.s;}排序
Problem:E
Time Limit:1000ms
Memory Limit:65536K
Description
輸入一行數(shù)字,如果我們把這行數(shù)字中的‘5’都看成空格,那么就得到一行用空格分割的若干非負(fù)整數(shù)(可能有些整數(shù)以‘0’開(kāi)頭,這些頭部的‘0’應(yīng)該被忽略掉,除非這個(gè)整數(shù)就是由若干個(gè)‘0’組成的,這時(shí)這個(gè)整數(shù)就是0)。 你的任務(wù)是:對(duì)這些分割得到的數(shù)字,依從小到大的順序排序輸出Input
輸入包含多組測(cè)試用例,每組輸入數(shù)據(jù)只有一行數(shù)字(數(shù)字之間沒(méi)有空格),這行數(shù)字的長(zhǎng)度不大于1000。 輸入數(shù)據(jù)保證:分割得到的非負(fù)整數(shù)長(zhǎng)度不大于100;輸入數(shù)據(jù)不可能全由‘5’組成。Output
對(duì)于每個(gè)測(cè)試用例,輸出分割得到的整數(shù)排序的結(jié)果,相鄰的兩個(gè)整數(shù)之間用一個(gè)空格分開(kāi),每組輸出占一行。Sample Input
0051231232050775Sample Output
0 77 12312320#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct in{ char s[110];}nt[1010];bool cmp(in a,in b){ int alen,blen; alen=strlen(a.s); blen=strlen(b.s); if(alen<blen) return true; else if(alen>blen) return false; else { if(strcmp(a.s,b.s)<0) return true; else return false; }}int main(){ int len,tlen,k; int i,d; char s[1010],st[110]; memset(st,0,sizeof(st)); while(scanf("%s",&s)!=EOF) { len=strlen(s); k=0; tlen=0; for(i=0;i<=len;i++) if(i==len||s[i]=='5') { if(tlen==0) continue; for(d=0;d<tlen-1;d++) if(st[d]!='0') break; strcpy(nt[k++].s,st+d); memset(st,0,sizeof(st)); tlen=0; } else { st[tlen++]=s[i]; } sort(nt,nt+k,cmp); printf("%s",nt[0].s); for(i=1;i<k;i++) printf(" %s",nt[i].s); printf("/n"); } return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注