题:
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描写叙述
- 现举行一次小竞赛,參赛的3支队伍,编号为1,2,3.每支队列轮流回答问题,假设回答正确,加10分;回答错误,扣10分;放弃回答不得分.经过多轮答题后,我们要统计各队的名次和得分.
- 输入
- 第一行为回答问题的轮次数n.
其余各行分别为1,2,3号队伍答题的结果,回答正确为right,错误为wrong,放弃为give-up. - 输出
- 按名次输出各队的编号和得分.名次同样的在同一行输出,且编号小者靠前.
- 例子输入:
-
4 right wrong give-up right right right wrong right right right right right
- 例子输出:
-
(3,30) (1,20)(2,20)
解:
#include<iostream> #include<string> using namespace std; int main() { struct S{ int All; int Nu; }; struct S st[3]; for(int i=0;i<3;i++) { st[i].All=0; st[i].Nu=i+1; } int n; cin>>n; string A[n][3]; for(int i=0;i<n;i++) { for(int j=0;j<3;j++) { cin>>A[i][j]; } } for(int i=0;i<3;i++) { for(int j=0;j<n;j++) { if(A[j][i]=="right") { st[i].All+=10; } else if(A[j][i]=="wrong") { st[i].All-=10; } } } struct S t; for(int i=0;i<3;i++) { for(int j=0;j<2;j++) { if(st[j].All<st[j+1].All) { t=st[j]; st[j]=st[j+1]; st[j+1]=t; } } } for(int i=0;i<3;i++) { if(i>0){ if(st[i].All!=st[i-1].All) { cout<<endl; } } cout<<"("<<st[i].Nu<<","<<st[i].All<<")"; } return 0; }