C. Guess the Array——(交互题+数论)

问题

C++一定不要开关闭同步,C++可以自动缓冲。不需要flush。否则ILE

总结

交互题,我很难受的一种题,可能做的太少,看着就脑壳疼。
我问——>机器答
最后:我问完了,就可以知道结果了,就输出

一般情况
系统:给一个模型:
自己:最多q次询问
系统:q次回答
自己:查询结束,我们需要的结果

算法核心

询问1-(2<=i<=n),总共n-1次,然后再询问一次2-3,我们就能知道a1的和,然后所有都由解了。

题意

系统给一个n,然后最多n次人为询问a[i]和a[j]的和,系统对于你的每次询问回答一个a[i]+a[j],然后自己构造一个数组a满足上述所有情况。0<a[i]<=1e5

题目链接

//#pragma GCC optimize(2)
//#pragma GCC target ("sse4")
#include<bits/stdc++.h>
//typedef long long ll;
#define ull       unsigned long long
#define int       long long
#define F           first
#define S           second
#define endl        "\n"//<<flush
#define eps         1e-6
#define base        131
#define lowbit(x)   (x&(-x))
#define PI          acos(-1.0)
#define inf         0x3f3f3f3f
#define MAXN        0x7fffffff
#define INF         0x3f3f3f3f3f3f3f3f
#define ferma(a,b)  pow(a,b-2)
#define mod(x)      (x%mod+mod)%mod
#define pb          push_back
#define decimal(x)  cout << fixed << setprecision(x);
#define all(x)      x.begin(),x.end()
#define memset(a,b) memset(a,b,sizeof(a));
#define IOS         ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
void file()
{
#ifdef ONLINE_JUDGE
#else
    freopen("D:/LSNU/codeforces/duipai/data.txt","r",stdin);
    //  freopen("D:/LSNU/codeforces/duipai/WA.txt","w",stdout);
#endif
}
const int N=5e3+5;
int a[N];
signed main()
{
   // IOS;
    file();
    int n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        cout<<"? 1 "<<i<<endl;
        cin>>a[i];
    }
    cout<<"? 2 3"<<endl;
    cin>>a[1];
    vector<int>ans;
    int a1=(a[2]+a[3]-a[1])/2;
    ans.pb(a1);
    for(int i=2;i<=n;i++)
        ans.pb(a[i]-a1);
    cout<<"! ";
    for(auto it:ans)
        cout<<it<<" ";





    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章