• W、X、Y


    W z学长的apex

    不等于180度的角的个数就是求转折点的个数

    而每个y(x)都是一元函数,按照公式每个一元函数的转折点为-\frac{b}{k}

    s(x)是若干y(x)的叠加,其中一个y(x)有转折点,在对应位置上s(x)也会有转折点

    所以所有y(x)函数中不重复的转折点的个数就是答案

    1. #include
    2. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    3. #define endl '\n'
    4. using namespace std;
    5. typedef pair<int, int> PII;
    6. typedef long long ll;
    7. typedef long double ld;
    8. int main()
    9. {
    10. IOS
    11. int _;
    12. cin >> _;
    13. mapint> mp;
    14. int ans = 0;
    15. while(_ --)
    16. {
    17. ld k, b;
    18. cin >> k >> b;
    19. if(k == 0)continue;
    20. b = -b;
    21. ld res = b / k;
    22. if(!mp[res])ans ++;
    23. mp[res] = 1;
    24. }
    25. cout << ans;
    26. return 0;
    27. }

    用到了map容器,没学过的可以去学一下,注意开long double,double会被卡精度。

    X - tmn学长的贪心

    一个小小的思维问题,我们想让差值尽可能的多,其实就是想一种策略:

    将a数组从大到小排序

    a1 a2 a3 ... an ,使a1 >= a2 >= a3 >= ... >= an 

    b对应位之上放1 2 3 .... n

    这样就可以保证差值不会重复,因为现在a数组是非递增的,b数组是递增的

    一个非递增的数组减一个递增的数组,想当然新的数组不会有重复的元素了

    解法不唯一,这是我提供的其中一种。

    1. #include
    2. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    3. #define endl '\n'
    4. using namespace std;
    5. typedef pair<int, int> PII;
    6. typedef long long ll;
    7. typedef long double ld;
    8. const int N = 40010;
    9. PII a[N];
    10. int b[N];
    11. bool cmp(PII A, PII B)
    12. {
    13. return A.first > B.first;
    14. }
    15. void solve()
    16. {
    17. int n;
    18. cin >> n;
    19. for(int i = 1; i <= n; i ++)
    20. {
    21. int x;
    22. cin >> x;
    23. a[i] = {x, i};
    24. }
    25. sort(a + 1, a + 1 + n, cmp);
    26. for(int i = 1; i <= n; i ++)
    27. {
    28. int pos = a[i].second;
    29. b[pos] = i;
    30. }
    31. for(int i = 1; i <= n; i ++)cout << b[i] << ' ';
    32. cout << endl;
    33. }
    34. int main()
    35. {
    36. IOS
    37. int _;
    38. cin >> _;
    39. while(_ --)
    40. {
    41. solve();
    42. }
    43. return 0;
    44. }

    用到了自定义sort排序和pair数组

    Y - DP?贪心!

    也是一个思维问题:怎样让分的段尽可能多

    从前往后遍历,每到一个数就找前面有无能与它配对的数,如果有就组成一对,最后能产生的对儿数就是答案

    思路大概就是这样,对儿与对儿之间的那些数随便归到哪一对儿里去就行,确保每个数都有一个归属就行。

    1. #include
    2. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    3. #define endl '\n'
    4. using namespace std;
    5. typedef pair<int, int> PII;
    6. typedef long long ll;
    7. typedef long double ld;
    8. int main()
    9. {
    10. IOS
    11. vector ans;
    12. int n;
    13. cin >> n;
    14. map<int, int> lst;
    15. int r = 0;
    16. for(int i = 1; i <= n; i ++)
    17. {
    18. int x;
    19. cin >> x;
    20. if(lst[x] && lst[x] > r)
    21. {
    22. ans.push_back({lst[x], i});
    23. lst[x] = 0;
    24. r = i;
    25. }
    26. else lst[x] = i;
    27. }
    28. if(ans.size() == 0)cout << -1 << endl;
    29. else
    30. {
    31. cout << ans.size() << endl;
    32. if(ans.size() == 1)
    33. {
    34. cout << 1 << ' ' << n << endl;
    35. return 0;
    36. }
    37. for(int i = 0; i < ans.size(); i ++)
    38. {
    39. if(i == 0)
    40. {
    41. cout << 1 << ' ' << ans[i].second << endl;
    42. continue;
    43. }
    44. if(i == ans.size() - 1)
    45. {
    46. cout << ans[i - 1].second + 1 << ' ' << n << endl;
    47. continue;
    48. }
    49. cout << ans[i - 1].second + 1 << ' ' << ans[i].second << endl;
    50. }
    51. }
    52. return 0;
    53. }

  • 相关阅读:
    C++ - 类型转换
    设置共享文件夹在主机与本地VMware虚拟机之间传输文件
    LeetCode:318. 最大单词长度乘积(C++)
    Dubbo之多协议、多注册中心、多版本。
    北航投资携核心医疗获2023年度十佳投资案例
    手把手教你Nginx常用模块详解之ngx_http_rewrite_module(十)
    开发常用技巧(持续更新)
    Mac解压缩软件BetterZip免费版注册码下载
    Elixir学习笔记——进程(Processes)
    探索请求头中的UUID的不同版本:UUID1、UUID3、UUID4和UUID5
  • 原文地址:https://blog.csdn.net/a1695574118/article/details/133467019