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;
}

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