原题链接
这道题我是以E为判断组合标准的
1 3测试点无法通过是因为没有考虑到S E E的情况visit[id] = true; //解决S E E 的情况
加个判断标志就好啦
#include <iostream>
#include <string.h>
using namespace std;
const int maxn = 10010;
struct read
{
string s;
int hh,mm;
}per[maxn];
bool visit[maxn] ={false};
int caculate(int h1,int m1,int h2,int m2)
{
int all1 = h1 * 60 + m1;
int all2 = h2 * 60 + m2;
return all2 - all1;
}
int main()
{
int n, id, h, m;
string c;
cin >> n;
int cishu = 0, cont = 0;
double time = 0; //记录读书次数
while(cishu != n)
{
cin >> id;
cin >> c;
scanf("%d:%d",&h,&m);
if(id == 0)
{
cishu++;
if(cont == 0) cout << "0 0" << endl;
else cout << cont << " " << int(time / cont + 0.5) << endl;
cont = 0;
time = 0;
}
else
{
if(c == "S")
{
visit[id] = true; //解决S E E 的情况
per[id].s = c;
per[id].hh = h;
per[id].mm = m;
}
else if(c=="E")
{
if(per[id].s == "S" && visit[id] == true)
{
cont++;
time += caculate(per[id].hh,per[id].mm,h,m);
visit[id] = false;
}
}
}
}
return 0;
}