• 两日总结十三


    比赛总结:

    牛客54,这场比赛卡在线段树的那个板子有问题了,主要还是没有仔细考虑,尽量用最简单的方法最好。

     然后就是重新改好了线段树的板子。

    1. namespace SegmentTree {
    2. struct node {
    3. int sum, l, r, lazy;
    4. } tr[4 * N];
    5. void up(int k) { tr[k].sum = tr[k << 1].sum + tr[k << 1 | 1].sum; }
    6. void down(int k) {
    7. if (tr[k].lazy == 0) return;
    8. tr[k << 1].lazy += tr[k].lazy, tr[k << 1 | 1].lazy += tr[k].lazy;
    9. tr[k << 1].sum += tr[k].lazy * (tr[k << 1].r - tr[k << 1].l + 1);
    10. tr[k << 1 | 1].sum += tr[k].lazy * (tr[k << 1 | 1].r - tr[k << 1 | 1].l + 1);
    11. tr[k].lazy = 0;
    12. }
    13. // 建立
    14. void build(int k, int l, int r) {
    15. tr[k].l = l, tr[k].r = r;
    16. if (l == r) {
    17. tr[k].sum = 0;
    18. tr[k].lazy = 0;
    19. return;
    20. }
    21. int mid = (l + r) >> 1;
    22. build(k << 1, l, mid);
    23. build(k << 1 | 1, mid + 1, r);
    24. up(k);
    25. }
    26. //单点修改, 将x的值修改成v
    27. void modify(int k, int x, int v) {
    28. if (tr[k].l == tr[k].r) {
    29. tr[k].sum = v;
    30. return;
    31. }
    32. int mid = (tr[k].l + tr[k].r) >> 1;
    33. if (x <= mid)
    34. modify(k << 1, tr[k].l, mid);
    35. else
    36. modify(k << 1 | 1, mid + 1, tr[k].r);
    37. up(k);
    38. }
    39. // 区间修改
    40. void modify2(int k, int l, int r, int v) {
    41. if (tr[k].l >= l && tr[k].r <= r) {
    42. tr[k].lazy += v;
    43. tr[k].sum += v * (tr[k].r - tr[k].l + 1);
    44. return;
    45. }
    46. down(k);
    47. int mid = (tr[k].l + tr[k].r) >> 1;
    48. if (l <= mid) { modify2(k << 1, l, r, v); }
    49. if (r > mid) { modify2(k << 1 | 1, l, r, v); }
    50. }
    51. //区间查询
    52. void query(int k, int l, int r) {
    53. if (tr[k].l >= l && tr[k].r <= r) {
    54. res1 += tr[k].sum;
    55. return;
    56. }
    57. down(k);
    58. int mid = (tr[k].l + tr[k].r) >> 1;
    59. if (l <= mid) { query(k << 1, l, r); }
    60. if (r > mid) { query(k << 1 | 1, l, r); }
    61. }
    62. } // namespace SegmentTree

    然后就是这补题,BFS+ KMP也可用DP来写,但是我的BFS+KMP小问题比较多,改了好久才搞好。主要还是出是化的问题,没有太注意。代码能力有待加强。。。

     

    登录—专业IT笔试面试备考平台_牛客网

     

    1. #include
    2. using namespace std;
    3. struct node {
    4. int x, y, v, res;
    5. };
    6. int fx[] = {0, 1};
    7. int fy[] = {1, 0};
    8. int nxt[105];
    9. int n, m, ans;
    10. int vis[105][105];
    11. string s[105], e;
    12. bool check(int x, int y) {
    13. if (x < 0 || x >= n || y < 0 || y >= m) return 0;
    14. return 1;
    15. }
    16. void get() {
    17. nxt[0] = -1;
    18. int i = 0, j = -1;
    19. while (i < (int) e.size() && j < (int) e.size()) {
    20. if (j == -1 || e[i] == e[j]) {
    21. nxt[++i] = ++j;
    22. } else {
    23. j = nxt[j];
    24. }
    25. }
    26. }
    27. void BFS() {
    28. int len = e.size();
    29. queue q;
    30. if (s[0][0] == e[0]) {
    31. q.push({0, 0, 1, 0});
    32. vis[0][0] = 1;
    33. } else {
    34. q.push({0, 0, 0, 0});
    35. vis[0][0] = 0;
    36. }
    37. while (q.size()) {
    38. node now = q.front();
    39. q.pop();
    40. // cout << now.x << " " << now.y << " " << now.v << " " << now.res << endl;
    41. if (now.v == len) {
    42. now.v = 0;
    43. now.res++;
    44. }
    45. for (int i = 0; i <= 1; i++) {
    46. int xx = now.x + fx[i], yy = now.y + fy[i];
    47. int idx = now.v;
    48. if (check(xx, yy)) {
    49. while (true) {
    50. if (idx == -1 || s[xx][yy] == e[idx]) {
    51. idx++;
    52. break;
    53. } else {
    54. idx = nxt[idx];
    55. }
    56. }
    57. if (vis[xx][yy] < idx + now.res * len) {
    58. vis[xx][yy] = idx + now.res * len;
    59. q.push({xx, yy, idx, now.res});
    60. }
    61. }
    62. }
    63. }
    64. }
    65. int main() {
    66. cin >> n >> m;
    67. cin >> e;
    68. for (int i = 0; i < n; i++) cin >> s[i];
    69. memset(vis, -1, sizeof vis);
    70. get();
    71. BFS();
    72. cout << vis[n - 1][m - 1] / (e.size()) << endl;
    73. return 0;
    74. }

    然后就是下面一个构造题目,不知道哪里有问题,真的麻烦!!!等会CF打完再看看改一下。

     然后就是HX出的蔚蓝杯8,是真的难!!!!只写了一个签到题目。

     

    然后就是CF1700分的题目练习。

  • 相关阅读:
    LiveGBS流媒体平台GB/T28181功能-报警预案配置告警触发报警时截图及录像摄像头通过GB28181上报报警
    PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]
    Elasticsearch:wildcard - 通配符搜索
    python如何求两字典的公共区域
    Spring cloud alibaba——Senta(二)
    Unity 中 TextMesh Pro 认识学习
    Mybatis常用核心配置文件概述
    【二十】分割Segmentation_Threshold——binary_threhold()算子
    企业私域流量带给企业的四个价值
    使用C++界面框架ImGUI开发一个简单程序
  • 原文地址:https://blog.csdn.net/YSJ_1224/article/details/126324941