• 两日总结十二


    比赛总结:

    杭电杯7

    赛中:

    赛后补题:

    Triangle Game

    很傻逼的一个题目就是没有想到,要是补了牛客的蔚蓝杯7的话就很容易猜到结论了。

    有了结论代码就是几行而已!!!

     Problem - 7216

     牛客的博弈题目:

    登录—专业IT笔试面试备考平台_牛客网 Great Party,这个还用了前缀和分块,有点抽象,有点难理解。

    有点莫队,然后就是排序时要分块,否则莫队跳动太大还是会T。

    杭电杯8

    赛中:

     赛后补题:

    Ironforge        

    Problem - 7224

    这个题目与答案还差一点,主要是从后面更新之后,然后再从前面更新的时候有的变动会影响后面更新出来的答案,然后就是这里卡了,没有想到直接while消除影响为止,没有想到时间竟然够够的!!!!

     

    Darnassus

    Problem - 7226

    这个题目主要就是想到surt(n-1),想到就好写了,但是这个题目实在是太卡时间了!!!

    第一种:

    1. #include
    2. #define OST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    3. #define endl "\n"
    4. using namespace std;
    5. const int N = 50000 + 5;
    6. int n;
    7. int a[N], b[N], f[N];
    8. struct node {
    9. int x, y, v;
    10. };
    11. bool cmp(node x1, node x2) { return x1.v < x2.v; }
    12. int find(int x) {
    13. if (x == f[x]) return x;
    14. return f[x] = find(f[x]);
    15. }
    16. void solve() {
    17. cin >> n;
    18. for (int i = 1; i <= n; i++) cin >> a[i], b[a[i]] = i, f[i] = i;
    19. vector res;
    20. int len = sqrt(n - 1);
    21. for (int i = 1; i < n; i++) {
    22. int maxn = n - 1, idx = i + 1;
    23. for (int j = i + 1; j <= min(n, i + len); j++) {
    24. int tmp = (j - i) * abs(a[j] - a[i]);
    25. if (tmp < maxn) {
    26. maxn = tmp;
    27. idx = j;
    28. }
    29. }
    30. res.push_back({i, idx, maxn});
    31. }
    32. for (int i = 1; i < n; i++) {
    33. int maxn = n - 1, idx = i + 1;
    34. for (int j = i + 1; j <= min(n, i + len); j++) {
    35. int tmp = (j - i) * abs(b[j] - b[i]);
    36. if (tmp < maxn) {
    37. maxn = tmp;
    38. idx = j;
    39. }
    40. }
    41. res.push_back({b[i], b[idx], maxn});
    42. }
    43. // cout << res.size() << endl;
    44. sort(res.begin(), res.end(), cmp);
    45. long long sum = 0, cnt = 0;
    46. for (int i = 0; i < (int) res.size(); i++) {
    47. int fx = find(res[i].x);
    48. int fy = find(res[i].y);
    49. if (fx == fy) { continue; }
    50. f[fx] = fy;
    51. cnt++;
    52. sum += res[i].v;
    53. if (cnt == n) { break; }
    54. }
    55. cout << sum << endl;
    56. }
    57. signed main() {
    58. OST;
    59. int T = 1;
    60. cin >> T;
    61. while (T--) { solve(); }
    62. return 0;
    63. }

    第二种:

    1. #include
    2. #define OST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    3. #define endl "\n"
    4. using namespace std;
    5. const int N = 50000 + 5;
    6. int n;
    7. int a[N], b[N], f[N];
    8. struct node {
    9. int x, y, v;
    10. };
    11. vector res[N];
    12. // bool cmp(node x1, node x2) { return x1.v < x2.v; }
    13. int find(int x) {
    14. if (x == f[x]) return x;
    15. return f[x] = find(f[x]);
    16. }
    17. void solve() {
    18. cin >> n;
    19. for (int i = 1; i <= n; i++) cin >> a[i], b[a[i]] = i, res[i].clear(), f[i] = i;
    20. int len = sqrt(n);
    21. for (int i = 1; i <= n; i++) {
    22. int maxn = n;
    23. for (int j = i + 1; j <= min(n, i + len); j++) {
    24. int tmp = (j - i) * abs(a[j] - a[i]);
    25. if (tmp < maxn) { res[tmp].push_back({i, j, tmp}); }
    26. tmp = (j - i) * abs(b[j] - b[i]);
    27. if (tmp < maxn) { res[tmp].push_back({b[i], b[j], tmp}); }
    28. }
    29. }
    30. // cout << res.size() << endl;
    31. long long sum = 0, cnt = 1;
    32. for (int i = 1; i < n; i++) {
    33. for (auto x : res[i]) {
    34. int fx = find(x.x);
    35. int fy = find(x.y);
    36. if (fx == fy) continue;
    37. f[fx] = fy;
    38. sum += x.v;
    39. cnt++;
    40. if (cnt == n) break;
    41. }
    42. if (cnt == n) break;
    43. }
    44. cout << sum << endl;
    45. }
    46. signed main() {
    47. OST;
    48. int T = 1;
    49. cin >> T;
    50. while (T--) { solve(); }
    51. return 0;
    52. }

    最后才过的!!!

    1. #include
    2. #define OST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    3. #define endl "\n"
    4. using namespace std;
    5. const int N = 50000 + 5;
    6. int n;
    7. int a[N], b[N], f[N];
    8. struct node {
    9. int x, y, v;
    10. };
    11. vector res[N];
    12. // bool cmp(node x1, node x2) { return x1.v < x2.v; }
    13. struct node2 {
    14. int x, y, nxt;
    15. } e[460 * N];
    16. int eCnt, first[N];
    17. void add(int x, int y, int w) {
    18. e[++eCnt].x = x;
    19. e[eCnt].y = y;
    20. e[eCnt].nxt = first[w];
    21. first[w] = eCnt;
    22. }
    23. int find(int x) {
    24. if (x == f[x]) return x;
    25. return f[x] = find(f[x]);
    26. }
    27. void solve() {
    28. cin >> n;
    29. for (int i = 1; i <= n; i++) cin >> a[i], b[a[i]] = i, first[i] = 0, f[i] = i;
    30. eCnt = 0;
    31. int len = sqrt(n);
    32. for (int i = 1; i <= n; i++) {
    33. int maxn = n;
    34. for (int j = i + 1; j <= min(n, i + len); j++) {
    35. int tmp = (j - i) * abs(a[j] - a[i]);
    36. // if (tmp < maxn) { res[tmp].push_back({i, j, tmp}); }
    37. if (tmp < maxn) add(i, j, tmp);
    38. tmp = (j - i) * abs(b[j] - b[i]);
    39. // if (tmp < maxn) { res[tmp].push_back({b[i], b[j], tmp}); }
    40. if (tmp < maxn) add(b[i], b[j], tmp);
    41. }
    42. }
    43. // cout << res.size() << endl;
    44. long long sum = 0, cnt = 1;
    45. // for (int i = 1; i < n; i++) {
    46. // for (auto x : res[i]) {
    47. // int fx = find(x.x);
    48. // int fy = find(x.y);
    49. // if (fx == fy) continue;
    50. // f[fx] = fy;
    51. // sum += x.v;
    52. // cnt++;
    53. // if (cnt == n) break;
    54. // }
    55. // }
    56. for (int i = 1; i < n; i++) {
    57. for (int j = first[i]; j; j = e[j].nxt) {
    58. int fx = find(e[j].x);
    59. int fy = find(e[j].y);
    60. if (fx == fy) continue;
    61. f[fx] = fy;
    62. cnt++;
    63. sum += i;
    64. if (cnt == n) break;
    65. }
    66. if (cnt == n) break;
    67. }
    68. cout << sum << endl;
    69. }
    70. signed main() {
    71. OST;
    72. int T = 1;
    73. cin >> T;
    74. while (T--) { solve(); }
    75. return 0;
    76. }

    CF刷题:

     

  • 相关阅读:
    java设计模式之命令设计模式的前世今生
    《深度学习进阶 自然语言处理》第四章:Embedding层和负采样介绍
    Linux下配置ip地址四种方法
    mysql查询排名
    【技术美术知识储备】PC和手机的主流图形API介绍
    数据库系列之MySQL中Join语句优化问题
    银行信创化仍需考虑生态建设
    C++设计模式——Bridge模式(下)
    什么是微波通信?微波信号源如何去选择?------TFN TG 115
    Java基于springboot+vue的汽车饰品销售购物商城系统 前后端分离
  • 原文地址:https://blog.csdn.net/YSJ_1224/article/details/126294114