【交互】Omkar and the Meaning of Life(CF-1586D)
生活随笔
收集整理的這篇文章主要介紹了
【交互】Omkar and the Meaning of Life(CF-1586D)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
CF-1586D
題目大意
有一個大小為n的數(shù)列a,你可以進行最多2*n次查詢
對于每次查詢,你要給出一個大小為n的數(shù)列b,ci=ai+bic_i=a_i+b_ici?=ai?+bi?,題目會回答c中出現(xiàn)次數(shù)大于2的數(shù)的最早出現(xiàn)位置
現(xiàn)在讓你得出a數(shù)組
解題思路
可以把b數(shù)組的前n-1位放1,最后一位放n,每次減1,當找到第一個不為0的查詢時,就是an+bn=n+1a_n+b_n=n+1an?+bn?=n+1,這樣就得出了最后一位,最多查詢n次
然后可以通過最后一位對所有數(shù)字進行對比,就可以再n次查詢內(nèi)求出其他數(shù)
code
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 10000 using namespace std; int n,g,now,num,a[N]; int main() {scanf("%d",&n);g=0;now=n;while(!g&&now>1){//得出第一位putchar('?');for(int i=1;i<n;++i)printf(" 1");printf(" %d\n",now);fflush(stdout);scanf("%d",&g);if(g)break;now--;}if(now==1)now=1;num=n+1-now;a[n]=num;for(int i=1;i<num;++i){//和每一位比較putchar('?');for(int j=1;j<n;++j)printf(" %d",num-i+1);printf(" %d\n",1);fflush(stdout);scanf("%d",&g);a[g]=i;}for(int i=num+1;i<=n;++i){putchar('?');for(int j=1;j<n;++j)printf(" %d",n-(i-num));printf(" %d\n",n);fflush(stdout);scanf("%d",&g);a[g]=i;}putchar('!');for(int i=1;i<=n;++i)printf(" %d",a[i]);return 0; }總結
以上是生活随笔為你收集整理的【交互】Omkar and the Meaning of Life(CF-1586D)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【启发式合并】【dfs】树数树(nowc
- 下一篇: _里面怎么加入图片地址()