西南交通大学2019 ACM合宿チーム選抜訓練試合A題

2671 ワード

西南交通大学2019 ACM合宿チーム選抜訓練試合A題
数名の説明を計算する
あるACMの試合では、A、B、C...Hの8つの問題があった.テーマの難易度はランダムに分布し、最終成績はAC数と時間と関係があり、具体的なランキング計算規則は以下の通りである:2人のACテーマの個数が異なると、ACテーマの数が多い人が上位にランクされる.二人のAC問題が同じくらい多いと、罰が少ない人が上位にランクされます.ペナルティは、試合開始から計時し、すべてのACのテーマの中で、最初のACの時間(分)+20(分)×この問題が誤って提出された回数(コンパイルエラー「Compile Error」がペナルティでない場合).
例えば、ある人が試合開始12分A題「Compile Error」24分A題「Wrong Answer」36分A題「Accepted」48分B題「Time Limit Exceeded」60分E題「Accepted」72分B題「Accepted」84分F題「Wrong Answer」96分F題「Wrong Answer」108分F題「Wrong Answer」108分F題「Wrong Answer」.この人のACテーマの数は3題で、総罰は20+36+20+60+72=208点です
入力
複数組のテストデータ、1行目の整数T(1<=T<=100)は、t組のテストデータを含むことを示す
各テストデータの最初の行には、n個のコミットレコードを示す整数n(1<=n<=1000)が含まれる
次のn行は、各行に1つの整数t(0<=t<=300)がコミット時間を表し、1つの文字ch(‘A’<=ch<=‘H’)がコミット問題番号を表し、1つの文字列strがコミット結果を表す.「Accepted」は、この問題が正しく通過したこと(すなわちAC)を示す.「Wrong Answer」はこの問題の答えが間違っていることを表す.「Time Limit Exceeded」は、プログラムの実行時間が所定時間を超えていることを示します.「Runtime Error」は、プログラムの実行中にエラーが発生したことを示し、配列アクセスの限界、ゼロエラー、スタックオーバーフローなどを除く可能性があります.「Compile Error」は、プログラムのコンパイルに失敗したことを示します.「Memory Limit Exceeded」は、プログラムのメモリ使用量が多すぎることを示します.エラー送信中に「Compile Error」のみ罰を計上しない場合
しゅつりょく
各組のデータは1行出力して、2つの整数aを含んで、bはAC題目の数量と総罰の時を表します
入力サンプル1
1 9 12 A Compile Error 24 A Wrong Answer 36 A Accepted 48 B Wrong Answer 60 E Accepted 72 B Accepted 84 F Wrong Answer 96 F Wrong Answer 108 F Wrong Answer
出力サンプル1
3 208
問題解決まず、入力するたびに対応する問題解決時間や罰を記録すると、8つの問題があり、1つの配列t[]で各問題を保存する時間を考慮することができます.入力された問題番号mから65(文字「A」のASCIIコード)を引いて配列要素序数を表すことができる.すなわち、A問題に対応する時間t[0]、m問題の時間はt[m-65]である.そして、文字配列を判断する際には頭文字を判断するだけである.すなわち、頭文字を判断する場合には「A」、すなわち「Accepted」である(Wrong Answer,Compile Error...),対応する時間t[]20を足すと、Acceptedを判断し、問題を解くのに時間がかかりますが、これには問題があります.1つの問題AC以降、この問題が再提出されると、ACもエラーも計算時間にありません.これは私たちが判断文を加えることができます.最後に,合計時間加算を行う場合は,ACのみの問題であるべきであるため,別の配列でACの問題を記録することができる.
コード#コード#
#include
#include
void main()
{
	int T,n,a,b,t[11],x[11],j,i,y,flag,z[11];
	char s[50],m;
	scanf("%d",&T);
	while(T--)
	{
		memset(t,0,sizeof(t));
		memset(x,0,sizeof(x));
		memset(z,0,sizeof(z));
		scanf("%d",&n);
		j=0;
		y=0;
		while(n--)
		{
			scanf("%d %c",&a,&m);
			getchar();
			gets(s);
			b=m-64;
			if(s[0]=='A')
			{
				flag=0;
				for(i=0;i<=9;i++)
					if(b==x[i])
					{
						flag=1;
					    break;
					}
                if(flag==0)
				{
					t[b]+=a;x[j]=b;z[j++]=t[b];
				}
			}
			else if(s[0]=='W'||s[0]=='R'||s[0]=='M'||s[0]=='T')
				t[b]=t[b]+20;
		}
		printf("%d ",j);
		for(i=0;i<=j-1;i++)
		{
			y+=z[i];
		}
		printf("%d
",y); } }