2022 icpc 沈阳站 记录(非题解)
赛前
大概是赛前三周才突然知道拥有了比赛机会。
赛前训练和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.受场外声音的干扰,容易听信其他队的声音,少了自己的思考。
想放一下我复杂的写法:(修改后能过样例版)
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 8;
int n, m;
int ATKa[N], ATKb[N], ha[N], hb[N], ca[N], cb[N];
double A, B, T;
inline int lowbit(int x) {
return x & (-x);
}
// alice 0 bob 1
inline void dfs(int round, int Sa, int Sb, double p) {
// printf("%d %d %lf\n", Sa, Sb, p);
int cnta = __builtin_popcount(Sa);
int cntb = __builtin_popcount(Sb);
if(cnta == 0 || cntb == 0) {
if(cnta == 0 && cntb == 0) T += p;
else if(!cnta) B += p;
else A += p;
return;
}
if(round == 0) {
int mn = 1e9, ida;
for(int i = 0; i < n; i++) {
if(ha[i] > 0 && ca[i] < mn) {
mn = ca[i];
ida = i;
}
}
int tem = Sb;
while(tem) {
int tailb = lowbit(tem);
int idb = __lg(tailb);
tem -= tailb;
ha[ida] -= ATKb[idb];
hb[idb] -= ATKa[ida];
if(ha[ida] <= 0) Sa = (Sa & (~(1 << ida)));
if(hb[idb] <= 0) Sb = (Sb & (~(1 << idb)));
ca[ida] += 1;
// cb[idb] += 1;
dfs(round ^ 1, Sa, Sb, p / cntb);
if(ha[ida] <= 0) Sa = (Sa | ((1 << ida)));
if(hb[idb] <= 0) Sb = (Sb | ((1 << idb)));
ha[ida] += ATKb[idb];
hb[idb] += ATKa[ida];
ca[ida] += -1;
// cb[idb] += -1;
}
}
if(round == 1) {
int mn = 1e9, idb;
for(int i = 0; i < m; i++) {
if(hb[i] > 0 && cb[i] < mn) {
mn = cb[i];
idb = i;
}
}
int tem = Sa;
while(tem) {
int taila = lowbit(tem);
int ida = __lg(taila); // a 队头
tem -= taila;
ha[ida] -= ATKb[idb];
hb[idb] -= ATKa[ida];
if(ha[ida] <= 0) Sa = (Sa & (~(1 << ida)));
if(hb[idb] <= 0) Sb = (Sb & (~(1 << idb)));
// ca[ida] += 1;
cb[idb] += 1;
dfs(round ^ 1, Sa, Sb, p / cnta);
if(ha[ida] <= 0) Sa = (Sa | ((1 << ida)));
if(hb[idb] <= 0) Sb = (Sb | ((1 << idb)));
ha[ida] += ATKb[idb];
hb[idb] += ATKa[ida];
// ca[ida] += -1;
cb[idb] += -1;
}
}
}
int main() {
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++) scanf("%d", &ATKa[i]), ha[i] = ATKa[i];
for(int i = 0; i < m; i++) scanf("%d", &ATKb[i]), hb[i] = ATKb[i];
if(n >= m) dfs(0, (1 << n) - 1, (1 << m) - 1, 1.0 / (1 + (m == n)));
if(m >= n) dfs(1, (1 << n) - 1, (1 << m) - 1, 1.0 / (1 + (m == n)));
printf("%.10f\n%.10f\n%.10f\n", A, B, T);
system("pause");
return 0;
}
2022 icpc 沈阳站 记录(非题解)的更多相关文章
- 2020 ICPC 沈阳站 I - Rise of Shadows 题解
题面看这里 \(PS\):符号 \([\ \rm P\ ]\) 的意义是:当表达式 \(\rm P\) 为真则取值为 \(1\),为假则取值为 \(0\). 题目大意 给你一个一天有 \(H\) ...
- 2016 ACM/ICPC 沈阳站 小结
铜铜铜…… 人呐真奇怪 铁牌水平总想着运气好拿个铜 铜牌水平总想着运气好拿个银 估计银牌的聚聚们一定也不满意 想拿个金吧 这次比赛挺不爽的 AB两道SB题,十分钟基本全场都过了 不知道出这种题有什么意 ...
- HDU 5950Recursive sequence ICPC沈阳站
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- 2015 ICPC 沈阳站M题
M - Meeting Time Limit:6000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛赛题
今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Thickest Burger Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Relative atomic mass Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 2015ACM/ICPC亚洲区沈阳站 Pagodas
Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
随机推荐
- PostGIS之几何有效性
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...
- C#/.net程序调用python
C#/.net程序调用python C#的优势在于window下的开发,不仅功能强大而且开发周期短.而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来 ...
- (unsigned)short溢出后隐式转换为int
同学被面试官问到一个细节中的细节,虽然个人觉得意义不大,但还是好奇并在和同学一起实验后搞清楚了,记录一下 如下: int main() { unsigned short a = 65535, b = ...
- crypto-gmsm国密算法库
crypto-gmsm国密算法库 一.开发背景 crypto-gmsm国密算法库是国密商密算法(SM2,SM3,SM4)工具类封装,国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主 ...
- 【3】java之string类
String 是一个字符串类型的类,使用双引号定义的内容都是字符串,但是 String 本身是一个类,使用上会有一些特殊. 一. String类对象的两种实例化方式 1.1 直接赋值 public c ...
- windows 10 更新代理
安装 Windows 更新 Windows 更新扫描.下载.安装,每一部分都采用独立的服务. Windows 更新客户端利用 Windows HTTP 服务(WinHTTP)扫描可用更新: Backg ...
- java struts2框架漏洞合集
目录 struts2 s2-016 payload 数据包 返回结果 struts2 s2-016 参考:https://github.com/vulhub/vulhub/blob/master/st ...
- battery-historian耗电量测试
Battery-Historian简介 Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌2015年I/O大会上推出的一款检测运行在android5.0(Lol ...
- TensorFlow中使用tf.keras.callbacks.EarlyStopping防止训练过拟合
TensorFlow tf.keras.callbacks.EarlyStopping 当模型训练次数epoch设置到100甚至更大时,如果模型的效果没有进一步提升,那么训练可以提前停止,继续训练很可 ...
- cat /dev/null > file后,ls查看文件大小未减小,du查看变为0
一句话总结: 其他程序正在使用command > file写入文件:将command程序kill后使用command >> file写入文件,即可在command写入file时,用c ...