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