• 牛客练习赛115 A Mountain sequence


    题目:

    样例:

    输入
    1. 3
    2. 5
    3. 1 2 3 4 5
    4. 3
    5. 3 3 3
    6. 3
    7. 1 2 1

    输出
    16
    1
    3

    思路:

            依据题意,再看数据范围,可以知道暴力肯定是不可能了,然后通过题目意思,我们可以排列模拟一下,这里排列所得结果,联系上我们数学的排列组合知识点可以知道,这个山峰序列,我们排列的时候是围绕 “山峰” 来进行排列,即围绕最大的数值来进行排列,而当出现多个最大值的时候,我们必须将多个最大值绑定在一块,通过排列得知,我们排列左边是一个结果,排列一样的右边,也是一种结果,所以有 (排列个数 + 1)这里的 +1 是排列右边的结果,相当于镜面翻转。

    其次,答案中至少有一种结果,即ans = 1,因为直接 sort 排序一遍,就是一个山峰序列,然后当我们记录的 (排列个数 + 1)就有最终答案 ans = ans * (排列个数 + 1) % MOD 这里注意一个条件就是我们的山峰序列是围绕的,所以不用算进 ans = ans * (排列个数 + 1) % MOD

    例子1: 

     [1 , 2 ]   

    ans = 1   

    r[1] = 1

    r[2] = 1
    ans = ans * (r[1] + 1) % MOD = 2

    即答案只有 2 种分别是  [1 , 2 ]   [2, 1 ]   

    代码详解如下:

    1. #include
    2. #include
    3. #define endl '\n'
    4. #define x first
    5. #define y second
    6. #define int long long
    7. #define YES puts("YES")
    8. #define NO puts("NO")
    9. #define umap unordered_map
    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 MOD = 998244353;
    14. int n; // 数组大小
    15. inline void solve()
    16. {
    17. umap<int,int>r; // 记录元素个数
    18. int ans = 1; // 答案最终结果
    19. int maxs = -1; // 取出 峰顶值 即 最大值
    20. cin >> n;
    21. for(int i = 0,x;i < n;++i)
    22. {
    23. cin >> x;
    24. ++r[x]; // 统计元素个数
    25. maxs = max(maxs,x); // 寻找 峰顶值
    26. }
    27. // 开始循环乘上每一种排列结果, 除去峰顶值的计算
    28. for(auto i : r) if(i.x != maxs) ans = ans * (i.y + 1) % MOD;
    29. // 输出答案
    30. cout << ans << endl;
    31. }
    32. signed main()
    33. {
    34. // freopen("a.txt", "r", stdin);
    35. ___G;
    36. int _t = 1;
    37. cin >> _t;
    38. while (_t--)
    39. {
    40. solve();
    41. }
    42. return 0;
    43. }

    最后提交:

  • 相关阅读:
    Verilog HDL语言要素
    【代码随想录算法训练营】第49天 | 第九章 动态规划(十)+ 复习第20天 第六章 二叉树(五)
    springboot整合Redis后间歇性io.lettuce.core.RedisCommandTimeoutException
    本地服务器设置静态ip方法与原理
    Kafka的基础架构
    nacos配置管理
    java网吧会员计费管理系统springboot+vue
    学生个人博客网页设计作品 学生个人网页模板 个人网页制作 HTML学生个人网站作业设计
    Linear Model(Exhaustive method 穷举法)
    Mysql 数据备份详解
  • 原文地址:https://blog.csdn.net/hacker_51/article/details/132776382