• A. Trust Nobody


    题目:样例:

    输入
    1. 7
    2. 2
    3. 1 2
    4. 2
    5. 2 2
    6. 2
    7. 0 0
    8. 1
    9. 1
    10. 1
    11. 0
    12. 5
    13. 5 5 3 3 5
    14. 6
    15. 5 3 6 6 3 5

    输出
    1
    -1
    0
    -1
    0
    3
    4

    思路:

            这道题也是个思维题,关键在于这种问题是有多个答案的,所以我们输出其中一种答案即可,也可能无法确定的,就要输出 -1。

            题目意思是,给出 n 个人,n 个人说有 aj 个人撒谎,问可以确定的可能撒谎人数是多少,如果无法确定,输出 -1。

            我们假设共有 n 种情况,分别可能有 i (0 <= i <= n) 个人撒谎,然后判断哪一个可以确定是真话了的,输出该答案即可。

            而重要的是 判断哪一个可以确定是真话的条件是,当前这个人表示的说谎人数和我们假设 i 个人说谎人数的比较,即当 a[j]  <= i 的时候,这个人有可能是真话。

    代码详解如下:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #define endl '\n'
    6. #define YES puts("YES")
    7. #define NO puts("NO")
    8. #define umap unordered_map
    9. #define All(x) x.begin(),x.end()
    10. #pragma GCC optimize(3,"Ofast","inline")
    11. #define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
    12. using namespace std;
    13. const int N = 2e5 + 10;
    14. inline void solve()
    15. {
    16. int a[N]; // 存储说话人 告诉我们的撒谎人数
    17. int n; // n 个人
    18. cin >> n;
    19. for(int i = 0;i < n;++i)
    20. {
    21. // 存储说话人 说的撒谎人数
    22. cin >> a[i];
    23. }
    24. // 开始枚举情况,假设可能有 i 人说谎
    25. for(int i = 0;i <= n;++i)
    26. {
    27. int cnt = 0; // 存储说真话的人数
    28. // 枚举每个人说话,比较是否符合我们的情况
    29. for(int j = 0;j < n;++j)
    30. {
    31. // 如果符合我们的情况,说真话人数累加
    32. // i >= a[j] 条件,表示 可能的 i 人说谎,而 j 号人说 有 a[j] 个人说慌,a[j] <= i
    33. // 即 a[j] 更接近答案一些,所以他有可能说的是真话的
    34. if(i >= a[j]) ++cnt;
    35. }
    36. // 如果说谎的人数等于了我们假设的情况
    37. // 那么输出该答案,有 i 个人说谎
    38. if(n - cnt == i)
    39. {
    40. cout << i << endl;
    41. return ;
    42. }
    43. }
    44. // 如果都不符合我们假设的情况,说明无法确定
    45. // 输出 -1
    46. cout << -1 << endl;
    47. }
    48. int main()
    49. {
    50. // freopen("a.txt", "r", stdin);
    51. ___G;
    52. int _t = 1;
    53. cin >> _t;
    54. while (_t--)
    55. {
    56. solve();
    57. }
    58. return 0;
    59. }

    最后提交:

  • 相关阅读:
    设计模式之--原型模式(深浅拷贝)
    Sentinel
    Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)
    基于文本相似度的康复量表ICF映射研究
    2022-04-10-Docker
    F#奇妙游(32):缺失数据集合的处理
    问题:合规电动自行车国家标准是() #学习方法#媒体#经验分享
    Java基于springboot+vue的儿童玩具销售购物网站 多商家
    Nodejs安装及常见问题
    Spring之IOC
  • 原文地址:https://blog.csdn.net/hacker_51/article/details/133381070