Problem C: 通话记录
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 7 Solved: 4
[ Submit][ Status][ Web Board]
Description
使用3个队列,分别保留手机上最近10个,(0)未接来电、(1)已接来电、(2)已拨电话。
Input
全部通话记录,每行一条记录。
每条记录包含两个数字,第一个数代表记录类型,第二个数代表手机号码。
Output
分3列输出未接来电、已接来电、已拨电话。
列之间用空格分割,后接电话在最先输出,不足10条用0占位。
Sample Input
2 18270477699
1 10149800116
0 19906559817
1 16209018105
1 16804212234
2 19289130583
1 17982711123
0 10897630486
1 11860787674
0 15192777554
Sample Output
15192777554 11860787674 19289130583
10897630486 17982711123 18270477699
19906559817 16804212234 0
0 16209018105 0
0 10149800116 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
HINT
#include<stdio.h>
int main()
{
int flag,i,j,k,l,sum=0;
long long r;
j=k=l=0;
long long a[10000],b[10000],c[10000];
for(i=0;i<10;i++)
{
a[i]=b[i]=c[i]=0;
}
while(scanf("%1d%lld",&flag,&r)!=EOF)
{
// printf("%I64d\n",r);
if(flag==0)
{
a[j++]=r;
}
else if(flag==1)
{
b[k++]=r;
}
else
{
c[l++]=r;
}
//printf("%I64d\n",r);
}
j-=1;k-=1;l-=1;
for(i=0;i<10;i++)
{
if(j>=0&&k>=0&&l>=0)
printf("%lld %lld %lld\n",a[j--],b[k--],c[l--]);
else if(j<0&&k>=0&&l>=0)
printf("0 %lld %lld\n",b[k--],c[l--]);
else if(k<0&&j>=0&&l>=0)
printf("%lld 0 %lld\n",a[j--],c[l--]);
else if(l<0&&j>=0&&k>=0)
printf("%lld %lld 0\n",a[j--],b[k--]);
else if(j<0&&k<0&&l>=0)
printf("0 0 %lld\n",c[l--]);
else if(j<0&&l<0&&k>=0)
printf("0 %lld 0\n",b[k--]);
else if(k<0&&l<0&&j>=0)
{
printf("%lld 0 0\n",a[j--]);
}
else
{
printf("0 0 0\n");
}
}
}