説明
注:時折回線障害が発生すると、不完全なレコードが表示される場合があります。つまり、EなしのSのみ、またはSなしのEのみであるため、システムはこの無効なレコードを自動的に無視できるはずです。また、タイトル保証書番号は本の一意の識別番号であり、同じ本を借りることができるのは、任意の時間間隔で1人の読者のみです。
入力形式:
最初の行に正の整数N(≤10)を入力し、N日間の記録を作成します。日次レコードは複数の借用操作で構成され、各操作は1行を占め、形式は次のとおりです。
ブック番号([1、1000]の整数)キー値(SまたはE)発生時間(hh:mm、hhは[0,23]の整数、mmは[0、59]の整数)
毎日の記録は、時間の昇順で提供されることが保証されています。
出力形式:
各日のレコードについて、その日のリーダーの借用回数と平均読み取り時間を1行に出力します(分単位と1桁の整数時間)。
入力例:
3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
出力サンプル:
2 196
0 0
1 60
回答
この質問は、借りる、返済しない、借りる、無視されないという2つの状況に注意を払う必要があり、それは起こらなかったと想定されます。値は、本のステータスを記録するために使用できます。1は借用を意味し、0は借用していないことを意味し、いつでも更新できます。最終時間は切り上げます。
丸め方法
C ++
呼び出し関数
double a;
cout<<ceil(a)<<endl; //向上取整
cout<<floor(a)<<endl; //向下取整
cout<<round(a)<<endl; //四舍五入
C
はintを直接使用してキャストします
double a;
cout<<(int)a<<endl;//向下取整
cout<<(a>(int)a?(int)a+1:(int)a)<<endl;//向上取整
cout<<(int)(a+0.5)<<endl;//四舍五入
ACコード
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
int f;
int h,m;
} a[1100];
int main()
{
int n;
cin>>n;
while(n--)
{
for(int i=0; i<1100; i++)
a[i].f=0;
int num,hh,mm;
char c;
int time=0,peo=0;
while(~scanf("%d %c %02d:%02d",&num,&c,&hh,&mm))
{
if(num==0)break;
if(c=='S')
{
a[num].f=1;
a[num].h=hh;
a[num].m=mm;
}
else if(c=='E')
{
if(a[num].f==1)
{
a[num].f=0;
if(hh==a[num].h)
{
time+=mm-a[num].m;
}
else
{
time+=(hh-a[num].h-1)*60;
time+=mm+60-a[num].m;
}
peo++;
}
}
}
if(peo==0)
cout<<0<<" "<<0<<endl;
else
{
int t=round(time*1.0/peo*1.0);
cout<<peo<<" "<<t<<endl;
}
}
return 0;
}