【题目】B. Ithea Plays With Chtholly
【题意】交互题,有n格,每次给一个[1,c]的数字,回答填入的位置后再次给数字,要求在m轮内使n格填满且数列不递减。n,m>=2,1<=c<=1000,1<=n*[c/2]<=m<=1000。
【算法】贪心
【题解】对于每次的数字x,找到第一个严格大于的位置替换之(或占一个新的空位置)。
这样替换的好处是,不改变当前数列已经满足不递减这一事实的前提下,使数列更优。
那么,每个格子最多被替换c次,总轮数为(n-1)*c+1。
考虑将数字分成[1,c/2]和[c/2+1,c]两部分,一部分从左维护不递减数列,另一部分从右维护不递增数列,总轮数为(n-1)*[c/2]+1,满足要求。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<cstdio> int n,m,c,num,x,y,a[1010]; //learn from wangrq int main(){ scanf("%d%d%d",&n,&m,&c); while(num<n){ scanf("%d",&x); if(x*2<=c){ y=1; while(a[y]&&a[y]<=x)y++; } else{ y=n; while(a[y]&&a[y]>=x)y--; } if(!a[y])num++; a[y]=x; printf("%d ",y); fflush(stdout); } return 0; }