我承认 这个题是我今天看计算几何看错题号手贱点进去的,但既然手贱 那就做下去吧。。。。。其实也就比省赛PROBLEM G难一点点而已。主要是时钟的转化和SORT的写法。
ok,以后尽量不眼花了。。。。。。ORZ
里面有一个TRAP,队做题数和时间都相等的话,按队伍编号从小到大排列。另外SORT居然略微晕了点,这个可是做了一暑假的,卧槽了。
2AC:
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
class acmer
{
public:
int tishu,duiwu;
int shi,fen,miao;
int totaltime;
bool ismyteam;
};
bool cmp(acmer a,acmer b)
{
if(a.tishu!=b.tishu)
{
return a.tishu>b.tishu;
}
else
{
if(a.totaltime!=b.totaltime)
{
return a.totaltime < b.totaltime;
}
else
{
return a.duiwu<b.duiwu;
}
}
}
acmer totalteam[135];
int main()
{
int mingci;
int teamnum,gold,sliver,copper,noaward;
while(cin>>teamnum>>gold>>sliver>>copper>>noaward && (teamnum!=0 || gold!=0 ||sliver!=0 ||copper!=0||noaward!=0))
{
int tishu;
string timegrd;
for(int i=0;i<135;i++)
{
totalteam[i].ismyteam=false;
}
for(int i=0;i<teamnum;i++)
{
cin>>totalteam[i].tishu;
cin>>timegrd;
totalteam[i].shi=(timegrd[0]-'0')*10+(timegrd[1]-'0')*1;
totalteam[i].fen=(timegrd[3]-'0')*10+(timegrd[4]-'0')*1;
totalteam[i].miao=(timegrd[6]-'0')*10+(timegrd[7]-'0')*1;
totalteam[i].totaltime=totalteam[i].shi*3600+totalteam[i].fen*60+totalteam[i].miao*1;
}
totalteam[noaward-1].ismyteam=true;
sort(totalteam,totalteam+teamnum,cmp);
for(int z=0;z<teamnum;z++)
{
if(totalteam[z].ismyteam==true)
{
if(z<gold)
{
cout<<"Accepted today? I've got a golden medal :)"<<endl;
break;
}
else if(z<gold+sliver)
{
cout<<"Accepted today? I've got a silver medal :)"<<endl;
break;
}
else if(z<gold+sliver+copper)
{
cout<<"Accepted today? I've got a copper medal :)"<<endl;
break;
}
else
{
cout<<"Accepted today? I've got an honor mentioned :)"<<endl;
}
}
}
}
return 0;
}
另附上百度之星初赛1007中学到的另一种时钟转时间的方法:采用string中的find方法,也是最标准的时间转换:
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
int main()
{
int testcase;
cin>>testcase;
for(int i=1;i<=testcase;i++)
{
vector<string> timecv;
string time,hour="",minute="";
cin>>time;
int cut=time.find(":");
for(int k=0;k<cut;k++)
{
hour+=time[k];
}
for(int l=cut+1;l<time.length();l++)
{
minute+=time[l];
}
int inthour=atoi(hour.c_str());
int intmin=atoi(minute.c_str());
if(intmin!=0)
{
cout<<"0"<<endl;
}
else
{
int outhour;
outhour=inthour+12;
if(outhour>24)
{
cout<<outhour%24<<endl;
}
else
cout<<outhour<<endl;
}
}
return 0;
}
ok,以后尽量不眼花了。。。。。。ORZ