题意:交互题。
n张纸,m轮,c(每一次给出的最大的数字)。然你对于每次输入都输出一张纸,要求在m次操作内每个板子都有数,并且从左到右非严格递增 。
n,m>=2,1<=c<=1000,1<=n*[c/2]<=m<=1000。
思路:n个格子每个都可以写c/2次,那就把可能出现的数字1-c二分,如果小于等于c/2就从左边开始填,否则从右边开始填。填的时候维护一个不减序列,如果遇到空的格子直接填上去,做不到维护不增就替换第一个大于(右边填起就是小于)这个数的数字。
#include<bits/stdc++.h>
using namespace std;
int a[1100];
int main ()
{
int n,m,c; scanf("%d%d%d",&n,&m,&c);
int cnt=0;
int ind;
while (cnt<n){
int lo; scanf("%d",&lo);
if(lo<=c/2){
ind=1;
while(a[ind]&&a[ind]<=lo) ind++;
}
else{
ind=n;
while(a[ind]&&a[ind]>=lo) ind--;
}
if(!a[ind])cnt++;
a[ind]=lo;
printf("%d\n",ind);
fflush(stdout);
}
}