【CodeForces】896 B. Ithea Plays With Chtholly

【题目】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,满足要求。

#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;
}
View Code
原文地址:https://www.cnblogs.com/onioncyc/p/7988892.html