CF1270D Strange Device

Posted wangyiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1270D Strange Device相关的知识,希望对你有一定的参考价值。

思路:

对数组的前k + 1个元素询问k + 1次,结果会出现两个数字,分别是第m大的数和第m + 1大的数。并且,第m + 1大的数将出现m次,第m大的数将出现k + 1 - m次。因此,统计较大的那个数出现的次数即是答案。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int n, k;
 6     cin >> n >> k;
 7     set<int> st;
 8     for (int i = 1; i <= k + 1; i++) st.insert(i);
 9     int x, p;
10     map<int, int> mp;
11     for (int i = 1; i <= k + 1; i++)
12     {
13         if (i > 1) st.insert(i - 1);
14         st.erase(i);
15         cout << "? ";
16         for (auto it: st) cout << it << " ";
17         cout << endl;
18         cout.flush();
19         cin >> x >> p;
20         mp[p]++;
21     }
22     cout << "! " << mp.rbegin()->second << endl;
23     return 0;
24 }

以上是关于CF1270D Strange Device的主要内容,如果未能解决你的问题,请参考以下文章

CF1383E Strange Operation

CF 873C Strange Game On Matrix(贪心)

题解 CF1383E Strange Operation

cf842d Vitya and Strange Lesson

[CF1539F]Strange Array

题解 CF1539F Strange Array