T1:变换(change)

一道大水题.

赛场上想都没想就切掉了

不难发现,转换的过程只和a 和b 的二进制位有关,且不同二进制位之间无关。我们可以将a 和b 转化为二进制表示,每一位分别判断,如果这位不同,答案+1

更快的方法
可以发现对于每一位,如果a,b的这位相同,异或值为0 ,如果不同,异或值为1 。所以答案为 a异或 b的二进制 1的个数。
AC CODE
 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)

赛场上略加思考就切掉了

简单贪心,每次找到位置最靠前的未被消灭的地鼠 ,对i~i+k-1的地鼠进行打击。 
AC CODE

 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)

正难则反,考虑删图的逆过程,要是让我正着来我也不会啊ε=ε=ε=(~ ̄▽ ̄)~溜了溜了,每次加入一个点,就将和它相连的的已经加入的点的连通块并成一个新的连通
块。连通块及其的权值可以用并查集维护。
AC CODE
 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( ̄▽ ̄)",祭了

简单模拟发现,操作相当于可以把一个形如 AAA……AB 的转化为 BCC……CC ,或将形如 BAA……AA 的转化
为 CC……CCB ,等价于将一个 A 连续段与一个与其相邻的 B 删去。 
故我们可以进行 dp,对于每个初始是 B 的位置 ,f(i,0/1)为在 的前缀字符串中, 位置有/没有被前面
的 A 连续段占用。
f(i,0)=max(f(la,0)+i-la-1,f(la,1))
f(i,1)=max(f(la,0)+i-la-1,f(la,i)+i-la-1)
其中la 为上一个 B 的位置.
最终答案为max(f(las,0)+n-las,f(la,1)),las为最后一个 B 的位置。
AC CODE
 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 模拟赛 赛后总结(尝试第一篇总结)的更多相关文章

  1. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结

    t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...

  2. 【CYH-02】noip2018数论模拟赛:赛后题解

    1.小奔的矩阵 2.大奔的方案 3.小奔与不等四边形 4.小奔的方案 当然本次比赛肯定难度不会仅限于此啦!后续还会--

  3. 6.29 省选模拟赛 坏题 AC自动机 dp 图论

    考场上随手构造了一组数据把自己卡掉了 然后一直都是掉线状态了. 最后发现这个东西不是subtask -1的情况不多 所以就没管无解直接莽 写题有点晚 故没调出来.. 考虑怎么做 容易想到建立AC自动机 ...

  4. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  5. 5.29 省选模拟赛 波波老师 SAM 线段树 单调队列 并查集

    LINK:波波老师 LINK:同bzoj 1396 识别子串 不过前者要求线性做法 后者可以log过.实际上前者也被我一个log给水过了. 其实不算很水 我自认跑的很快罢了. 都是求经过一个位置的最短 ...

  6. 3.29省选模拟赛 除法与取模 dp+组合计数

    LINK:除法与取模 鬼题.不过50分很好写.考虑不带除法的时候 其实是一个dp的组合计数. 考虑带除法的时候需要状压一下除法操作. 因为除法操作是不受x的大小影响的 所以要状压这个除法操作. 直接采 ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  9. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  10. 9.11 myl模拟赛

    9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...

随机推荐

  1. 鸟类识别系统Python+Django+TensorFlow+卷积神经网络算法【完整代码】

    一.介绍 鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法.并通过对数据集进行训练,最后得到一个识别精度较高的模型.并基于Django框架,开 ...

  2. TypeScript又出新关键字了?

    TypeScript 5.2将引入一个新的关键字:using.当它离开作用域时,你可以用Symbol.dispose函数来处置任何东西. { const getResource = () => ...

  3. 重新搞懂Git,掌握日常命令和基本操作

    1.git Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有内容. Git 易于学习,占用空间很小,性能快如闪电.它超越了Subversion,CVS,Perfo ...

  4. 创建属于自己的github、使用git提交、更新代码至github、写好readme

    1. 在github上创建一个Repository 点击github网站,你可以用你的邮箱先注册一个账号. 点击New,转到创建一个repository的界面,如下图所示,你可以填写你的Reposit ...

  5. 代码发布平台jenkins中Check-out Strategy选项功能意义

    第一个选项:Use'svn update' as much as possible  这个选项能实现快速发布:Use 'svn update' whenever possible, making th ...

  6. 【Kubernetes】kubectl常用命令手册 -- 持续更新

    元信息 api列表: kubectl api-resources kubectl api-resources -o wide 用法查询: kubectl explain <>.<&g ...

  7. 带你掌握利用Terraform不同数据源扩展应用场景

    本文分享自华为云社区<利用Terraform不同数据源扩展应用场景>,作者: kaliarch . 一 背景 在生产环境中使用Terraform进行基础设施编排,通常又一些信息是通过其他外 ...

  8. MyBatis(log4j)

    log4j介绍 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  9. 一分钟学一个 Linux 命令 - rm

    前言 大家好,我是 god23bin,欢迎回到咱们的<一分钟学一个 Linux 命令>系列,今天我要讲的是一个比较危险的命令,rm 命令,没错,你可以没听过 rm 命令,但是删库跑路你不可 ...

  10. Linux - vim文件编辑器

    vim 普通模式下 yy : 复制当前光标所在行 p : 粘贴 数字+yy :复制多行 dd :删除当前行 数字+dd :删除多行 u : 回滚 y$ : 光标到行结尾 y^ : 行开头到光标位置 y ...