比赛链接:传送门

离金最近的一次?,lh大佬carry场。

Problem A. Copying Homework 00:17(+) Solved by Dancepted

签到,读题有点慢了。而且配置vscode花了点时间。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int a[];
  6. int main() {
  7. int n;
  8. cin >> n;
  9. for (int i = ; i <= n; i++) {
  10. scanf("%d", &a[i]);
  11. }
  12. for (int i = ; i <= n; i++) {
  13. printf("%d%c", n + - a[i], " \n"[i==n]);
  14. }
  15. return ;
  16. }

Problem C. Even Path 00:44(+) Solved by Dancepted

每个格子通过even path能到达的区域是一个矩形,预处理这个矩形的边界就ok。签到。

“NO”写成了“No”,WA1不算罚时开心死了。

  1. #include <bits/stdc++.h>
  2. #define N 100005
  3.  
  4. using namespace std;
  5.  
  6. int R[N], C[N];
  7. int l[N], r[N], u[N], d[N];
  8.  
  9. int main() {
  10. int n, q;
  11. cin >> n >> q;
  12. for (int i = ; i <= n; i++)
  13. scanf("%d", &R[i]);
  14. for (int i = ; i <= n; i++)
  15. scanf("%d", &C[i]);
  16. l[] = u[] = ;
  17. for (int i = ; i <= n; i++) {
  18. if (R[i]% == R[i-]%)
  19. u[i] = u[i - ];
  20. else
  21. u[i] = i;
  22. if (C[i]% == C[i-]%)
  23. l[i] = l[i - ];
  24. else
  25. l[i] = i;
  26. }
  27. r[n] = d[n] = n;
  28. for (int i = n - ; i >= ; i--) {
  29. if (R[i]% == R[i+]%)
  30. d[i] = d[i + ];
  31. else
  32. d[i] = i;
  33. if (C[i]% == C[i+]%)
  34. r[i] = r[i + ];
  35. else
  36. r[i] = i;
  37. }
  38. while (q--) {
  39. int ra, ca, rb, cb;
  40. scanf("%d%d%d%d", &ra, &ca, &rb, &cb);
  41. if (u[ra] <= rb && rb <= d[ra] && l[ca] <= cb && cb <= r[ca])
  42. puts("YES");
  43. else
  44. puts("NO");
  45. }
  46. return ;
  47. }

Problem H. Twin Buildings 01:03(-1) Solved by xk

xk说是sb题。。。qwq。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define forn(i, n) for(int i = 0; i < (n); i++)
  4. #define forab(i, a, b) for(int i = (a); i <= (b); i++)
  5. #define forba(i, b, a) for(int i = (b); i >= (a); i--)
  6. #define mst(array, Num, Kind, Count) memset(array, Num, sizeof(Kind) * (Count))
  7. #define mp(x, y) make_pair(x, y)
  8. #define fi first
  9. #define se second
  10. typedef long long ll;
  11. typedef double db;
  12. typedef pair<int, int> pii;
  13.  
  14. const int maxn = 1e5 + ;
  15.  
  16. pii a[maxn];
  17. int mxh[maxn];
  18.  
  19. int main()
  20. {
  21. int n;
  22. ios::sync_with_stdio(), cin.tie();
  23. cin >> n;
  24. ll ans = ;
  25. forn(i, n)
  26. {
  27. cin >> a[i].fi >> a[i].se;
  28. if(a[i].fi > a[i].se)
  29. swap(a[i].fi, a[i].se);
  30. ans = max(ans, (ll)a[i].fi * a[i].se);
  31. }
  32. sort(a, a + n);
  33. forba(i, n - , )
  34. {
  35. mxh[i - ] = max(mxh[i], a[i].se);
  36. ans = max(ans, (ll)a[i - ].fi * min(a[i - ].se, mxh[i - ]) * );
  37. }
  38. cout << ans / << (ans % ? ".5" : ".0") << endl;
  39. }

Problem K. Addition Robot 01:28(+) Solved by lh

lh一拍脑袋说这个tm好像可以区间合并,那不是线段树随便搞?于是K就被秒了。

具体地:

若左子树对应区间的A和B是:

$\begin{bmatrix}A_{l}&B_{l}\end{bmatrix} = \begin{bmatrix}A&B\end{bmatrix} * \begin{bmatrix}f_{AtoAl} & f_{AtoBl}\\ f_{BtoAl} & f_{BtoBl}\end{bmatrix}$

而右子树对应区间的A和B是:

$\begin{bmatrix}A_{r}&B_{r}\end{bmatrix} = \begin{bmatrix}A&B\end{bmatrix} * \begin{bmatrix}f_{AtoAr} & f_{AtoBr}\\ f_{BtoAr} & f_{BtoBr}\end{bmatrix}$

则合并后的区间对应的A和B是:

$\begin{bmatrix}A_{o}&B_{o}\end{bmatrix} = \begin{bmatrix}A&B\end{bmatrix} * \begin{bmatrix}f_{AtoAl} & f_{AtoBl}\\ f_{BtoAl} & f_{BtoBl}\end{bmatrix} * \begin{bmatrix}f_{AtoAr} & f_{AtoBr}\\ f_{BtoAr} & f_{BtoBr}\end{bmatrix}$

线段树每个节点维护4个系数。对于交换一个区间内的A和B,就是把系数AtoA和BtoA交换,AtoB和BtoB交换。合并的时候两个子区间的系数矩阵乘一下就行。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define INF 0x3f3f3f3f
  4. #define LLINF 0x3f3f3f3f3f3f3f3f
  5. #define lowbit(x) ((-x) & x)
  6. #define ffor(i, d, u) for (int i = (d); i <= (u); ++i)
  7. #define _ffor(i, u, d) for (int i = (u); i >= (d); --i)
  8. #define mst(array, Num, Kind, Count) memset(array, Num, sizeof(Kind) * (Count))
  9. #define mp(x, y) make_pair(x, y)
  10. #define fi first
  11. #define se second
  12. #define N 100005
  13. #define M 1000005
  14. typedef long long ll;
  15. typedef double db;
  16. typedef pair<ll, ll> pll;
  17. typedef pair<int, int> pii;
  18. typedef pair<db, db> pdd;
  19. const db PI = acos(-);
  20. const ll MO = 1e9 + ;
  21. const ll Inv2 = (MO + ) / ;
  22. const bool debug = true;
  23. template <typename T>
  24. inline void read(T &x)
  25. {
  26. x=;char c;T t=;while(((c=getchar())<''||c>'')&&c!='-');
  27. if(c=='-'){t=-;c=getchar();}do(x*=)+=(c-'');while((c=getchar())>=''&&c<='');x*=t;
  28. }
  29. template <typename T, typename... Args>
  30. inline void read(T &x, Args &... args)
  31. {
  32. read(x), read(args...);
  33. }
  34. template <typename T>
  35. inline void write(T x)
  36. {
  37. int len=;char c[];if(x<)putchar('-'),x*=(-);
  38. do{++len;c[len]=(x%)+'';}while(x/=);_ffor(i,len,)putchar(c[i]);
  39. }
  40. int n, q;
  41. char s[N];
  42. struct node
  43. {
  44. ll a, b, x, y;
  45. bool lazy;
  46. node operator * (const node &other)
  47. {
  48. node ans;
  49. ans.lazy = false;
  50. ans.a = (a * other.a % MO + x * other.b % MO) % MO;
  51. ans.b = (b * other.a % MO + y * other.b % MO) % MO;
  52. ans.x = (a * other.x % MO + x * other.y % MO) % MO;
  53. ans.y = (b * other.x % MO + y * other.y % MO) % MO;
  54. return ans;
  55. }
  56. } t[N << ];
  57. inline void pushup(int o)
  58. {
  59. int lo = o << , ro = o << | ;
  60. t[o] = t[lo] * t[ro];
  61. }
  62. void build(int o = , int l = , int r = n)
  63. {
  64. t[o].lazy = false;
  65. if (l == r)
  66. {
  67. if (s[l] == 'A')
  68. t[o].a = , t[o].b = , t[o].x = , t[o].y = ;
  69. else
  70. t[o].a = , t[o].b = , t[o].x = , t[o].y = ;
  71. return;
  72. }
  73. int mid = (l + r) >> ;
  74. build(o << , l, mid), build(o << | , mid + , r);
  75. pushup(o);
  76. }
  77. inline void modify(int o)
  78. {
  79. t[o].lazy = !t[o].lazy;
  80. swap(t[o].a, t[o].b), swap(t[o].x, t[o].y);
  81. swap(t[o].a, t[o].x), swap(t[o].b, t[o].y);
  82. }
  83. inline void pushdown(int o)
  84. {
  85. if (t[o].lazy == false)
  86. return;
  87. int lo = o << , ro = o << | ;
  88. modify(lo), modify(ro), t[o].lazy = false;
  89. }
  90. void change(int cl, int cr, int o = , int l = , int r = n)
  91. {
  92. if (cl == l && cr == r)
  93. {
  94. modify(o);
  95. return;
  96. }
  97. pushdown(o);
  98. int mid = (l + r) >> ;
  99. if (mid >= cr)
  100. change(cl, cr, o << , l, mid);
  101. else if (mid < cl)
  102. change(cl, cr, o << | , mid + , r);
  103. else
  104. change(cl, mid, o << , l, mid), change(mid + , cr, o << | , mid + , r);
  105. pushup(o);
  106. }
  107. node query(int ql, int qr, int o = , int l = , int r = n)
  108. {
  109. if (ql == l && qr == r)
  110. return t[o];
  111. pushdown(o);
  112. int mid = (l + r) >> ;
  113. if (mid >= qr)
  114. return query(ql, qr, o << , l, mid);
  115. else if (mid < ql)
  116. return query(ql, qr, o << | , mid + , r);
  117. else
  118. return query(ql, mid, o << , l, mid) * query(mid + , qr, o << | , mid + , r);
  119. }
  120. inline int ac()
  121. {
  122. read(n, q);
  123. scanf("%s", s + );
  124. build();
  125. while (q--)
  126. {
  127. int op, l, r, a, b;
  128. read(op, l, r);
  129. if (op == )
  130. {
  131. read(a, b);
  132. node ans = query(l, r);
  133. write((a * ans.a % MO + b * ans.b % MO) % MO), putchar(' '), write((a * ans.x % MO + b * ans.y % MO) % MO), putchar('\n');
  134. }
  135. else
  136. change(l, r);
  137. }
  138. return ;
  139. }
  140. int main()
  141. {
  142. ac();
  143. return ;
  144. }

Problem G. Performance Review  02:44(+) Solved by lh

据说是个线段树之类的题,lh分分钟就秒了,我和xk站在一边人都看傻了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define INF 0x3f3f3f3f
  4. #define lowbit(x) ((-x) & x)
  5. #define ffor(i, d, u) for (int i = (d); i <= (u); ++i)
  6. #define _ffor(i, u, d) for (int i = (u); i >= (d); --i)
  7. #define mst(array, Num, Kind, Count) memset(array, Num, sizeof(Kind) * (Count))
  8. #define mp(x, y) make_pair(x, y)
  9. #define fi first
  10. #define se second
  11. #define N 100005
  12. #define M 3000005
  13. typedef long long ll;
  14. typedef double db;
  15. typedef pair<ll, ll> pll;
  16. typedef pair<int, int> pii;
  17. typedef pair<db, db> pdd;
  18. const db PI = acos(-);
  19. const ll MO = 1e9 + ;
  20. const ll Inv2 = (MO + ) / ;
  21. const bool debug = true;
  22. template <typename T>
  23. inline void read(T &x)
  24. {
  25. x=;char c;T t=;while(((c=getchar())<''||c>'')&&c!='-');
  26. if(c=='-'){t=-;c=getchar();}do(x*=)+=(c-'');while((c=getchar())>=''&&c<='');x*=t;
  27. }
  28. template <typename T, typename... Args>
  29. inline void read(T &x, Args &... args)
  30. {
  31. read(x), read(args...);
  32. }
  33. template <typename T>
  34. inline void write(T x)
  35. {
  36. int len=;char c[];if(x<)putchar('-'),x*=(-);
  37. do{++len;c[len]=(x%)+'';}while(x/=);_ffor(i,len,)putchar(c[i]);
  38. }
  39. int n, m, q, a = ;
  40. vector<int> b[N];
  41. int minx[N << ], lazy[N << ];
  42. void build(int o = , int l = , int r = m)
  43. {
  44. minx[o] = a, lazy[o] = ;
  45. if (l == r)
  46. return;
  47. int mid = (l + r) >> ;
  48. build(o << , l, mid), build(o << | , mid + , r);
  49. }
  50. inline void pushdown(int o)
  51. {
  52. if (lazy[o] == )
  53. return;
  54. int lo = o << , ro = o << | ;
  55. minx[lo] += lazy[o], minx[ro] += lazy[o];
  56. lazy[lo] += lazy[o], lazy[ro] += lazy[o];
  57. lazy[o] = ;
  58. }
  59. void change(int ql, int qr, int x, int o = , int l = , int r = m)
  60. {
  61. if (l == ql && r == qr)
  62. {
  63. lazy[o] += x, minx[o] += x;
  64. return;
  65. }
  66. pushdown(o);
  67. int mid = (l + r) >> ;
  68. if (mid >= qr)
  69. change(ql, qr, x, o << , l, mid);
  70. else if (mid < ql)
  71. change(ql, qr, x, o << | , mid + , r);
  72. else
  73. change(ql, mid, x, o << , l, mid), change(mid + , qr, x, o << | , mid + , r);
  74. minx[o] = min(minx[o << ], minx[o << | ]);
  75. }
  76. inline int ac()
  77. {
  78. int r, x, y, z;
  79. read(n, m, q, x);
  80. ffor(i, , n) read(y), a += (y < x ? : );
  81. build(), a = ;
  82. ffor(i, , m)
  83. {
  84. read(r);
  85. if (a)
  86. change(i, m, a);
  87. a = ;
  88. ffor(j, , r)
  89. {
  90. read(y), b[i].emplace_back(y);
  91. a += (y < x ? : );
  92. }
  93. change(i, m, -r);
  94. }
  95. int mu = x;
  96. while (q--)
  97. {
  98. read(x, y, z);
  99. if ((b[x][y - ] > mu) == (z > mu) || x == m)
  100. {
  101. b[x][y - ] = z;
  102. puts(minx[] >= ? "" : "");
  103. continue;
  104. }
  105. if (z > mu)
  106. change(x + , m, -);
  107. else
  108. change(x + , m, );
  109. b[x][y - ] = z;
  110. puts(minx[] >= ? "" : "");
  111. }
  112. return ;
  113. }
  114. int main()
  115. {
  116. ac();
  117. return ;
  118. }

后面我和xk去开了E,我想了个贪心,但是有些细节没理清楚,而xk怎么看怎么像差分约束,对着板子敲了一下,但是后面发现不太会改板子的样子。后面还尝试写F和L。

F我看了一眼割出来的点必须是树的重心,但是不知道怎么判子树同构,瞎猜了一个做法,但是bug有点多没来得及调完。(赛后调完交上去WA17,应该是个假做法,明早补)

L大概是个图论,但是xk最后没来得及写。


总结:

这场其实有点不太认真,因为各种原因过了10分钟左右才开始看题。中间我还接到了移动的电话骗我去改套餐(结果是兼职的同学找人代打电话,细节没交代好,害我白跑一趟),还顺路买了个晚饭。。。

我后面上厕所也上了挺久的,浪费了不少时间。

最后手上还有三道疑似可做的题,时间多一点说不定能再过一题,这周六要认真点打了QAQ。

还有个人感觉xk看E的时候的:“这肯定是个差分约束,但是我不会差分约束”,这种做法不太好,我感觉这样很容易看成假算法。我有一场CF就是死脑筋,那场的D我就说:“这肯定是个马拉车,但是我不会马拉车,我去看一下我的板子”,但是实际上D是个思维题,我还因此掉了不少分。

不过xk和我切水题又快起来了的样子qwq。然后lh一眼一道线段树,分分钟过掉真的nb没话说。

赛后想想,F题的判树的同构的算法是猜出来的,而xk的L应该是证明过的比较严谨,下次碰到的时候应该优先让这种题先敲。

其他的。。。和某位肾结石的好基友讨论了一下,才发现我们俩从初中开始就熬夜成瘾了,身体真的吃不消,以后还是早睡早起吧QWQ。

模拟赛小结:2019-2020 ICPC, Asia Jakarta Regional Contest的更多相关文章

  1. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings

    As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...

  3. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  4. 2019-2020 ICPC, Asia Jakarta Regional Contest

    目录 Contest Info Solutions A. Copying Homework C. Even Path E. Songwriter G. Performance Review H. Tw ...

  5. 2019-2020 ICPC, Asia Jakarta Regional Contest C. Even Path

    Pathfinding is a task of finding a route between two points. It often appears in many problems. For ...

  6. 2019-2020 ICPC, Asia Jakarta Regional Contest A. Copying Homework

    Danang and Darto are classmates. They are given homework to create a permutation of N integers from  ...

  7. 2019-2020 ICPC, Asia Jakarta Regional Contest C. Even Path(思维)

    Pathfinding is a task of finding a route between two points. It often appears in many problems. For ...

  8. 2019-2020 ICPC, Asia Jakarta Regional Contest A. Copying Homework (思维)

    Danang and Darto are classmates. They are given homework to create a permutation of N integers from  ...

  9. 模拟赛小结:2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    比赛链接:传送门 本场我们队过的题感觉算法都挺简单的,不知道为啥做的时候感觉没有很顺利. 封榜后7题,罚时1015.第一次模拟赛金,虽然是北欧的区域赛,但还是有点开心的. Problem B Best ...

随机推荐

  1. zabbix(2)使用指南

    一.邮件报警(一个客户端安装server,agent) 管理->报警媒介类型->email 管理->用户->Admin->报警媒介 配置->动作->Repor ...

  2. JavaScript高程第三版笔记-面向对象编程

    之前有篇博客曾提到过一点js的面向对象编程:js面向对象编程. 这里就结合js高程详细剖析一下javascript的面向对象编程. 前序: 1⃣️Object.defineProperty() var ...

  3. 聊聊GO-REDIS的一些高级用法

    1. 前言 说到Golang的Redis库,用到最多的恐怕是redigo 和 go-redis.其中 redigo 不支持对集群的访问.本文想聊聊go-redis 2个高级用法 2. 开启对Clust ...

  4. ES5与ES6常用语法教程之 ①函数写法、创建对象、导入导出模块方式

    函数写法区别 计算a, b两个数字之和,有返回值 es5 写法 function add(a, b) { return a + b; } es6 写法(箭头函数) let add = (a, b) = ...

  5. Pycharm从虚拟环境切换到本地环境

    切换到本地: 点击左上角File – settings , 在打开的对话框中选择:Project xxx (xxx是你项目的名称) – Project Interpreter ,在右边可以看到解释器, ...

  6. script学习,如何用linux监控你的同事?

    环境:CentOS7 一.为什么要学习script命令 当你在终端或控制台上工作时,你想记录下自己做了些什么吗?当你跟一些Linux管理员同时在系统上干活,你想知道别人干了什么吗?当你让别人远程到你的 ...

  7. github 上传大文件100MB姿势

    最新想把写一个一键配置Linux的脚本,所以就要安装一些软件咯,但是把有时候有源码安装比较好,而且有些东西直接传到Github会很方便,可又超过了100MB,Github正常情况下是不允许上传超过10 ...

  8. 【linux杂谈】centos6和centos7中固定IP的方法

    众所周知,一大部分集合部署的应用服务器内网相互通信都是采用固定IP.在阿里云.腾讯云上申请的云服务器也是固定IP,这就意味着在云平台内部策略划拨肯定是也固定了IP(即便不是采取直接在系统内固定的方式) ...

  9. vue---EleElement UI 表格导出功能

    步骤一:安装依赖 安装依赖:npm install --save xlsx file-saver 步骤二:在放置需要导出功能的组件中引入相关组件 import FileSaver from 'file ...

  10. excel批量修改文件名称

    步骤: 1. 然后将标准号所在的列复制三份到旁边相邻的空白列 2. 使用方方格子让三列中最左面的列只保存如下格式的数据: DB37/T或DB37/ 3. 使用方方格子让三列中中间的列的只保存如下格式的 ...