河南工業大學2017“玲瓏杯”程序設計競賽 01

1260: ***的比賽

時間限制: 1 秒  內存限制: 64 MB
提交: 256  解決: 73
提交 狀態 

題目描述

饒妹組織了一場ACM賽制的比賽,大家紛紛慕名來參加。比賽中大家交題只會有兩種結果:AC,WA。比賽結束了,饒妹製作榜單啦。首先按AC題目的數目(重複AC一道題只算一次)從多到少排名;AC題目數目相同的同學按罰時(罰時計算方式爲:單題罰時 = (首次AC該題目時間 + 首次AC之前WA的次數 * 20) min,總罰時 = 各題罰時之和;即某題目AC之後,對這道題目後續的提交均不計入罰時)從少到多排列;AC數目相同且罰時也相同的同學,按編號從小往大排序。

輸入


第一行爲n,m,k(1≤n≤1000,1≤m≤10000,1≤k≤10),分別表示參加比賽的人數、提交總次數和總題數。
之後一行爲n個用空格分隔的字符串,表示n位參賽選手的姓名(每個字符串長度均不超過20,且僅含小寫字母);
之後m行,每行均爲 Timei IDi PIDi Resulti,(1≤TimeiTimei+1≤300,1≤IDin,1≤PIDik,Resulti="AC"/"WA"),表示編號爲IDi的選手在Timei時刻提交了編號爲PIDi的題目,且結果爲Resulti.


輸出

輸出n行,按排名從高到低排列。每行分別輸出該選手的姓名,過題數,總罰時,中間均爲一個空格間隔。

樣例輸入

5 11 10
phx lsf zk rqy ch1 
1 1 AC
1 1 2 AC
2 1 3 AC
2 1 4 AC
3 2 2 WA
4 2 2 AC
5 3 2 AC
10 5 1 WA
20 5 2 WA
30 5 3 WA
40 5 4 WA

樣例輸出

phx 4 6
zk 1 5
lsf 1 24
rqy 0 0
ch 0 0



題目描述中主人公被改名字了——也是才知道名字後兩個字是高度敏感詞,不知道的後果就是被封了

在比賽時剛思考思路不是很清晰,結構體裏題號pi 每題罰時 sw 都是對於一個人的一道題來說     而總罰時st AC題數sp 是對應一個人所有題
還有就是ac題數 罰時相等時按照輸入順序來輸出
附上代碼


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct In{
	int pi[15],sw[15],st,sp,xu;//題號 每題罰時 總罰時 AC題數 序號 
	char na[20];//序號對應的名字 
}a[1005];
int cmp(const void*aa,const void*bb)
{
	struct In*c=(In*)aa;
	struct In*d=(In*)bb;
	if(c->sp!=d->sp)return d->sp - c->sp;
	else if(c->st!=d->st) return c->st - d->st; 
	else return c->xu - d->xu;//題數罰時相等時按照序號 
}
int main()
{
	int n,m,k,d,len;
	while(~scanf("%d%d%d",&n,&m,&k))
	{
		int t,p;
	    char s[1005][20],s1[5];
	    memset(a,0,sizeof(a));
	    for(int i=0;i<n;i++)
	    {
	       scanf("%s",a[i].na);
		   a[i].xu=i;
	    }
	    for(int i=0;i<m;i++)
        {
		   scanf("%d%d%d%*c%s",&t,&d,&p,s1);
		   if(!a[d-1].pi[p-1])
		   {
			  if(s1[0]=='A')
			  {
				a[d-1].sp++;
				a[d-1].st+=t+(a[d-1].sw[p-1])*20;
				a[d-1].pi[p-1]=1;
			  }
			  else 
				(a[d-1].sw[p-1])++;
		   }  
	    }
	   qsort(a,n,sizeof(a[0]),cmp);
	   for(int i=0;i<n;i++)
	   printf("%s %d %d\n",a[i].na,a[i].sp,a[i].st);
	}
	return 0;
}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章