题:
-
总时间限制:
- 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;
}