D 谁是说谎者
题面中有说“说谎组中至少有……位选手说谎了”
而我们看到输入描述的上一行里还有一句
“已知说谎组中至少有3位选手说谎了。你能侦破说谎选手的编号吗?”
再一看,说谎者一共有n+1位,而题目输入里只给出了n位说谎者
说明什么,第n+1位说谎者说的内容是“已知说谎组中至少有3位选手说谎了。”
那么显而易见了,题目里藏了一个说谎者,然后正常做题就可以了
void Aiden()
{
ll m, n, k, sum = 0, ans = 0, num = 0, mi = INF, ma = -INF, cnt = 0, x, y, z, len, t, l, r, cur;
string s1, s2;
cin >> n;
vector<ll> a(n + 2);
for (ll i = 1; i <= n; i++)
cin >> a[i];
a[n + 1] = 3;
for (ll cnt = 0; cnt <= n + 1; cnt++)
{
vector<ll> liars;
for (ll i = 1; i <= n + 1; i++)
{
if (cnt < a[i])
liars.push_back(i);
}
if (liars.size() == cnt)
{
cout << cnt;
for (auto x : liars)
cout << " " << x;
cout << endl;
return;
}
}
cout << -1 << endl;
}
时间复杂度O(n^2),比出题人的代码要优秀啊

京公网安备 11010502036488号