1. 程式人生 > >HDU 6023-Automatic Judge(模擬題)

HDU 6023-Automatic Judge(模擬題)

分析

主要就是多次ac取時間最短的那次。

-=和%=1000的問題

如果沒有ac則罰時不計,都知道的 我卻忘考慮了。

#include<bits/stdc++.h>

using namespace std;
const int maxn=1e5+5;
struct node{
	int id,rtm;
	string ans,tm;
}a[maxn];
bool cmp(node a,node b){
	return a.tm<b.tm;
}
bool vis[maxn];
bool isac[maxn];
int main(){
	int t,n,m;
	scanf("%d",&t);
	while(t--){
		int sum=0,cnt=0;
		memset(vis,0,sizeof(vis));
		memset(isac,0,sizeof(isac));
		scanf("%d%d",&n,&m);
		for(int i=0;i<m;i++){
			cin>>a[i].id>>a[i].tm>>a[i].ans;
			//scanf("%d %s %s",&a[i].id,a[i].tm,a[i].ans);  scanf不能讀string 
			a[i].id-=1000; 
			a[i].rtm=(a[i].tm[1]-48)*60+(a[i].tm[3]-48)*10+(a[i].tm[4]-48);//處理時間 
			if(a[i].ans=="AC") isac[a[i].id]=1;				//最終是否ac 		
			//cout<<a[i].rtm<<endl;	
		}
		sort(a,a+m,cmp);//不用 
	
		for(int i=0;i<m;i++){
			if(vis[a[i].id]) continue;
			if(a[i].ans=="AC"){
				sum+=a[i].rtm;
				vis[a[i].id]=1;
				cnt++;
			}
			else {
				if(isac[a[i].id]==1) sum+=20;
			}
		}
		printf("%d %d\n",cnt,sum);
	}
	return 0;
}