MX J-10 做题记录

A

https://cspjs.online/contest/264/problem/1

我们猜测出一定这个数一定要为 \(2^t\) 答案才最优。

因为 \(2l\le r\),所以 \([l,r]\) 区间中一定有一个 \(2\) 的整数次幂,枚举即可。

#include<bits/stdc++.h>
using namespace std;
inline void solve(){int l,r,x;cin>>l>>r;x=1;int res=0;while(x*2<=r){res++;x*=2;}cout<<res<<endl;
}
signed main(){solve();return 0;
}

赛时没有注意到 \(2l\le r\)

B

https://cspjs.online/contest/264/problem/2

直接按位考虑。

对于第 \(k\) 位而言,这一位是 \(1\) 的条件是 \([l,r]\) 中有一个第 \(k\) 位为 \(1\) 的数。

这个玩意的条件是 \(r-l\ge 2^k\)\(r_k=1\)\(l_k=1\),其中 \(x_k\)\(x\) 的第 \(k\) 位。

#include<bits/stdc++.h>
#define ans sum
using namespace std;
int q,mier[31];
int main(){freopen("or.in","r",stdin);freopen("or.out","w",stdout);scanf("%d",&q);mier[0]=1;for(int i=1;i<=30;i++)mier[i]=mier[i-1]*2;for(int i=1,l,r;i<=q;i++){scanf("%d%d",&l,&r);int sum=0;for(int i=30;i>=0;i--){if(r-l>=mier[i]){sum+=mier[i];continue;}int x=(l>>i)&1,y=(r>>i)&1;if(x==0&&y==0);else ans+=mier[i];}printf("%d\n",ans);}
}

赛时过了。

C

https://cspjs.online/contest/264/problem/3

\(ed_x\) 表示 \(x\) 出现的最后一个位置,那么 \(1 \to ed_x\) 这个前缀都能取到最大值,这是显然的。那么就好做了,用 \(set\) 维护 \(ed_x\) 组成的集合,每次取出最小的一个,每次会询问一个区间的最小或最大值,因为左右端点右移,可以利用单调队列优化。

#include <bits/stdc++.h>using namespace std;int main() {freopen("subsequence.in", "r", stdin);freopen("subsequence.out", "w", stdout);ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int tt = 1;while (tt--) {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];a[i]--;}vector<int> l(n + 1, INT_MAX);for (int i = 0; i < n; i++) l[a[i]] = i;priority_queue<int, vector<int>, greater<int>> q(l.begin(), l.end());priority_queue<array<int, 2>, vector<array<int, 2>>, greater<array<int, 2>>> q1, q2;vector<bool> vis(n + 1, false);for (int i = 0; i <= q.top(); i++) {q1.push({ -a[i], i });q2.push({ a[i], i });}vector<int> ans;int i = 0;while (!q2.empty()) {auto t = (ans.size() % 2 == 0 ? q1.top() : q2.top());int x = t[0], pos = t[1];if (ans.size() % 2 == 0) {q1.pop();x *= -1;} else {q2.pop();}ans.emplace_back(x);i = pos + 1, vis[x] = true;while ((q.top() != INT_MAX) && vis[a[q.top()]]) {int j = q.top();q.pop();for (int k = j + 1; k <= min(q.top(), n - 1); k++) {q1.push({ -a[k], k });q2.push({ a[k], k });}}while (!q1.empty() && (vis[-q1.top()[0]] || q1.top()[1] < i)) q1.pop();while (!q2.empty() && (vis[q2.top()[0]] || q2.top()[1] < i)) q2.pop();}cout << ans.size() << '\n';for (auto x : ans) cout << x + 1 << ' ';cout << '\n';}return 0;
}

赛时这个连看都没看

D

https://cspjs.online/contest/264/problem/4

容易知道,每段的元素是什么并不重要,只要知道划分方式就能推出唯一的 \(b\)。比较特殊的情况是除了开头的段与结尾的段,如果有长度为 \(2\) 的段,其等价于两个长度为 \(1\) 的段,对应的 都是 1 1 ,于是直接钦定除了开头和结尾不能出现长度为 \(2\) 的段。考虑直接 dp,\(dp_{i,j}\) 表示到了 \(i\) 划分出了 \(j\) 段,这样是 。

注意到划分出 \(k\to n\) 段的方案是等价的,因为只要求 \(1\to k\)\(a\) 中都至少出现了一次。所以只要从 \(1-k\) dp 即可。

因为转移是标准的求一个区间的和,前缀和优化即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7,K=15,p=998244353;
int n,k,f[N][K],g[N][K];
int add(int a,int b){if(a+b>=p) return a+b-p; return a+b;
}
int dec(int a,int b){if(a-b<0) return a-b+p; return a-b;
}
inline void solve(){cin>>n>>k;f[0][0]=g[0][0]=1;for(int i=1;i<=n;i++){g[i][0]=1;for(int j=1;j<=k;j++){f[i][j]=g[i-1][j-1];if(i>2&&i!=n)f[i][j]=dec(f[i][j],f[i-2][j-1]);g[i][j]=add(g[i-1][j],f[i][j]);}f[i][k+1]=add(g[i-1][k],g[i-1][k+1]);if(i>2&&i!=n)f[i][k+1]=dec(f[i][k+1],add(f[i-2][k],f[i-2][k+1]));g[i][k+1]=add(g[i-1][k+1],f[i][k+1]); }cout<<add(f[n][k],f[n][k+1])<<endl;
} 
signed main(){solve();return 0;
}

赛时没有注意到除了开头和结尾不能出现长度为 \(2\) 的段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853515.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

accounts

wait for u <3Personality - kintsgi (zeroland) Luogu : kintsgi Codeforces : pentiment (becoming zeroland), cellophane UOJ : 0land LOJ : Nickarc Vjudge : Acord145,kintsgi qoj : kintsgi,zeroland Personality - Komomo Luogu : Komomo Codeforces : 0land (bec…

DataGrip: MySQL数据库图形化开发工具

一、DataGrip介绍 DataGrip是JetBrains公司推出的管理数据库的产品,功能非常强大,可以兼容各种数据库,另外,JetBrains公司还有一款知名的IDE开发工具IDEA,用户体验非常不错。 下载地址 https://www.jetbrains.com/datagrip/download/#section=windows二、DataGrip安装 下载…

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十二周学习总结

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十一周学习总结这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 无作业正文 本博客链接教材学习内容总结 一、指针与数…

2025年知识库趋势:AI工具引领变革

随着数字化转型的深化,企业内部知识库已成为推动企业创新、提升团队协作效率的核心要素。展望2025年,企业内部知识库将呈现出哪些新趋势?AI工具又将如何在这场变革中发挥引领作用?本文旨在探讨这些问题,为企业构建未来知识管理战略提供参考。一、2025年知识库新趋势 智能化…

SkiaSharp部署到Linux不工作,提示libSkiaSharp.so找不到的解决办法

Nuget安装下面的包即可解决,SkiaSharp.NativeAssets.Linux.NoDependecies

403绕过神器: 4-ZERO-3

免责声明 本公众号分享的安全工具和项目均来源于网络,仅供学术交流,请勿直接用于任何商业场合和非法用途。如用于其它用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。介绍 4-ZERO-3 工具可绕过 403/401。此脚本包含所有可能的技术来实现相同的目的。 注意…

拉格朗日插值和数值微积分

+++ date = 2024-11-30T15:26:27+08:00 draft = true title = 拉格朗日插值和数值微积分 +++ 初次发布于我的个人文档。(每次都是个人文档优先发布哦) 本文想简要介绍和推导一下拉格朗日插值和数值积分方法。 什么是插值? 所谓的插值就是已知几个离散点的信息视图求一个满足…

linux之slb四层负载(lvs)

负载均衡-动静分离slb四层负载LVS(Linux Virtual Server) 是一个开源的负载均衡解决方案,运行在 Linux 操作系统上,用于在多个后端服务器之间分配客户端的请求,从而实现高可用性和负载均衡。它通常用于大规模网站、应用程序和微服务的架构中,适用于高并发场景,以提高系统…

CLion配置cout打印语句快捷键

点击菜单栏的 File -> Settings->Editor -> Live Templates 点击 Define,选择 C++。 点击Apply 和 OK 保存。 当我们sout时,自动出现打印语句。 本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18608801,如有侵权…

域名信息

引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其域名信息该如何收集。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.1 域名信息引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其…

Go单体服务开发最佳实践

转: https://www.cnblogs.com/kevinwan/p/16193504.html ------------------------------------------------------------------------------------------ 单体最佳实践的由来对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,并且此时用户体量也很小,QPS 也…

Adobe Bridge 2025下载与安装

1、安装包 我用夸克网盘分享了「Bridge 2025」 链接:下载地址 2、安装教程(安装前关闭系统防护) 1) 下载软件安装包,双击Set-up.exe安装2) 修改安装目录,点击继续3) 点击继续,提示正在安装进度4) 安装完成,点击启动5) 启动程序