日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Strange Shuffle CodeForces - 1471E(交互题)

發(fā)布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Strange Shuffle CodeForces - 1471E(交互题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

交互題

這類型不同于普通的題。
可以理解為有個問題需要你解決,你通過輸入某些東西表示你要問系統(tǒng)的問題,這時系統(tǒng)會回答你的問題。在代碼中的回答方式就是會輸入某個東西就是系統(tǒng)給你的答案,通過這些信息你可以得到問題的解你是不可以自己測試的,只能提交給系統(tǒng)測試。
有個東西需要用到C++中的fflush(stdout);,這個東西是用來清空輸出緩存區(qū)的因為你一直提問,一直輸出,就需要清空輸出緩存區(qū)。不然就有一些異常。
簡單的理解成你在和出題人交互,你問一個問題,他回一個問題,最終你根據(jù)他的回答確定答案

題意:

一個環(huán),初始每個數(shù)都是k ,每一秒結(jié)束每個數(shù)會將自己一半給右邊(向上取整),另外一半(向下取整)給左邊。
有一個數(shù)很特殊,他會把所有數(shù)給右邊。

每次詢問可以詢問當(dāng)前一個數(shù)的值
1e5個數(shù),最多1000次詢問,求這個特殊的數(shù)位置。

題解:

第一次做交互題
參考題解
通過打表可以得到:
特殊數(shù)永遠都是k
且第x 秒的時候,特殊數(shù)左邊x 數(shù)會小于k ,右邊x 個數(shù)會大于k 。
也就是沒過一秒,異常區(qū)域的左右就擴大一個單位,直到已達到左右邊界為止
我們從第一個點開始詢問,第i次詢問后將當(dāng)前點加上i,只要遇到不等于k的點說明就進入了異常區(qū)域,如果返回值大于k,說明特殊點在左邊,一直往左遍歷直到遇到等于k的點就好了。如果返回值小于k,說明在右邊,就一直往右遍歷直到找到k
最多找500次就完事了

代碼:

#include <cstdio> #include <cstring> #include <algorithm>using namespace std;typedef long long ll;const int maxn = 5e5 + 7;int que(int x) {printf("? %d\n",x);fflush(stdout);int res;scanf("%d",&res);return res; }int main() {int n,k;scanf("%d%d",&n,&k);que(1);int cur = 1;for(int i = 1;i <= n;i++) {cur = (cur + i - 1) % n + 1;int res = que(cur);if(res != k) {if(res > k) {while(true) {cur = (cur == 1 ? n : cur - 1);res = que(cur);if(res == k) {printf("! %d\n",cur);fflush(stdout);return 0;}}} else {while(true) {cur = (cur == n ? 1 : cur + 1);res = que(cur);if(res == k) {printf("! %d\n",cur);fflush(stdout);return 0;}}}}}return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Strange Shuffle CodeForces - 1471E(交互题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。