http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339
题意:输出每一道题的LB将得主。
思路:水题,注意一点就是标记这个队提交这个题是几次提交,只能算最早正确的那次,那么用一个二维数组标记下就行,其余的就简单了。
#include<cstdio>
#include<cstring>
struct node //每一道题的信息
{
int time,id; //提交的时间,提交者
char a,s[5]; //题目编号,结果
}p[1001];
struct node1
{
int time,id; //每一道题提交正确的最晚时间 和相应的提交者
}f[15];
int main()
{
int n,t,m,i,l,ll,maxn=0,ff[105][15]; //ff[i][j]表示i这个队是否提交过j题,每个队只能取最开始提交正确的那次。
scanf("%d%d%d",&n,&t,&m);
memset(ff,0,sizeof(ff)); //初始为0
for(i=1;i<=n;i++)
{
f[i].time=-1; //把每一题提交时间初始为-1
}
for(i=0;i<m;i++)
{
scanf("%d%d %c %s",&p[i].time,&p[i].id,&p[i].a,p[i].s);
//printf("%d%d %c %s",p[i].time,p[i].id,p[i].a,p[i].s);
l=p[i].a-'A'+1; //题目编号
ll=p[i].id; //提交者编号
if(l>maxn) maxn=l; //得出一共多少题
if(strcmp(p[i].s,"Yes")==0)
{
ff[ll][l]++; //这个人的这个题目已经提交正确
if(ff[ll][l]==1&&p[i].time>=f[l].time) //这个队提交这个题目是第一次提交并且提交时间比这个题的最晚时间还要晚
{
f[l].time=p[i].time; //把最晚时间赋值
f[l].id=p[i].id; //队伍编号
}
ff[ll][l]++; //表示提交过,下次不能再算
}
}
for(i=1;i<=maxn;i++)
{
if(f[i].time==-1) printf("%c - -\n",i-1+'A');
else printf("%c %d %d\n",i-1+'A',f[i].time,f[i].id);
}
return 0;
}