赛前

大概是赛前三周才突然知道拥有了比赛机会。

赛前训练和vp频率很高,有一段时间cf上都是绿的。比赛的那一周只有一天没在vp,到了周六热身赛我人都有点麻木。(可能正赛也是类似的状态吧)

比赛的过程be like:

首先是吃饭时间有点赶,回来之后马上开始登录比赛,登录之后只有几分钟就要开始了。

11:55

发现忘了准备摄像头,而且笔记本上的USB接口不够用,需要拓展坞

于是赶紧叫队长去找摄像头和拓展坞,好在很快都找到了

接入摄像头后屏幕仍然是黑的,这时候已经 11:58 了,于是又紧急呼叫志愿者冯老师,他上来一通操作,经一队提醒,幸运地在开赛之前(或许是恰好)开启了摄像头。

12:00

我坐在电脑前,队友拿着纸质题面看题。

开赛一分钟不到就有人过了 D ,我也赶紧点开这题的题面。发现确实签到,就开始写。

(小插曲:一队看到有人过D后说:“de(轻声)是签到”,然后学妹听错了,对另一个队友说J是签到,队友赶紧看J题去了,读完发现并不是) 笑死

写完让学妹也看了看,交了,一发过签到。

12:10

一段时间内都没有其他题通过,学妹看了B,是构造。我看了A,完全不会。

12:15

学妹跟榜去开C,说了个做法就先上机写了,我和另一队友讨论了下,觉得没问题。

学妹在26min的时候过了C。

12:30 (大概是)

开场很久才有人过了F,这期间内我们随便地开题,没发现可做的

F也是构造,我觉得学妹应该会,就把题意讲给学妹

13:00

学妹继续想F,这时候L也有人过了,qyy读了题,给我讲题意。

我很快想到了是暴力,做法没太细想,学妹在调F,我就先上机写L,调了一会发现不对,就又下来改。

这时候可能受到了一些场内声音的干扰,也可能是读题不仔细,L本来题就比较长,我们漏掉了一个关键的信息,这导致模拟样例结果不一致,所以我们就怀疑是题读错了,

曲解了另一条关键信息,改来改去都发现过不了样例。代码两位队友都帮我看过了,我们都觉得很对。

于是我们就开始了双向卡题。直到比赛结束,坐牢四小时

感想

最后的结果是L过了400多人,我们rk420+,2题。

看了榜。其实如果L三小时之内出的话,就能有牌了。

拿牌一点也不难啊

反省一下原因,我觉得主要原因是在我的。

1.队友第一遍读完题之后,说不是很确定,于是我又读了一遍,然而根本读不进去,大致读了一下意思,依然略过了细节。

2.代码写的比较慢。我以为不能直接遍历每个人,认为会超时,所以用了很多状压、二进制的写法,然而是根本用不着的。

3.受场外声音的干扰,容易听信其他队的声音,少了自己的思考。

想放一下我复杂的写法:(修改后能过样例版)

点击查看代码
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 8;
  4. int n, m;
  5. int ATKa[N], ATKb[N], ha[N], hb[N], ca[N], cb[N];
  6. double A, B, T;
  7. inline int lowbit(int x) {
  8. return x & (-x);
  9. }
  10. // alice 0 bob 1
  11. inline void dfs(int round, int Sa, int Sb, double p) {
  12. // printf("%d %d %lf\n", Sa, Sb, p);
  13. int cnta = __builtin_popcount(Sa);
  14. int cntb = __builtin_popcount(Sb);
  15. if(cnta == 0 || cntb == 0) {
  16. if(cnta == 0 && cntb == 0) T += p;
  17. else if(!cnta) B += p;
  18. else A += p;
  19. return;
  20. }
  21. if(round == 0) {
  22. int mn = 1e9, ida;
  23. for(int i = 0; i < n; i++) {
  24. if(ha[i] > 0 && ca[i] < mn) {
  25. mn = ca[i];
  26. ida = i;
  27. }
  28. }
  29. int tem = Sb;
  30. while(tem) {
  31. int tailb = lowbit(tem);
  32. int idb = __lg(tailb);
  33. tem -= tailb;
  34. ha[ida] -= ATKb[idb];
  35. hb[idb] -= ATKa[ida];
  36. if(ha[ida] <= 0) Sa = (Sa & (~(1 << ida)));
  37. if(hb[idb] <= 0) Sb = (Sb & (~(1 << idb)));
  38. ca[ida] += 1;
  39. // cb[idb] += 1;
  40. dfs(round ^ 1, Sa, Sb, p / cntb);
  41. if(ha[ida] <= 0) Sa = (Sa | ((1 << ida)));
  42. if(hb[idb] <= 0) Sb = (Sb | ((1 << idb)));
  43. ha[ida] += ATKb[idb];
  44. hb[idb] += ATKa[ida];
  45. ca[ida] += -1;
  46. // cb[idb] += -1;
  47. }
  48. }
  49. if(round == 1) {
  50. int mn = 1e9, idb;
  51. for(int i = 0; i < m; i++) {
  52. if(hb[i] > 0 && cb[i] < mn) {
  53. mn = cb[i];
  54. idb = i;
  55. }
  56. }
  57. int tem = Sa;
  58. while(tem) {
  59. int taila = lowbit(tem);
  60. int ida = __lg(taila); // a 队头
  61. tem -= taila;
  62. ha[ida] -= ATKb[idb];
  63. hb[idb] -= ATKa[ida];
  64. if(ha[ida] <= 0) Sa = (Sa & (~(1 << ida)));
  65. if(hb[idb] <= 0) Sb = (Sb & (~(1 << idb)));
  66. // ca[ida] += 1;
  67. cb[idb] += 1;
  68. dfs(round ^ 1, Sa, Sb, p / cnta);
  69. if(ha[ida] <= 0) Sa = (Sa | ((1 << ida)));
  70. if(hb[idb] <= 0) Sb = (Sb | ((1 << idb)));
  71. ha[ida] += ATKb[idb];
  72. hb[idb] += ATKa[ida];
  73. // ca[ida] += -1;
  74. cb[idb] += -1;
  75. }
  76. }
  77. }
  78. int main() {
  79. scanf("%d%d", &n, &m);
  80. for(int i = 0; i < n; i++) scanf("%d", &ATKa[i]), ha[i] = ATKa[i];
  81. for(int i = 0; i < m; i++) scanf("%d", &ATKb[i]), hb[i] = ATKb[i];
  82. if(n >= m) dfs(0, (1 << n) - 1, (1 << m) - 1, 1.0 / (1 + (m == n)));
  83. if(m >= n) dfs(1, (1 << n) - 1, (1 << m) - 1, 1.0 / (1 + (m == n)));
  84. printf("%.10f\n%.10f\n%.10f\n", A, B, T);
  85. system("pause");
  86. return 0;
  87. }

2022 icpc 沈阳站 记录(非题解)的更多相关文章

  1. 2020 ICPC 沈阳站 I - Rise of Shadows 题解

    题面看这里 \(PS\):符号 \([\ \rm P\ ]\) 的意义是:当表达式 \(\rm P\) 为真则取值为 \(1\),为假则取值为 \(0\). 题目大意 给你一个一天有 \(H\)​​​ ...

  2. 2016 ACM/ICPC 沈阳站 小结

    铜铜铜…… 人呐真奇怪 铁牌水平总想着运气好拿个铜 铜牌水平总想着运气好拿个银 估计银牌的聚聚们一定也不满意 想拿个金吧 这次比赛挺不爽的 AB两道SB题,十分钟基本全场都过了 不知道出这种题有什么意 ...

  3. HDU 5950Recursive sequence ICPC沈阳站

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  4. 2015 ICPC 沈阳站M题

    M - Meeting Time Limit:6000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit ...

  5. 2016ACM/ICPC亚洲区沈阳站-重现赛赛题

    今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...

  6. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  9. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  10. 2015ACM/ICPC亚洲区沈阳站 Pagodas

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

随机推荐

  1. ubuntu18.04 server版安装教程

    转载博客园: Ubuntu18.04 Server版安装(详细版) - 运维密码 - 博客园 (cnblogs.com)

  2. CCRD_TOC_2007_EULAR专辑_2

    中信国健临床通讯 EULAR 2007专辑II 目录 类风湿关节炎 1 Etanercept联合MTX治疗RA导致炎症与骨破坏进展之间的失关联也见于单关节水平:来自TEMPO的研究数据 Landewe ...

  3. vue模板三目运算判断报错

    问题: 关于vue三目运算符提示报错 1.三目运算符等于判断 {{ a==b ? '是' : '否'}} 2.其他三目运算符 <代表小于号(<) >代表大于符号(>) ≤表示小 ...

  4. IntelliJ IDEA运行项目的时候提示 Command line is too long 错误

    这时候你需要调整运行项目的配置,将 Configuration 中的 Shorten Command Line 修改为 JAR 就可以了.

  5. cannot import name 'detail_route' from 'rest_framework.decorators'的解决办法

    原因 es7不能使用3.1.1版本的django-haystack 解决办法 如果你是在弄elasticsearch,那么这个适合你,否则应该用不了. 终端执行django-haystack的更新 p ...

  6. fabric学习笔记7

    Fabric2.0Java SDK实践-合约交易 20201303张奕博 2023.1.18 1.创建基础工程 新建一个Maven工程,添加以下依赖 <dependency> <gr ...

  7. JS输出formData的全部值

    //第一种 for (var value of formData.values()) { console.log(value); } //第二种 for (var [a, b] of formData ...

  8. 深入理解 JVM -- 垃圾收集器与内存分配策略

    程序计数器.虚拟机栈.本地方法栈 3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作.每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行 ...

  9. 预处理指令详解(C语言

    一.预处理符号 预处理符号是C语言内置的符号,是可以直接使用的. 其中,若遵顼ANSI C,则__STDC__ 为1,否则未定义. 二.#define 1)定义标识符 define可以用来定义标识符, ...

  10. java 内存锁

    import lombok.extern.slf4j.Slf4j;import java.util.Map;import java.util.concurrent.ConcurrentHashMap; ...