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]); } }