题意:
n个人,一部分说谎一部分说实话,l[i]表示第i个人认为至少l[i]个人说谎,求有多少人说谎,若无法求出输出-1.
分析:
枚举可能存在的说谎人数,每次都遍历数组,如果l[i]大于说谎的人数,说明第i个人说谎,计算每次说谎的人数,如果说谎的人恰好等于当前枚举的说谎人数,则证明找到了解。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
void solve()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int ans=-1;
for(int i=0;i<=n;i++)
{
int cnt=0;
for(int j=0;j<n;j++)
{
if(a[j]>i) cnt++;
}
if(cnt==i)
{
ans=cnt;
break;
}
}
cout<<ans<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}