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. 基于GPT搭建私有知识库聊天机器人(二)环境安装

    1.需要安装的包 pip3 install flask //python开发web框架 pip3 install langchain //LLM开发框架 pip3 install openai //L ...

  2. Logistic Regression and its Maximum Likelihood Estimation

    从 Linear Regression 到 Logistic Regression 给定二维样本数据集 \(D = \left\{ (\vec{x}_{1}, y_{1}), (\vec{x}_{2} ...

  3. 基于GPT搭建私有知识库聊天机器人(四)问答实现

    前文链接: 基于GPT搭建私有知识库聊天机器人(一)实现原理 基于GPT搭建私有知识库聊天机器人(二)环境安装 基于GPT搭建私有知识库聊天机器人(三)向量数据训练 在前面的文章中,我们介绍了如何使用 ...

  4. Linux 如何删除乱码的文件

    事情是这样,服务器很多人在使用,以前的离职同事留了一大堆不知道是什么东西. 那些文件看不了,又删不掉,非常碍眼. 我搜索了挺多资料,没有一篇文章能真的解决问题(感觉都是抄来抄去的). 用 SFTP 工 ...

  5. 快速切换 nodejs 的版本

    最近在开发一个常驻进程.定时任务统一调度系统,以应对开发在进程管理方面遇到的各种复杂问题. 组里开发项目,一般来说是一个人承包整个项目,包括调度器设计,还有后台系统.我还有一部分工作,是队列相关的信息 ...

  6. python教程 入门学习笔记 第2天 第一个python程序 代码规范 用默认的IDLE (Python GUI)编辑器编写

    四.第一个python程序 1.用默认的IDLE (Python GUI)编辑器编写 2.在新建文件中写代码,在初始窗口中编译运行 3.写完后保存为以.py扩展名的文件 4.按F5键执行,在初始窗口观 ...

  7. 如何用IoT边缘连接器实现云端应用控制PLC?

    本文分享自华为云社区<数字工厂深入浅出系列(十):IoT边缘连接器实现云端应用控制PLC>,作者: 云起MAE. 通过IoT云平台和边缘计算的技术设施,工厂可以将PLC等OT过程制造控制器 ...

  8. 03.前后端分离中台框架 zhontai 项目代码生成器的使用

    zhontai 项目 基于 .Net7.x + Vue 等技术的前后端分离后台权限管理系统,想你所想的开发理念,希望减少工作量,帮助大家实现快速开发 后端地址:https://github.com/z ...

  9. CTFshow misc1-10

    小提示:需要从图片上提取flag文字,可以通过截图翻译或者微信发送图片,这两个的ai图像识别挺好用的. misc1: 解压打开就能看见flag,提取出来就行 misc2: 记事本打开,看见 ng字符, ...

  10. 记一次weak_up函数绕过

    2023 蓝帽杯CTF LovePHP 因为比赛已经结束,所以复现环境是从本地进行复现,这次比赛本来排名挺靠前的,原本总排名是60多名,赛区排名30多名,本来是以为有希望进入半决赛的,但是没想到比赛结 ...