【恶心的模拟题】
必须细心,否则很难AC,可以看看这位总结的测试点,非常好用,帮我挑出来一处错误。
#include <bits/stdc++.h>
using namespace std;
int toll[24];
int dayCost=0;
map<string,int> m;
struct node
{
bool online;
string time;
};
vector<node> v[1024];
bool cmp(node a,node b)
{
for(int i=0;i<11;i++)
{
if(a.time[i]==b.time[i])
continue;
else if(a.time[i]<b.time[i])
return true;
else return false;
}
}
int convert(char a,char b)
{
return (a-'0')*10+(b-'0');
}
int print(string a,string b)
{
int sum=0,cent=0;
int ad=convert(a[3],a[4]),ah=convert(a[6],a[7]),am=convert(a[9],a[10]);
int bd=convert(b[3],b[4]),bh=convert(b[6],b[7]),bm=convert(b[9],b[10]);
sum=(bd-ad)*24*60+(bh-ah)*60+bm-am;
cout<<a.substr(3)<<" "<<b.substr(3)<<" "<<sum<<" $";
for(int i=ad;i<bd;i++)
bh+=24;
for(int i=ah;i<bh;i++)
{
cent+=(60-am)*toll[i%24];
am=0;
}
if(am==0)
cent+=bm*toll[bh%24];
else
cent+=(bm-am)*toll[bh%24];
printf("%.2lf\n",0.01*cent);
return cent;
}
int main(void)
{
int N,p=0;
string str,tmp;
for(int i=0;i<24;i++)
scanf("%d",&toll[i]);
for(int i=0;i<24;i++)
dayCost+=toll[i];
dayCost*=60;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
node n;
cin>>str;
if(m.find(str)==m.end()) //not exist
{
m[str]=p;p++;
}
cin>>n.time>>tmp;
if(tmp[1]=='n') n.online=true;
else n.online=false;
v[m[str]].push_back(n);
}
for(int i=0;i<p;i++)
sort(v[i].begin(),v[i].end(),cmp);
for(map<string,int>::iterator i=m.begin();i!=m.end();i++)
{
int month,sum=0;
for(int j=0;j<v[i->second].size()-1;j++)
{
if(v[i->second][j].online&&!v[i->second][j+1].online)
{
if(sum==0)
{
month=convert(v[i->second][j].time[0],v[i->second][j].time[1]);
cout<<i->first<<" ";
printf("%02d\n",month);
}
sum+=print(v[i->second][j].time,v[i->second][j+1].time);
}
}
if(sum!=0) printf("Total amount: $%.2lf\n",0.01*sum);
}
}