• 牛客练习赛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. }

    最后提交:

  • 相关阅读:
    算法的时间复杂度
    Java的堆内存和栈内存
    Python学习 第四章 面向对象设计
    ZCC5429 异步升压芯片
    ElasticSearch - 基于 拼音分词器 和 IK分词器 模拟实现“百度”搜索框自动补全功能
    73-Java的Collection集合:概述、体系特点、常用API、遍历方式、存储自定义类型的对象
    QT—动态属性系统
    vscode windows mingw配置
    gitLab批量下载有权限的项目
    ROS1云课→12图像可视化
  • 原文地址:https://blog.csdn.net/hacker_51/article/details/132776382