2023.09.29 入门级 J2 模拟赛 赛后总结(尝试第一篇总结)
T1:变换(change)
一道大水题.
赛场上想都没想就切掉了
不难发现,转换的过程只和a 和b 的二进制位有关,且不同二进制位之间无关。我们可以将a 和b 转化为二进制表示,每一位分别判断,如果这位不同,答案+1
1 #include<bits/stdc++.h>
2 using namespace std;
3 int main(){
4 freopen("change.in", "r", stdin);
5 freopen("change.out", "w", stdout);
6 long long a, b;
7 scanf("%lld%lld", &a, &b);
8 printf("%d\n", __builtin_popcountll(a ^ b));
9 return 0;
10 }
PS:__builtin_popcount()函数可以在O(1)的复杂的计算一个数二进制 1的个数而__builtin_popcountll() 是其的 long long 版本。
T2:打地鼠 (mouse)
赛场上略加思考就切掉了
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=2e5+10;
4 int n,k,ans;
5 char s[N];
6 int main(){
7 freopen("mouse.in","r",stdin);
8 freopen("mouse.out","w",stdout);
9 scanf("%d%d%s",&n,&k,s+1);ans=0;
10 for(int i=1;i<=n;++i)
11 if(s[i]=='1') ++ans,i+=k-1;
12 printf("%d\n",ans);
13 return 0;
14 }
还是来证明一下吧,不然文章太短了( ̄▽ ̄)"
用反证法,假设不按这种方式进行贪心,那么打击范围会有重复即贡献会有重复,造成浪费,因此当前方式即为最优解!
T3:删除(delete)
1 #include <bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4 const int N = 1e5 + 5;
5 vector<int> to[N];
6 bool flag[N];
7 ll total[N], mx, value[N], a[N], fa[N], u, v;
8 int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
9 int main() {
10 freopen("delete.in", "r", stdin);
11 freopen("delete.out", "w", stdout);
12 int n, m;
13 cin >> n >> m;
14 for (int i = 1; i <= n; i++) cin >> value[i];
15 while (m--) {
16 cin >> u >> v;
17 to[u].push_back(v);
18 to[v].push_back(u);
19 }
20 for (int i = n; i; i--) cin >> a[i];
21 vector<long long> ans = { 0 };
22 for (int i = 1; i <= n; i++) fa[i] = i;
23 for (int i = 1; i < n; i++) {
24 int u = a[i];
25 flag[u] = 1, total[u] = value[u];
26 mx = max(mx, total[u]);
27 for (int v : to[u]) {
28 if (!flag[v])
29 continue;
30 int x = find(v), y = u;
31 if (x != y) {
32 fa[x] = y;
33 total[y] += total[x];
34 mx = max(mx, total[y]);
35 }
36 }
37 ans.push_back(mx);
38 }
39 reverse(ans.begin(), ans.end());
40 for (long long answer : ans) cout << answer << " ";
41 }
T4:刮彩票(lottery)
赛场上状态转移方程没想清楚,70pts( ̄▽ ̄)",祭了
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=2e5+10;
4 int n,f[N][2];
5 char s[N];
6 int main(){
7 freopen("lottery.in","r",stdin);
8 freopen("lottery.out","w",stdout);
9 scanf("%d%s",&n,s+1);
10 int la=0;
11 f[0][0]=-n;
12 for(int i=1;i<=n;++i)
13 if(s[i]=='B'){
14 f[i][0]=max(f[la][0]+i-la-1,f[la][1]);
15 f[i][1]=max(f[la][0],f[la][1])+i-la-1;
16 la=i;
17 }
18 printf("%d\n",max(f[la][0]+n-la,f[la][1]));
19 return 0;
20 }
总370pts
完结,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
2023.09.29 入门级 J2 模拟赛 赛后总结(尝试第一篇总结)的更多相关文章
- [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结
t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...
- 【CYH-02】noip2018数论模拟赛:赛后题解
1.小奔的矩阵 2.大奔的方案 3.小奔与不等四边形 4.小奔的方案 当然本次比赛肯定难度不会仅限于此啦!后续还会--
- 6.29 省选模拟赛 坏题 AC自动机 dp 图论
考场上随手构造了一组数据把自己卡掉了 然后一直都是掉线状态了. 最后发现这个东西不是subtask -1的情况不多 所以就没管无解直接莽 写题有点晚 故没调出来.. 考虑怎么做 容易想到建立AC自动机 ...
- 5.29 省选模拟赛 树的染色 dp 最优性优化
LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...
- 5.29 省选模拟赛 波波老师 SAM 线段树 单调队列 并查集
LINK:波波老师 LINK:同bzoj 1396 识别子串 不过前者要求线性做法 后者可以log过.实际上前者也被我一个log给水过了. 其实不算很水 我自认跑的很快罢了. 都是求经过一个位置的最短 ...
- 3.29省选模拟赛 除法与取模 dp+组合计数
LINK:除法与取模 鬼题.不过50分很好写.考虑不带除法的时候 其实是一个dp的组合计数. 考虑带除法的时候需要状压一下除法操作. 因为除法操作是不受x的大小影响的 所以要状压这个除法操作. 直接采 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛-2018.10.22
模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...
- 洛谷 P5594 【XR-4】模拟赛
洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
随机推荐
- 鸟类识别系统Python+Django+TensorFlow+卷积神经网络算法【完整代码】
一.介绍 鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法.并通过对数据集进行训练,最后得到一个识别精度较高的模型.并基于Django框架,开 ...
- TypeScript又出新关键字了?
TypeScript 5.2将引入一个新的关键字:using.当它离开作用域时,你可以用Symbol.dispose函数来处置任何东西. { const getResource = () => ...
- 重新搞懂Git,掌握日常命令和基本操作
1.git Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有内容. Git 易于学习,占用空间很小,性能快如闪电.它超越了Subversion,CVS,Perfo ...
- 创建属于自己的github、使用git提交、更新代码至github、写好readme
1. 在github上创建一个Repository 点击github网站,你可以用你的邮箱先注册一个账号. 点击New,转到创建一个repository的界面,如下图所示,你可以填写你的Reposit ...
- 代码发布平台jenkins中Check-out Strategy选项功能意义
第一个选项:Use'svn update' as much as possible 这个选项能实现快速发布:Use 'svn update' whenever possible, making th ...
- 【Kubernetes】kubectl常用命令手册 -- 持续更新
元信息 api列表: kubectl api-resources kubectl api-resources -o wide 用法查询: kubectl explain <>.<&g ...
- 带你掌握利用Terraform不同数据源扩展应用场景
本文分享自华为云社区<利用Terraform不同数据源扩展应用场景>,作者: kaliarch . 一 背景 在生产环境中使用Terraform进行基础设施编排,通常又一些信息是通过其他外 ...
- MyBatis(log4j)
log4j介绍 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...
- 一分钟学一个 Linux 命令 - rm
前言 大家好,我是 god23bin,欢迎回到咱们的<一分钟学一个 Linux 命令>系列,今天我要讲的是一个比较危险的命令,rm 命令,没错,你可以没听过 rm 命令,但是删库跑路你不可 ...
- Linux - vim文件编辑器
vim 普通模式下 yy : 复制当前光标所在行 p : 粘贴 数字+yy :复制多行 dd :删除当前行 数字+dd :删除多行 u : 回滚 y$ : 光标到行结尾 y^ : 行开头到光标位置 y ...