CF1425F Flamingoes of Mystery 题解

题目传送门

前置知识

前缀和 & 差分

解法

\(sum_k=\sum\limits_{i=1}^{k} a_k\)。考虑分别输入 \(sum_2 \sim sum_n\),故可以由于差分知识得到 \(a_i=sum_i-sum_{i-1}(3 \le i \le n)\),接着输入 \(a_2+a_3\) 的值从而求出 \(a_2=sum_3-a_3,a_1=sum_2-a_2\)

同时因为是交互题,记得清空缓冲区。 C++ 可以使用 fflush(stdout); 进行清空缓冲区。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define sort stable_sort 
#define endl '\n'
int sum[2001],a[2001];
int main()
{
    int n,i,num;
    cin>>n;
    cout<<"? 1 2"<<endl;
    fflush(stdout);
    cin>>sum[2];
    for(i=3;i<=n;i++)
    {
        cout<<"? 1 "<<i<<endl;
        fflush(stdout);
        cin>>sum[i];
        a[i]=sum[i]-sum[i-1];
    }
    cout<<"? 2 3"<<endl;
    fflush(stdout);
    cin>>num;
    a[2]=num-a[3];
    a[1]=sum[2]-a[2];
    cout<<"! ";
    for(i=1;i<=n;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}
posted @ 2023-09-29 16:59  hzoi_Shadow  阅读(9)  评论(0编辑  收藏  举报
扩大
缩小