国庆集训模拟赛记录

2025.9.26

A 序列

OI 赛制收益者,挂了 70 分。

先考虑构造一个相邻逆序对最大的序列。

最佳的序列一定是从最大数扫到最小数,每个出现次数不为 \(0\) 的数依次放入数组末尾,并将出现次数减一,扫完最小数后重新扫最大数,一直重复即可。

构造出来后,若 \([1,j]\) 的相邻逆序对个数为 \(m\),将 \([j+1,m]\) 的部分从小到大排序,消去贡献。

具体实现用 vector,可以参考代码,复杂度为 \(O(Tn\log n)\)

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int n,m,ans[N];
vector<int>t[N];
map<int,int>H;
bool cmp(int a,int b){return a>b;
}
void work(){scanf("%d %d",&n,&m);int mx=0;for(int i=1,x;i<=n;i++){scanf("%d",&x);H[x]++,mx=max(mx,H[x]);t[H[x]].push_back(x);}int idx=0;for(int i=1;i<=mx;i++){sort(t[i].begin(),t[i].end(),cmp);for(auto v:t[i]){ans[++idx]=v;}}int now=0;bool flag=0;for(int i=1;i<=n;i++){if(now==m){sort(ans+i,ans+n+1);flag=1;break;}if(ans[i]>ans[i+1])now++;}if(!flag){printf("-1\n");}else{for(int i=1;i<=n;i++)printf("%d ",ans[i]);printf("\n");}H.clear();for(int i=1;i<=mx;i++)t[i].clear();for(int i=1;i<=n;i++)ans[i]=0;return;
}
int main(){freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);int T;scanf("%d",&T);while(T--)work();return 0;
}

B 平衡数列

容易发现若所有的 \(A_i>1\),则一个平衡数列不超过 \(20\)。因为 \(2^{20}>2\times 20\),所以一定不行。

这启发我们平衡数列个数很少,记录每个位置 \(i\) 前上一个 \(A_i>1\) 的位置。枚举区间右端点 \(r\),然后往左跳 \(nxt_l\),跳的次数一定不超过 \(20\),时间复杂度为 \(O(n\log n)\)

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=2e5+10;
const ll V=5e11;
int n,a[N],pre[N],ans;
ll s[N];
int main(){freopen("bal.in","r",stdin);freopen("bal.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",a+i);s[i]=s[i-1]+a[i];}int x=0;for(int i=1;i<=n;i++){pre[i]=x;if(a[i]>1)x=i;}for(int i=1,l;i<=n;i++){ll prod=1,sum=0;int lst=i;for(int j=i;j&&prod<=V;j=pre[j]){prod*=a[j],sum+=s[lst]-s[j-1],l=pre[j];if(prod-sum>=0&&prod-sum<=j-1-l)ans++;lst=j-1;}}printf("%d\n",ans);return 0;
}

C 间谍部署

\(f_{i,j}\) 表示 \(i\) 子树内,距离 \(i\) 最近的选择的点距离 \(i\)\(j\),做一个树上背包状物即可,因为可以子树选空,所以要注意继承的情况。

时间复杂度为 \(O(n)\)

点击查看代码
#include <iostream> 
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
const int N=2e5+10;
const int mod=998244353;
int n,mk[N];
vector<int>G[N];
ll f[N][4],ans[4],sum;
void add(int x,int y){G[x].push_back(y); 
}
void dfs(int x,int fa){for(auto y:G[x]){if(y==fa)continue;dfs(y,x);for(int i=1;i<=3;i++)ans[i]=f[x][i];for(int i=0,s;i<=3;i++){s=min(3,i+1);ans[s]=(ans[s]+f[y][i])%mod;}for(int i=1,s;i<=3;i++){for(int j=0;j<=3;j++){if(i+j<2)continue;s=min(3,min(i,j+1));ans[s]+=f[x][i]*f[y][j]%mod;ans[s]%=mod;}}for(int i=1;i<=3;i++)f[x][i]=ans[i];}if(mk[x])f[x][0]=f[x][3]+1;return;
}
int main(){freopen("spy.in","r",stdin);freopen("spy.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",mk+i);for(int i=2,f;i<=n;i++){scanf("%d",&f);add(f,i),add(i,f);}dfs(1,0);for(int i=0;i<=3;i++)sum=(sum+f[1][i])%mod;printf("%d\n",sum);return 0;
}

D 小A与字符串

不难发现,字符串的循环节一定是最小循环节的倍数,所以可以求出区间最小循环节。

\(p\)\([l,r]\) 的循环节,需要满足 \([l+p,r]=[l,r-p]\),具体和 KMP 相关。可以预处理字符串 Hash 值,方便 \(O(1)\) 比较。

从小到大试倍数,直到试出第一个循环节为答案,复杂度 \(O(n\sqrt{n})\),慢。

反过来!若 \(p\) 是循环节,则一定是最小循环节的倍数,考虑逐个剔除其中质因子。

最后预处理每个数因数个数,质因子的东西,时间复杂度为 \(O(n\log n)\)

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ull;
const int N=5e5+10;
int n,m,ys[N],mk[N];
char s[N];
vector<int>pr[N];
struct Hash{ull p,pw[N],hs[N];void prework(ull Ciallo,char *s,int n){p=Ciallo,pw[0]=1,hs[0]=0;for(int i=1;i<=n;i++){pw[i]=pw[i-1]*p;hs[i]=hs[i-1]*p+s[i]-'a';}return;}ull qry(int l,int r){return hs[r]-hs[l-1]*pw[r-l+1];}
}T1,T2;
bool check(int l1,int r1,int l2,int r2){if(l1>r1)return 1;if(T1.qry(l1,r1)!=T1.qry(l2,r2))return 0;if(T2.qry(l1,r1)!=T2.qry(l2,r2))return 0;return 1;
}
void init(){T1.prework(131,s,n);T2.prework(13331,s,n);for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)ys[j]++;for(int i=2;i<=n;i++){if(mk[i])continue;for(int j=i;j<=n;j+=i){pr[j].push_back(i);mk[j]=1;	 }}return;
}
int main(){freopen("str.in","r",stdin);freopen("str.out","w",stdout);scanf("%d %d",&n,&m);scanf("%s",s+1);init();for(int i=1,l,r;i<=m;i++){scanf("%d %d",&l,&r);int x=1,y=r-l+1;for(auto v:pr[r-l+1]){while(1){if(y%v!=0)break;if(!check(l,r-y/v,l+y/v,r))break;x*=v,y/=v;}}printf("%d\n",ys[x]);}return 0;
}

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

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

相关文章

时光轴 网站百度广告联盟平台官网下载

2011年认证杯SPSSPRO杯数学建模 A题 客机水面迫降时的姿态 原题再现&#xff1a; 2009 年 1 月 15 日下午&#xff08;美国东部时间&#xff09;&#xff0c;US Airways 所属第 1549 航班&#xff08;空中客车 A320 客机&#xff09;在起飞后不久在纽约哈德逊河紧急迫降。经及…

2025 年集装袋厂家 TOP 企业品牌推荐排行榜,深度剖析优质厂家优势集装袋推荐这十家公司!

引言在当今物流与工业生产紧密相连的时代,集装袋作为一种高效、便捷且应用广泛的包装运输工具,其重要性不言而喻。从化工原料到食品谷物,从矿产资源到建材产品,集装袋几乎渗透到了各个行业领域。然而,市场上集装袋…

oppoR9m刷Linux系统: 工具、软件下载

前言全局说明刷机相关工具、软件下载一、说明 1.1 环境: Windows 7 旗舰版 OPPO R9m二、下载链接 用到的软件连接都会在这里更新 链接: https://pan.baidu.com/s/1vQ-US3SiFG8rImkdWn_amg?pwd=1111 提取码: 1111三、O…

实用指南:HTTP(web缓存与历史迭代)

实用指南:HTTP(web缓存与历史迭代)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

详细介绍:BMAD框架实践:掌握story-checklist提升用户故事质量

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

高明网站建设公司松江企业网站建设

docker run --rm -v /path/to/your/microservice:/app -w /app maven:latest mvn clean package 解释一下上面的命令&#xff1a; docker run&#xff1a;运行Docker容器。--rm&#xff1a;在容器运行结束后自动删除容器&#xff0c;避免堆积未使用的容器。-v /path/to/you…

一般做推广网站的客户需求仕什么安徽网络优化公司

ceil — 进一法取整说明float ceil ( float value )返回不小于 value 的下一个整数&#xff0c;value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float&#xff0c;因为 float 值的范围通常比 integer 要大。例子 1. ceil() 例子echo ceil(4.3); // 5echo ceil(9.999);…

2025.10.1——1橙2黄

普及- P14114 [IAMOI R4] 皇后 赛时T2,30min调出 普及/提高- P14113 [IAMOI R4] 彻底怒了 赛时T1,调了1h,服了 P14115 [IAMOI R4] 木桶效应 赛时T3,调了20min

virtualbox新版安装指定路径--7.2版本之后

本文主要介绍如何暗黄新版virtualbox虚拟机软件到指定安装路径的方法目录前言初步解决办法最终解决办法 前言 在virtualbox的7.0.12版本之后,Windows的安装路径不能随意指定,必须符合指定安全要求,默认安装路径才可…

2025 年隔音门厂家 TOP 企业品牌推荐排行榜,剧院,ktv,防火 ,软包 ,录音棚 ,静音 ,钢质 ,实验室 ,直播间隔音门推荐这十家公司!

在现代社会,随着城市化进程的加快和人们对生活品质要求的提升,隔音门的需求日益增长。然而,当前隔音门市场却存在诸多问题。市场上产品质量参差不齐,部分厂家为追求利润,偷工减料,导致隔音效果远未达到宣传标准,…

2025年算法备案咨询服务公司TOP最新推荐排行榜单,互联网信息服务,深度合成服务,ai算法备案,互联网算法备案,国家生成式人工智能服务备案咨询公司

引言随着人工智能技术的爆发式发展,算法已成为驱动互联网信息服务、深度合成服务、生成式 AI 应用等领域创新的核心动力。而算法备案作为国家规范算法应用、防范算法风险、保障用户权益的关键监管举措,正成为企业合规…

2025 年热浸塑钢管工厂 TOP 企业品牌推荐排行榜 ,nhap/NHAP/ 电力 / N-HAP/200 / 新型防腐热浸塑钢管 / 热浸塑穿线钢管 / 电力钢管 / 电力涂塑钢管推荐!

在热浸塑钢管行业,随着市场需求的不断增长,各类制造企业纷纷涌现,但行业也面临着诸多问题。部分企业为追求短期利益,在生产过程中偷工减料,导致产品质量参差不齐,防腐、耐磨等关键性能不达标,给工程安全埋下隐患…

深入解析:Python 类基础详解

深入解析:Python 类基础详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

网站单页发布wordpress标题关键词描述

解耦 解耦是指解除不同模块或系统之间的紧密关联或相互依赖关系。 在技术领域&#xff0c;通过解耦可以使各个部分相对独立地进行开发、维护和修改&#xff0c;而不会对其他部分产生过多的直接影响。 这样能提高系统的灵活性、可扩展性和可维护性。 常见解耦方式 包括&…

手机ftp传网站文件在哪里wordpress hta

怎么把mov格式的视频转换mp4&#xff1f;在这个数字化时代&#xff0c;视频已经跻身为生活的核心元素&#xff0c;然而&#xff0c;制作和分享视频时选择合适的格式变得至关重要&#xff0c;在庞大的视频格式库中&#xff0c;我们熟知的包括mov和MP4&#xff0c;它们各有特色&a…

凯里网站设计仪征网站建设公司哪家好

1、基本语法 在python中&#xff0c;一般处理和捕获异常会用到这个结构&#xff1a; try:python程序 except 错误类型1:python程序 except 错误类型2:python程序 except 其他错误类型:python程序 finally:python程序首先一定会进入try中执行try的python程序如果报错 则进入exc…

信创PC收藏网址

重磅更新 |《2025年上半年信创PC竞争力矩阵》出炉! https://mp.weixin.qq.com/s/dEnKdrKgkW6N27TUY_4J2g

AI Coding 让我两天完成图像编辑器 Monica 的国际化与多主题

AI Coding 让我两天完成图像编辑器 Monica 的国际化与多主题2025-10-01 17:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

线程同步实战指南:从 bug 根源到锁优化的终极之路 - 教程

线程同步实战指南:从 bug 根源到锁优化的终极之路 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

2025 年数据恢复系统推荐转转大师数据恢复,深度剖析各款系统平台核心优势与适用场景数据恢复系统推荐指南

行业背景2025 年中国数据恢复软件市场迎来爆发式增长,预计规模将突破 85 亿元人民币,年复合增长率达 28.6%,数字化转型加速与数据安全意识提升成为核心驱动力。技术层面,AI 智能恢复算法与分布式存储架构成为主流,…