197
技術社區[雲棲]
cc Hotel Balifornia 2
cc的題描述都很奇特的感覺,這是個模擬題,時間限製卡的很嚴格,如果不手寫io操作的話都會上1s,手寫io可以降到0.57s。
看了個大神程序IO用了getchar_unlocked()但是windows下好像不行,就用getchar()代替了
/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define Maxn 314160
using namespace std;
inline void inp( int &n )//fast input function
{
n=0;
int ch=getchar(),sign=1;
while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getchar();}
while( ch >= '0' && ch <= '9' )
n=(n<<3)+(n<<1)+ ch-'0', ch=getchar();
n=n*sign;
return;
}
int R[Maxn];//房間客人編碼
int room[Maxn],start[Maxn];
int n,m;
int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
inp(n);inp(m);
memset(R,0,n*sizeof(R[0]));
int time,inc,now=0,ll=n-1;
for(i=1;i<=m;i++)
{
inp(time);
inp(inc);
start[i]=time;
if(n!=now)//沒住滿,依次安排
{
room[i]=now-inc;
R[now++]=i;
}
else//已住滿,趕走之前的人
{
if(inc==n){room[i]=0;continue;}//沒房間,必須要在這判斷,不然坐等超時
room[i]=ll-inc;
start[R[ll]]=time-start[R[ll]];
R[ll]=i;
}
}
++time;
for(i=0;i<n;i++)
start[R[i]]=time-start[R[i]];
for(i=1;i<=m;i++)
printf("%d %d\n",room[i],start[i]);
}
}
最後更新:2017-04-04 07:03:48