C. Chocolate Bunny(思维+规律)
生活随笔
收集整理的這篇文章主要介紹了
C. Chocolate Bunny(思维+规律)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://codeforces.com/contest/1407/problem/C
題意:交互題,每次最多詢問i,j的pimodpj的值,問最后這個長度為n的排列是什么。
首先考慮到題目給的最多2*n次。開始想的是用第一個數和后面一個數每次對調比較剛好2*n個,但是發現在處理有些模數是相同但是有倍數的時候不好處理。
正解:i和j前后互相Mod。如果ai mod aj>aj mod ai,那么ai比aj小,直接可以確定ai=aimodaj。如果ai mod aj> aj mod ai的話,后面較小的aj就確定了,此時這個較大的ai 還不能確定,需要在后面繼續找數字比較,如果找完了也沒有,那他就是最大的。
#include<iostream> #include<vector> #include<queue> #include<cstring> #include<cmath> #include<map> #include<set> #include<cstdio> #include<algorithm> #define debug(a) cout<<#a<<"="<<a<<endl; using namespace std; const int maxn=1e4+100; typedef LL LL; LL a[maxn]; LL ask(LL x,LL y){cout<<"? "<<x<<" "<<y<<endl;LL sum;cin>>sum;return sum; } int main(void) {// cin.tie(0);std::ios::sync_with_stdio(false);LL n;cin>>n;LL cur=1;for(LL i=2;i<=n;i++){LL l=ask(cur,i);LL r=ask(i,cur);if(l<r){a[i]=r; }else{a[cur]=l;cur=i;}}a[cur]=n;cout<<"!";for(LL i=1;i<=n;i++) cout<<" "<<a[i];cout<<endl; return 0; }?
總結
以上是生活随笔為你收集整理的C. Chocolate Bunny(思维+规律)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB+GUI:手动修改曲线中的点
- 下一篇: ZYNQ上无DDR加载应用