題目鏈接:http://acm.timus.ru/PRoblem.aspx?space=1&num=2063 題意:只輸入一個m,表示共進行m輪游戲,每輪游戲都會提供給你一個只含有01的字符串,第一場游戲字符串長度為2,第二場尾3……輸出? x y表示x位置和y位置的元素交換,! x y表示你認為x位置和y位置的元素相等(正確率要在80%以上) 解析:題目意思相當于你輸出指令交換這個字符串里的元素,并猜交換后那兩個位置的元素相等,那么我們直接對這個字符串進行排序,然后猜相鄰的元素相等就好,這樣猜的正確率比較高
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <ctime>using namespace std;const int maxn = 2*1e5+100;int m;int main(){ scanf("%d",&m); srand(0); for(int n = 2;n<=m+1;n++) { for(int j=2;j<=n;j++) { for(int k=1;k<j;k++) printf("? %d %d/n",j,k); } int ans = rand()%(n-1); printf("! %d %d/n",ans+1,ans+2); } return 0;}新聞熱點
疑難解答