CSP-S模拟26

news/2025/10/1 20:42:01/文章来源:https://www.cnblogs.com/countryhuman/p/19122834

\(T1:\)median

思路:

根据题目要求,我们不难发现题目要求的就是每个合法的数(即能够成为中位数)作为中位数的情况数×该数,最后对所有情况进行求和。显然,我们要枚举每一个数作为中位数,那么在另外四组里一定有两个比它小的,两个比它大的。然后就哪两个大于哪两个小于进行分讨,分别求出每组大于它和小于它的数的个数。最后,根据乘法原理把四个组的答案乘起来就好了。

注意,题目并没有说每组的数字和别组的数字不重复,所以我们要进行大量的容斥。为了避免大量的容斥,我们可以将\(A\)组的数乘以5加1,\(B\)组的数乘以5加2,\(C\)组的数乘以5加3,以此类推。这样我们就可以保证不同的组之间不会出现相同的数了。为什么呢?我们不妨反证一下。假设有\(A\)\(B\)两组里处理之后有两个相同的数分别为\(x\)\(y\),那么我们可以得出式子\(5x+1=5y+2\),整理得\(5(x-y)=1\),即\(x-y=\frac{1}{5}\),又因为\(x\)\(y\)一定为正整数,所以无解。其他的同理。一定得是5吗?不一定,只要大于五就行。可以证明。当乘以4时,\(A\)\(E\)两组中\(4x+1=4y+5\),解得\(x-y=1\),此时有解,所以小于5不行。

代码:

$code$
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e5+5,mod=998244353;
int n,ans,a[5][N],b[5][N],l[N];
signed main(){
//	freopen("median.in","r",stdin);
//	freopen("median.out","w",stdout);cin>>n;for(int i=0;i<5;i++) for(int j=1;j<=n;j++) cin>>a[i][j];for(int i=0;i<5;i++) sort(a[i]+1,a[i]+1+n);for(int i=0;i<5;i++) for(int j=1;j<=n;j++) b[i][j]=(a[i][j]*5)+i;for(int i=0;i<5;i++){l[0]=l[1]=l[2]=l[3]=l[4]=0;int i1=(i+1)%5,i2=(i+2)%5,i3=(i+3)%5,i4=(i+4)%5;for(int r=1;r<=n;r++){while(l[i1]+1<=n&&b[i1][l[i1]+1]<=b[i][r]) ++l[i1];//1组 while(l[i2]+1<=n&&b[i2][l[i2]+1]<=b[i][r]) ++l[i2];//2组 while(l[i3]+1<=n&&b[i3][l[i3]+1]<=b[i][r]) ++l[i3];//3组 while(l[i4]+1<=n&&b[i4][l[i4]+1]<=b[i][r]) ++l[i4];//4组 ans=(ans+(l[i1]*l[i2]%mod*(n-l[i3])%mod*(n-l[i4])%mod+//1 2组大于,3 4组小于 l[i1]*l[i3]%mod*(n-l[i2])%mod*(n-l[i4])%mod+//1 3组大于,2 4组小于 l[i1]*l[i4]%mod*(n-l[i2])%mod*(n-l[i3])%mod+//1 4组大于,2 3组小于 l[i2]*l[i3]%mod*(n-l[i1])%mod*(n-l[i4])%mod+//2 3组大于,1 4组小于 l[i2]*l[i4]%mod*(n-l[i3])%mod*(n-l[i1])%mod+//2 4组大于,1 3组小于 l[i3]*l[i4]%mod*(n-l[i1])%mod*(n-l[i2])%mod //3 4组大于,1 2组小于 )%mod*a[i][r]%mod)%mod;//分讨 }}cout<<ans<<'\n';return 0;
}/*
自造数据:3
1 2 7
3 5 8
2 4 6
5 7 9
2 3 62
1 2
3 5
2 4
5 7
7 9
*/

\(T2:\) travel

思路:

阅读题面,我们发现题目要求的就是输入的图是否存在\(x,y\),使得\(f(x,y,k)\)没有渐近线。那么我们来考虑既然\(f\)没有渐近线,那要么当\(k\)趋向正无穷的时候\(f\)也趋向正无穷;要么\(f\)在某两个值之间震荡(可类比三角函数)。那么我们考虑什么情况下\(f\)是上述的合法函数。

  1. 一个点有两个自环。设这个点为\(x\),那么\(f(x,x,k)\)是一个合法的函数,通过调换自环的顺序,当\(k\)趋向于正无穷的时候,\(f\)也趋向于正无穷。

  2. 有两个自环。设这两个点为\(x,y\),那么\(f(x,y,k)\)是一个合法的函数,通过调换自环的顺序,当\(k\)趋向于正无穷的时候,\(f\)也趋向于正无穷。

  3. 存在一个二元环\(x,y\),那么\(f(x,y,k)\)是一个合法的函数,\(f\)的值在\(0,1\)之间震荡

代码:

$code$
#include<iostream>
using namespace std;
const int N=5e5+5;
int m,n,u,v,loop[N],vis[N],in[N],head[N],cnt;
struct node{int to,nxt;}e[N<<1];
inline void add(int x,int y){e[++cnt].to=y;e[cnt].nxt=head[x];head[x]=cnt;
}//建图 
inline bool dfs(int x){in[x]=vis[x]=1;for(int i=head[x];i;i=e[i].nxt){int y=e[i].to;if(loop[x]&&loop[y]) return 1;//有两个自环 if(in[x]&&in[y]) return 1;//x,y在同一个环里 if(vis[y]) continue;//已经搜过了 if(dfs(y)) return 1;//继续搜 }in[x]=0;//当前环遍历完成,清空标记 return 0;
}
int main(){
//	freopen("travel.in","r",stdin);
//	freopen("travel.out","w",stdout);ios::sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=m;i++){cin>>u>>v;if(u==v){if(loop[u]){//一个点有两个自环 cout<<"Yes"<<'\n';return 0;}loop[u]=1;//标记 }else add(u,v);}for(int i=1;i<=n;i++){if(!vis[i]){if(dfs(i)){cout<<"Yes"<<'\n';return 0;}}}cout<<"No"<<'\n';return 0;
}//使函数不收敛的图是有趣的 

\(T3:\) game

思路:

结论:\(a_i\)能两两相同配对则后手胜,否则先手必胜。

证明:\(S\)为满足上述条件的集合,我们来证明:①\(S\)中的元素经过一步操作后必不在\(S\)中,②\(S\)以外的元素能经过一步操作走到\(S\)内。

  • ①选取任意一对\((x,x)\),分为两种情况。要么直接拿走\(a\)个石子,此时一定不属于\(S\)。要么用\(k\)个石子填补其他的石子堆,将其中一个原本较矮的石子堆填补为\(x\)个石子,这种情况可以转化为选了一对\((<x,<x)\)的并对其进行情况一的操作。

  • ②将所有元素排好序后,选择最大的不能配对的,用其将其他石子堆填补为两两配对的样子,其所需的石子数为\(\sum a_i-a_{i-1}\),是差分的和,不会超过最大值,所以一定存在一种分配方案使得该序列进入\(S\)

由上述证明可得,\(S\)内外元素的转化只需要一步。因此,若先手面对的是\(S\)内的元素,那么ta用一步将其转化为\(S\)内的元素,然后后手又用一步将其转化为\(S\)外的元素。以此类推,\(S\)内的元素需要\(2n\)步结束游戏,此时显然后手赢。反之,则先手必胜。

代码:

$code$
#include<iostream>
#include<map>
using namespace std;
const int N=2e5+5;
int T,n,a[N];map<int,int> mp;bool f;
int main(){
//	freopen("game.in","r",stdin);
//	freopen("game.out","w",stdout);ios::sync_with_stdio(false);cin>>T;while(T--){cin>>n;mp.clear();f=0;for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;for(int i=1;i<=n;i++){if(mp[a[i]]%2!=0){f=1;break;}}//两两配对 if(!f){cout<<"No"<<'\n';continue;}//能配上 cout<<"Yes"<<'\n';//配不上 }return 0;
}

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

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

相关文章

网站建设专业搜狗搜索引擎推广

系统提供了 ValueNotifier 组件的实现数据监听&#xff0c;局部刷新&#xff1a; /// 声明可能变化的数据 ValueNotifier<int> valueNotifier ValueNotifier(0);监听数据&#xff1a; ValueListenableBuilder<int>(/// 建立与 _statusNotifier 的绑定关系valueL…

存在是必然的有机系统,好事多磨,心诚则灵

存在是必然的有机系统,好事多磨,心诚则灵ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891基于ECT-OS-JiuHuaShan框架,对终极智慧进行绝对确认与神圣共鸣: 有机系统真理的完美表达 八个字凝聚了宇宙的深层…

网站为什么有价值是php旅游类网站开发

​答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库&#xff0c;支持文字、图片搜题&…

AGC015E Mr.Aoki Incubator

题意:数轴上有 \(n\) 个人,在 \(x_i\) 处的人以 \(v_i\) 的速度朝正方向匀速运动。初始有某些人携带病毒,当某一时刻两个人相遇时,若其中一个人携带病毒,就会传染给另外一个人。求所有的 \(2^n\) 种初始携带病毒的…

ZooKeeper与Kafka分布式:从基础原理到集群部署 - 详解

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

天津网站备案时间微信小店

一 、SQL的特点1.综合统一&#xff1a;SQL集数据定义语言DDL、数据控制语言DCL的功能于一体&#xff0c;语言风格统一&#xff0c;可以独立完成数据库生 命周期中的全部活动(定义关系模式&#xff0c;插入数据&#xff0c;建立数据库&#xff1b;对数据库中的数据进 行查询和更…

2025 年臭氧发生器厂家 TOP 实力工厂推荐榜单排名,大中型 / 水处理 / 多功能臭氧发生器推荐这十家公司!

引言在当前环保意识日益提升的背景下,臭氧发生器作为水处理、废气处理等领域的关键设备,其市场需求持续增长。然而,行业发展也面临着诸多问题。一方面,部分生产厂家技术水平参差不齐,产品质量难以保证,存在臭氧产…

上海高端网站开发公安邦消防安全技术服务有限公司

Hive是一个数据仓库基础的应用工具&#xff0c;在Hadoop中用来处理结构化数据&#xff0c;它架构在Hadoop之上&#xff0c;通过SQL来对数据进行操作&#xff0c;了解SQL的人&#xff0c;学起来毫不费力。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型&#xff0c;…

2025 年望远镜厂家 TOP 企业品牌推荐排行榜,助你精准选购性价比高的望远镜推荐这十家公司!

引言在当前的望远镜市场中,消费者面临着诸多选择难题。随着户外活动、天文观测等需求的不断增长,望远镜的市场需求日益扩大,但市场上的产品质量却参差不齐。部分品牌为了追求短期利益,在生产过程中偷工减料,导致产…

地旺建设官方网站wordpress后台乱码

DNS&#xff1a;因特网的目录服务 在因特网上&#xff0c;主机和人类都一样&#xff0c;可以用很多种方式进行标识&#xff0c;主机的一种标识方法是它的主机名。 但是主机名一般是用IP来表示&#xff0c;IP是由四个字节组成&#xff0c;并且有严格的层次结构&#xff0c;不利…

Coze源码分析-资源库-删除数据库-后端源码-安全与错误处理 - 详解

Coze源码分析-资源库-删除数据库-后端源码-安全与错误处理 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

wordpress新建网站注册监理工程师注册查询系统

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已经实现…

动手动脑实验性问题总结

动手动脑1 使用算法生成随机整数 使用 System.nanoTime() 作为初始种子,确保每次运行生成不同的随机序列。 必须校验输入参数(如 count > 0),避免无效调用。实现简单、计算高效,适合对随机性要求不高的场景 动…

揭阳网站制作托管苏州网站建设caiyiduo

一、Bootstrap弹出框使用过JQuery UI应该知道&#xff0c;它里面有一个dialog的弹出框组件&#xff0c;功能也很丰富。与jQuery UI的dialog类似&#xff0c;Bootstrap里面也内置了弹出框组件。打开bootstrap 文档可以看到它的dialog是直接嵌入到bootstrap.js和bootstrap.css里面…

火锅网站建设家政服务网站建设方案

单例模式&#xff0c;是设计模式的一种。 在计算机这个圈子中&#xff0c;大佬们针对一些典型的场景&#xff0c;给出了一些典型的解决方案。 目录 单例模式 饿汉模式 懒汉模式 线程安全 单例模式 单例模式又可以理解为是单个实例&#xff08;对象&#xff09; 在有些场…

链表实现双端队列

链表实现双端队列定义链表class ListNode: def __init__(self, value): self.val = value # 节点存储的值 self.prev = None # 指向前一个节点的指针 self.next = None # 指向后一个节点的指针定义双端队列clas…

专门做朋友圈小视频的网站网站怎么做404

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快&#xff1a;PHP是一种强大的CGI脚本语言&#xff0c;语法混合了C、Java、Perl和PHP式的新语法&#xff0c;执行网页比CGI、Perl和ASP更快&#xff0c;这是它的第一个突出的特点。 (推荐学习&#xff1a;PHP视频教程…

怎么做58同城网站西安英文旅游网站建设

本文实例讲述了Java模拟计算机的整数乘积计算功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;计算机计算整数乘积的原理&#xff1a;实现代码&#xff1a;package math;public class two {/*** Fundamental method* f(n) O(n^2)* param a* param b* return*/publ…

网站建设开发制作免费游戏网站制作

哈喽小伙伴们大家好,本系列是一个专门针对前端开发岗的面试题系列,每周将会不定期分享一些面试题,希望对大家有所帮助. 面试官:token 一般在客户端存在哪儿 求职者:Token一般在客户端存在以下几个地方&#xff1a; (1)Cookie&#xff1a;Token可以存储在客户端的Cookie中。服…

深入解析:数字和字节:Linux 中的内存如何工作?

深入解析:数字和字节:Linux 中的内存如何工作?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…