#46. 隱形史萊姆探測
隱形史萊姆探測
隱形史萊姆探測
題目描述
你是一個史萊姆農場的實習生。農場裡有 個籠子排成一列(編號從 到 )。 昨天晚上農場發生了魔力外洩,導致其中 隻史萊姆變成了隱形狀態。 空籠子依然是空的,但你肉眼看不出哪些籠子裡有隱形史萊姆。
不過你手邊有一台區間探測儀。 每次你可以設定一個探測區間 ,探測儀會掃描從第 個籠子到第 個籠子,並且精準地告訴你這個區間內總共有幾隻隱形史萊姆。
你的任務是:用最少的探測次數,找出所有隱形史萊姆所在的籠子編號。
互動方式
這是一道互動題。程式開始時,請從標準輸入讀取一個整數 ,代表總籠子數量。(注意:除了一些特定的子任務外,你一開始不會知道 是多少)。
你可以透過標準輸出發起詢問,格式如下:
? L R
(代表你要探測從 到 的區間。必須滿足 )
注意輸出後要cout << endl;不然他會死掉。
發出詢問後,請從標準輸入讀取一個整數 ,代表該區間內隱形史萊姆的數量。
當你確信找出了所有有隱形史萊姆的籠子時,請輸出:
! K ans_1 ans_2 ... ans_K
(先輸出一個驚嘆號 !,接著輸出一個整數 代表你找到的數量,最後輸出所有有隱形史萊姆的籠子編號,編號必須由小到大排序,以空白分隔),然後立刻結束程式。
子任務與配分 (共 27 個測試點)
你的詢問次數不能超過該測資的上限 。
-
【%】(Test 1~3) , 未知。。
-
【%】(Test 4~7) 。保證 。。
-
【%】(Test 8~11) 。保證 。。
-
【%】(Test 12~16) ,。。
-
【%】(Test 17~21) ,。。
-
【%】(Test 22~26) ,。。
可以拿到10分的程式:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; int m; vector<int>ve; for(int i = 1; i<= n; i++){ cout <<"? " << i << " " << i; cout << endl; cin >> m; if(m == 1){ ve.push_back(i); } } cout <<"! " << ve.size(); for(int i = 0; i < ve.size(); i++){ cout << " " << ve[i]; } cout << endl; }