Codeforces Round 981 (Div. 3)

文章目录

      • [A. Sakurako and Kosuke](https://mirror.codeforces.com/contest/2033/problem/A)
        • 思路:
        • Solved:
      • [B. Sakurako and Water](https://mirror.codeforces.com/contest/2033/problem/B)
        • 思路:
        • Solved:
      • [C. Sakurako's Field Trip](https://mirror.codeforces.com/contest/2033/problem/C)
        • 思路:
        • Solved:
      • [D. Kousuke’s Assignment](https://codeforces.com/contest/2033/problem/D)
        • 思路:
        • Solved:
      • [E. Sakurako, Kosuke, and the Permutation](https://mirror.codeforces.com/contest/2033/problem/E)
        • 思路:
          • Solved:
      • [F. Kosuke's Sloth](https://mirror.codeforces.com/contest/2033/problem/F)
        • 思路:
        • Solved:

A. Sakurako and Kosuke

思路:

赛时读完题就去写了一个循环去模拟两者操作并记录次数,游戏结束时奇数次操作为先手win,偶数次操作为后手win,后来发现每次操作只会向目标方向移动一格,所以如果到n格,n为奇数时,为先手者到n格,后手win,反之先手win

Solved:
void solve()
{
	int n;cin>>n;
	int x=1;
	int p=0;
	int cnt=0;
	for(int i=1;i<=10000;i++){
		if(p<-n||p>n){
			break;
		}
		if(i&1){
			p+=x;
		}else{
			p-=x;
		}
		cnt++;
		x+=2;
	}
	if(cnt&1){
		cout<<"Sakurako"<<endl;
	}else{
		cout<<"Kosuke"<<endl;
	}
}
void solve()
{
	int n;cin>>n;
	if(n&1){
		cout<<"Kosuke"<<endl;
	}else{
		cout<<"Sakurako"<<endl;
	}
}

B. Sakurako and Water

思路:

赛时读题发现只需要记录每个主对角线上最小的那个数即可,发现数据较小,直接暴力枚举了每个点及其对角线上的所有点

Solved:
void solve()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int mi=0;
			for(int k=0;k<=n;k++){
				int x=i+k,y=j+k;
				if(x>n||y>n){
					break;
				}
				if(a[x][y]<mi){
					mi=a[x][y];//只要最小的
				}
				if(a[x][y]<0){//负数改为0
					a[x][y]=0;
				}
			}
			ans+=labs(mi);
		}
	}
	cout<<ans<<endl;
}
void solve()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	int ans=0;
	//每个元素只遍历一遍 
	for(int i=1;i<=n;i++){//上三角主对角线 
		int mi=0;
		for(int j=0;j<=n;j++){
			int x=1+j,y=i+j;
			if(x>n||y>n){
				break;
			}
			mi=min(mi,a[x][y]);
		}
		ans+=labs(mi);
	}
	for(int i=2;i<=n;i++){//ctrl+v下三角 
		int mi=0;
		for(int j=0;j<=n;j++){
			int x=i+j,y=1+j;
			if(x>n||y>n){
				break;
			}
			mi=min(mi,a[x][y]);
		}
		ans+=labs(mi);
	}
	cout<<ans<<endl;
}

C. Sakurako’s Field Trip

思路:

赛时读题后想到一种暴力做法,分别枚举出本体和镜像对于左右邻居交换与不交换产生的影响,如果交换前影响 大于 交换后,就应该换,但是会出现严重的边界问题

例如:4 3 3 3 1 2 1 4 1

不论从左枚举还是从右枚举,在 3 3 3 这组数中,明显应该交换中间的3,一次就可以解决,但是如果顺序枚举左右,就会导致左边或者右边的3先进行交换

解决办法:

对于只有2或3个数,发现无论怎么交换,都无法改变他们的邻居

对于4或5个数,发现交换1,5和交换2,4他们对应的单边邻居依然是相同的

1 2 3 4 5

交换(2 , 4),1的邻居为4

交换(1 , 5),1的邻居依然为4

那么继续推,对于6或7个数单边邻居依然如此,所以只用考虑一边,递推至另一边,所有的情况就考虑完全了

Solved:
void solve()
{
	int n;cin>>n;
	a[n+1]=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int lmid=n/2,rmid=n/2+1;//1 2 3 4 根据分析,从1,4分别开始定义l,r
	if(n%2==1){//1 2 3 4 5 , 根据分析,从1,5开始
		lmid=n/2,rmid=n/2+2;
	} 	
	for(int i=lmid-1,j=rmid+1;i>=1;){
		int lst1=0,rst1=0;//交换前状态
		int lst2=0,rst2=0;//交换后状态
		if(a[i]==a[i+1]){//只考虑单边邻居
			lst1++;
		}
		if(a[j]==a[j-1]){
			rst1++;
		}
		if(a[i]==a[j-1]){
			lst2++;
		}
		if(a[j]==a[i+1]){
			rst2++;
		}	
		if(lst1+rst1>lst2+rst2){//交换状态后更优则交换
				swap(a[i],a[j]);
		}
		i--;
		j++;
	}
	int ans=0;		
	for(int i=1;i<=n;i++){//记录结果
		if(a[i]==a[i+1]){
			ans++;
		}
	}
	cout<<ans<<endl;
	return ;
}

D. Kousuke’s Assignment

思路:

对于本题来说,可以先考虑一种局部最优解情况

1 0 -1 ,肯定是选择0单独作为一段为最优,如果选择了1 0 -1,将可能会少计算一段,所以完美线段长度越短越好

例如-1 1 0 -1 1 ,此时,应该选-1 1和0 和-1 1为最优

递推到全局会发现,只要出现某一段为0,就应该将该段最小化并记录,顺序遍历即为答案

Solved:
void solve()
{
	map<int,int> mp;
	int n;cin>>n;
	int sum=0,ans=0;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		sum+=x;
		if(sum==0){
            //如果有一段sum=0,出现了完美段,记录ans,重置所有判断条件
			mp.clear();
			ans++;
			sum=0;
			continue;
		}
		if(mp[sum]>0){
            //如果在一段中sum出现了两次,就有可能在这之间+0或者加上了一对相反数如1,-1,出现了完美段,记录ans,重置所有判断条件
			mp.clear();
			ans++;
			sum=0;
			continue;
		}
		mp[sum]++;//记录此时段总和
	}
	cout<<ans<<endl;
}

E. Sakurako, Kosuke, and the Permutation

思路:

看题解有大佬给了一个置换环知识点

对于本题来说,理解一下题意会发现每个位置上最优只会存在两种状态

  • 自己与自己形成一个环 Pi = i
  • 自己与另一个位置形成一个环(2) P[ Pi ] = i P[ i ] = Pi 也就是说i , j形成一个环满足p[ i ] = j , p[ j ] = i

通过以上推断,就可以明显看出,如果满足题意,该位置可以不换,否则,应先满足第二个条件

过程中应先将每个位置的a[i]与i连接一条边,以确保在二条件更换中快速确定位置

Solved:
void solve(){
	int n;cin>>n;
	map<int,int> mp;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mp[a[i]]=i;
        //例如,1号位置为3,那么应将1号位对应的mp[1]=3,将1号位和3号位连一条边
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]==i||a[a[i]]==i){
			continue;
		}else{
            //不满足题意时,优先二条件更换
			int s=mp[i];//取出对应a[i]满足条件的点
			int t=a[i];//取出a[a[i]]
			swap(a[s],a[t]);//将a[a[i]]和a[mp[i]]交换满足二条件
			swap(mp[a[s]],mp[a[t]]);//同时交换两数在a[]中对应位置,此时a[i]号位与1号位成二元环,最优
			ans++;//记录
		}
	}
	cout<<ans<<endl;
}

F. Kosuke’s Sloth

思路:

斐波那契数列有一个性质,如果第i项是k的倍数,那么第ni项也是k的倍数

该题可以通过打表斐波那契数列找到第一个k的倍数,对应*n就是第n项

但是数据范围可能很大,需要把握好取模条件

Solved:
void solve(){
	int n,k;cin>>n>>k;
	f[1]=1;
	if(f[1]%k==0){
		cout<<n%mod<<endl;
		return ;
	}
	f[2]=1;
	int ans=0;
	for(int i=3;i<=10000000;i++){
		f[i]=(f[i-1]+f[i-2])%k;//f[i-1]+f[i-2]可能会非常大,所以在相加过程中对k取模判断
		if(f[i]%k==0){
			ans=i;
			break;	
		}
	}
	cout<<((n%mod)*(ans%mod))%mod<<endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node-RED的面板的认识及操作

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 文章引言 &#x1f4df; 面板…

jvm虚拟机介绍

Java虚拟机&#xff08;JVM&#xff09;是Java语言的运行环境&#xff0c;它基于栈式架构&#xff0c;通过加载、验证、准备、解析、初始化等类加载过程&#xff0c;将Java类文件转换成平台无关的字节码&#xff0c;并在运行时动态地将其翻译成特定平台的机器码执行。 JVM的核心…

如何尽早地发现并抵御 DDoS 攻击?

近半年&#xff0c;随着软硬件服务的廉价化、规模化&#xff0c;国内外云厂商频繁遭受不明原因的大规模网络攻击&#xff0c;给很多网站带来了不良的影响。其实&#xff0c;DDoS 攻击这把「达摩斯之剑」一直高悬在各家互联网公司的头顶&#xff0c;虽然很多互联网企业对 DDoS 攻…

「C/C++」C++ STL容器库 之 std::list 双向链表容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

使用飞桨AI Studio平台训练数据,并进行图像识别分析得牡丹花测试

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

arcgis js 怎么加载geoserver发布的wms服务

arcgis js api加载wms服务&#xff0c;官方的参考样例&#xff1a; WMSLayer | Sample Code | ArcGIS Maps SDK for JavaScript 4.30 | Esri Developer 按照官方样例加载比较奇怪&#xff0c;我们平常习惯用url或者json的方式加载&#xff0c;稍微改一下就行&#xff0c;如下…

图---java---黑马

图 概念 图是由顶点(vertex)和边(edge)组成的数据结构&#xff0c;例如 该图有四个顶点&#xff1a;A&#xff0c;B&#xff0c;C&#xff0c;D以及四条有向边&#xff0c;有向图中&#xff0c;边是单向的。 有向 vs 无向 如果是无向图&#xff0c;那么边是双向的&#x…

AWS域名注册续费详解

在当今互联网时代&#xff0c;域名是建立在线品牌和业务的重要资产。许多企业和个人选择通过Amazon Web Services&#xff08;AWS&#xff09;进行域名注册&#xff0c;享受其高效的管理工具和强大的基础设施。然而&#xff0c;很多用户在注册域名后&#xff0c;可能会产生一个…

Docker安装ShardingSphere-proxy实现读写分离

1.输入以下命令安装proxy docker run -d \ > -v /test/server/proxy-a/conf:/opt/shardingsphere-proxy/conf \ > -v /test/server/proxy-a/ext-lib:/opt/shardingsphere-proxy/ext-lib \ > -e ES_JAVA_OPTS"-Xmx256m -Xms256M -Xmn128m" \ > -p 3321:33…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备视频报警功能详解

在科技日新月异的今天&#xff0c;视频监控系统作为现代社会的“第三只眼”&#xff0c;正以前所未有的方式深刻影响着我们的生活与社会结构。从公共场所的安全监控到个人生活的记录分享&#xff0c;视频监控系统以其独特的视角和功能&#xff0c;为社会带来了诸多好处&#xf…

在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用

Starknet 和 EVM 我们所知的智能合约世界一直围绕着以太坊虚拟机&#xff08;EVM&#xff09;&#xff0c;其主要语言是 Solidity。 尽管 Starknet 通过 STARKs 为以太坊开辟了新的可能性&#xff0c;但其缺点是它有一个不同的虚拟机 (CairoVM)&#xff0c;这要求开发者学习 …

整合Mybatis-plus及最佳实践

项目引入Mybatis-plus 第一步: 引入starter依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId> </dependency>第二步: 使用MapperScan扫描mapper文件夹 SpringBootApplication Mappe…

安全知识见闻-网络类型、协议、设备、安全

网络类型、协议、设备、安全 本章节包括局域网&#xff08;LAN&#xff09;、城域网&#xff08;MAN&#xff09;和广域网&#xff08;WAN&#xff09;。此外&#xff0c;还涉及了网络协议、网络设备和网络安全的基本概念。 目录 网络类型、协议、设备、安全 一、网络类型 …

2024年项目管理新风向:敏捷开发与瀑布开发,哪个更优?

一、项目管理的多样格局 2024 年&#xff0c;项目管理领域展现出丰富多样的格局。数字化趋势愈发明显&#xff0c;项目管理软件普及度不断提高&#xff0c;据相关资料显示&#xff0c;随着云计算、大数据等技术的成熟&#xff0c;项目管理软件将更加普及&#xff0c;实现项目信…

鼠标增强工具 MousePlus v5.3.9.0 中文绿色版

MousePlus 是一款功能强大的鼠标增强工具&#xff0c;它可以帮助用户提高鼠标操作效率和精准度。该软件可以自定义鼠标的各种功能和行为&#xff0c;让用户根据自己的习惯和需求来调整鼠标的表现。 详细功能 自定义鼠标按钮功能&#xff1a;可以为鼠标的各个按钮设置不同的功能…

Spring Boot 应用开发全攻略:从入门到精通

Spring Boot 应用开发全攻略&#xff1a;从入门到精通 引言 在当今快速发展的软件开发领域&#xff0c;Spring Boot 作为一种快速开发框架&#xff0c;凭借其简洁、易用的特性&#xff0c;赢得了开发者的广泛青睐。无论是微服务架构还是传统的单体应用&#xff0c;Spring Boo…

51单片机之蜂鸣器驱动

1.简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、 复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。   压电式蜂鸣器主要…

【Unity实战笔记】第二一 · 基于状态模式的角色控制——以UnityChan为例

目录 一 内容摘要二 前言三 状态模式的必要性3.1 非状态模式的角色控制3.2 简易状态模式的角色控制3.3 状态模式3.3.1 IState3.3.2 IdleState3.3.3 RunState3.3.4 JumpState3.3.5 PlayerController_ComplexStateMode3.3.6 注意事项 3.4 SMB 四 基于SMB的角色控制4.1 项目实战案…

【NOIP提高组】 自由落体

【NOIP提高组】 自由落体 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 在高为 H 的天花板上有 n 个小球&#xff0c;体积不计&#xff0c;位置分别为 0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0e;n-1。在地面上有一个小车&…

ECMAScript 标准详解

ECMAScript 是 JavaScript 的基础标准&#xff0c;由 Ecma International 制定。它定义了脚本语言的语法和行为。自 1997 年以来&#xff0c;ECMAScript 经过了多个版本的迭代&#xff0c;每个版本都对 JavaScript 产生了深远的影响。 1. ECMAScript 1 (ES1) 发布时间&#xf…