Codeforces Round 960 (Div. 2)

比赛链接:Dashboard - Codeforces Round 960 (Div. 2) - Codeforces

A题 Submission Bait​​​​​​

题目: 


中文题面:

爱丽丝和鲍勃在大小为 n 的数组 a 中进行游戏。

他们轮流进行运算,爱丽丝先开始。不会运算的一方将输掉比赛。一开始,变量 mx 被设置为 0 。

在一次操作中,玩家可以

- 选择一个索引 i ( 1<=i<=n )。 使得 ai>=mx ,并将 mx 设置为 ai 。然后将ai设为0 。

判断爱丽丝是否有一个获胜的策略。

输入

第一行包含整数 t( 1 <= t <= 10^3 )—测试用例的数量。

对于每个测试用例:

-第一行包含整数 n( 2 <= n <= 50 )-数组的大小。

-第二行包含 n 整数 a1, a2, ..., an( 1<=ai<=n )-数组的元素。

输出

对于每个测试用例,如果 Alice 的策略获胜,则输出 "YES"。否则,输出 "NO"。

可以用任何大小写(大写或小写)输出答案。例如,字符串 "yEs"、"yes"、"Yes "和 "YES "将被识别为肯定回答。

在第一个测试案例中,爱丽丝可以选择 i=1 ,因为 a1=2 >= mx=0 。

爱丽丝操作后, a=[0,1] 和 mx=2 。鲍勃无法进行任何操作。爱丽丝获胜。

在第二个测试案例中,爱丽丝没有获胜策略。

例如,如果爱丽丝选择了 i=1 ,那么在爱丽丝的操作之后, a=[0,1] 和 mx=1 。那么,鲍勃可以选择 i=2 ,因为 a2=1>=mx=1 。鲍勃操作后 a=[0,0] 和 mx=1 。爱丽丝无法进行任何操作。鲍勃获胜。


解题思路:

由样例来看,我们从数组中最大的数来看,如果最大的数的个数是奇数个,那么必赢,因为,爱丽丝先拿一个最大的数,由于ai>=mx 条件限制,鲍勃也必然拿一个最大的数,最大的数的个数是奇数个,最后一个最大的数必然被爱丽丝拿完,获胜。如果是偶数个,爱丽丝也不必然输,看第二大的数的个数,如果是偶数,那么爱丽丝也是获胜。比如最大数的个数为2个,第二大的个数为3个,爱丽丝先拿第二大的数,鲍勃拿第二大的数,爱丽丝再拿第二大的数,由于条件限制鲍勃只能拿最大的数,最大的数还剩余1个最后被爱丽丝拿走,爱丽丝获胜。由此我们可知,只要数组中有一个数的个数为奇数个那么爱丽丝必然胜利,否则则输。


AC代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=55;
int a[N];
int t,n,m;
bool flag;
int main(){cin>>t;while(t--){cin>>n;flag=0;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1);for(int i=n;i>=1;i--){int len=upper_bound(a+1,a+n+1,a[i])-lower_bound(a+1,a+n+1,a[i]);//计算此数的个数if(len%2==1){//如果是奇数个数必赢flag=1;break;}}//如果都是偶数个数必输if(flag==1){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}

B题 Array Craft

题目:

中文题面:

输入

第一行包含一个整数 t ( 1 <= t <= 10^4 ) - 测试用例的数量。

对于每个测试用例

- 唯一一行包含三个整数 n 、x 和 y( 2 <= n <= 10^5, 1 <= y < x <= n) .

保证所有测试用例中 n 的总和不超过 10^5 。

输出

对于每个测试用例,在新的一行中输出 n 空格分隔的整数 a1, a2, ..., an。


解题思路:

由题意可知,最大前缀和跟最大后缀和的下标都应该置为1,因为必然走到这个点,如果是-1,那么总和会减小,必然不走。题中最大前缀和下标大于最大后缀和下标,说明两者有重合的部分,这一部分都是必然走的,总和一定是大于0的,不妨我们把它们都置为1,再分为[1,y-1]、[x+1,n],这两个区间对总和起副作用,一定是小于0的,我们按照 -1 1的顺序给其赋值,如果是偶数个,那么总和为0不起作用,如果是奇数个,总和为-1,也可以满足条件。

综上所述,可以分为三个区间


AC代码:
#include<iostream>
using namespace std;
const int N=1e5+5;
int t,n,x,y;
int a[N];
int main(){cin>>t;while(t--){cin>>n>>x>>y;for(int i=x+1;i<=n;i+=2)a[i]=-1;//[x+1,n]置 -1 1 for(int i=x+2;i<=n;i+=2)a[i]=1;for(int i=y-1;i>=1;i-=2)a[i]=-1;//[1,y-1]置 -1 1for(int i=y-2;i>=1;i-=2)a[i]=1;for(int i=y;i<=x;i++)a[i]=1;//[y,x]置 1for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;}return 0;
}

C题 Mad MAD Sum

题目:

 

 


解题思路:

经过对样例的分析,我们发现b数组是单调递增的。而且只有出现两个重复的的数MAD才有意义,样例中a=2 2 3 一轮过后, a=0 2 2 两轮过后 a=0 0 2 三轮过后 a=0 0 0,我们发现数组具有右移的特征。我们先MAD模拟一轮后,不断去掉单个数字,右移,加和得到答案。


AC代码:
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll n,t,a,b,c,sum;
int p1[N],p2[N];
int main() {cin>>t;while(t--) {cin>>n;sum=a=b=c=0;memset(p1,0,sizeof(p1));memset(p2,0,sizeof(p2));while(n--) {cin>>a;if(p1[a]) b=max(b,a);else p1[a]=1;if(p2[b]) c=max(c,b);else if(b) p2[b]=1;sum+=a+b+(n+1)*c;}cout<<sum<<endl;}return 0;
}

D题 Grid Puzzle

题目:

您将得到一个大小为 n 的数组 a 。

有一个 n*n 网格。

在第 i 行中,第一个 ai 单元格为黑色,其他单元格为白色。换句话说,注意 (i,j) 作为第 i行和第 j 列中的单元格,单元格 (i,1), (i,2), ..., (i,ai)为黑色。并且单元格(i,ai+1), ..., (i,n) 是白色的。您可以按任意顺序多次执行以下操作:

-将 2 * 2 网格染成白色

-把整排都染成白色。

请注意,您不可以将整个列染成白色。

找出将所有单元格染成白色所需的最少操作次数。


解题思路:

经过对样例的分析,我们可以知道这个题要根据此行有多少个黑色格子来选择使用操作几,我们从样例分析来看,当一行中黑色格子大于等于5个的时候,操作二就更优了,因为如果大于等于五个黑色格子,那么只少要用三个操作一才能满足考虑对上一行跟下一行的影响,如果上一行跟下一行只有小于等于2个黑色格子,那么可以满足,如果都大于2个,那么还需要一次操作一,这无非增加了次数。剩下的只用操作一解决即可。还一种特殊情况当上一行为都是白色时,且3<=a<=4的格子数,用操作二比较好,这一点在样例9中就有体现。

其次还有一点需要注意,操作一分左右两个操作一,可以看这组样例

3
1 3 1

 

很明显,右边的操作一对下一行不起作用,那么我们就要进行分类讨论了,如果是这一行的左边操作一,对下一行一定有用(除空行),如果是右边操作一,那么可以有用,当下一行黑色格子数大于等于3就起作用了。 


AC代码:
#include<iostream>
#define int long long 
using namespace std;
const int N=2e5+5;
int n,T;
int a[N];
signed main(){ios::sync_with_stdio(0);cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int flag=0,ans=0;//flag表示进行操作几 ans表示答案//flag 0没有操作、1靠左边操作1、-1靠右边操作1、2操作2for(int i=1;i<=n;i++){if(a[i]==0){//如果全是白色,不需要操作flag=0;}else if(a[i]<=2){//1--2个黑色if(flag==1){//上一行进行了一次操作1flag=0;}else ans++,flag=1;//进行一次操作1}else if(a[i]<=4){//3--4个黑色if(flag==0)ans++,flag=2;//上一行没有操作,进行一次操作2else if(flag==1)ans++,flag=-1;//上一行进行了操作1(左边),还需进行一次(右边)else if(flag==-1)ans++,flag=1;//上一行进行了操作1(右边),还需进行一次(左边)else ans++,flag=2;}else ans++,flag=2;//更多的话进行操作2更优}cout<<ans<<endl;}return 0;
}

剩余题目待更中......

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 SvgIcon组件开发

在前面自定义tree组件继续功能迭代前&#xff0c;我们先开发一个通用的ScgIcon组件&#xff0c;用于后续组件模板中小图标的展示。 引入iconfont 官网&#xff1a;https://www.iconfont.cn/ 选取图标进行下载&#xff0c;只取iconfont.js文件 在prettier中忽略该文件&#x…

Performance Metrics in Evaluating Stable Diffusion Models

1.Performance Metrics in Evaluating Stable Diffusion Models 笔记来源&#xff1a; 1.Performance Metrics in Evaluating Stable Diffusion Models 2.Denoising Diffusion Probabilistic Models 3.A simple explanation of the Inception Score 4.What is the inception s…

【笔记:3D航路规划算法】一、RRT

目录 关键概念3D路径规划算法1. A*算法2. RRT1. 初始化&#xff1a;2. 实例化搜索算法&#xff1a;3. 路径生成&#xff1a;4. 绘制图像&#xff1a; 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实等…

【BUG】已解决:ValueError: All arrays must be of the same length

ValueError: All arrays must be of the same length 目录 ValueError: All arrays must be of the same length 【常见模块错误】 【解决方案】 问题原因 解决方法 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&…

SolidWorks 二次开发--创建属性页面及控件事件(二)

在前文中我们学习了如何创建和显示属性页面&#xff0c;本章节将重点介绍如何向属性页面中添加控件。控件是属性页面的基本组成部分&#xff0c;可以是文本框、按钮、复选框等&#xff0c;用于用户交互和数据展示。接下来我们将看到如何定义、配置和操作这些控件&#xff0c;让…

边缘设备使用记录--阿加犀AIBox 6490(realsense+yolox部署)

边缘设备使用记录--阿加犀AIBox 6490:realsenseyolox部署 前言Realsense SDK ROSYOLOx部署预处理后处理可视化ROS节点 总结 前言 由于6490这个板子是有type-c接口的&#xff0c;所以这里准备用RealsenseYOLOx来先简单做一个实时的目标检测的东西出来&#xff0c;这里也用到上…

数据开发/数仓工程师上手指南(一)数仓概念总览

前言 笔者毕业最开始从事的就是大数据开发和数据仓库建设工作&#xff0c;途中曾担任过人工智能工程师和计算机视觉工程师&#xff0c;没想到最后兜兜转转还是回到了最原本的工作数据开发工程师。但很少有写关于本职工作的技术内容输出。 之前笔者撰文内容大部分都是关于算法…

echarts里面的option的详细讲解

option4 {// 鼠标移动提示框tooltip: {// 触发类型&#xff08;item&#xff1a;用于散点图、饼图。axion&#xff1a;用于柱状图、折线图。none:什么都不触发&#xff09;trigger: axis,// 提示框内排序order: seriesDesc,// 提示框背景颜色backgroundColor: "#FF5800&q…

python easygui库常用方法介绍

msgbox() 弹出对话框 这是最基本的弹出对话框&#xff0c;用于显示简单的消息或提示。例如&#xff1a; import easygui easygui.msgbox("欢迎使用EasyGUI!") buttonbox() 带有多个按钮的对话框 它会显示一个带有多个按钮的对话框&#xff0c;用户点击后返回所选…

“探求新质生产力 推进中国式现代化”学习交流活动在河北廊坊举办

7月21日&#xff0c;一场以“探求新质生产力 推进中国式现代化”为主题的学习交流活动在河北省廊坊市举办&#xff0c;2000余名企业界人士共同探讨企业发展的新路径与新动力。 7月21日&#xff0c;“探求新质生产力 推进中国式现代化”学习交流活动在河北省廊坊市举办。图为活动…

【无人机】测绘行业新时代

【无人机】测绘行业新时代 无人机测绘主要指的是依托无人机系统为主要的信息接收平台&#xff0c;通过无人机机载遥感信息采集和处理设备&#xff0c;将最终所获取的遥感信息传输到测绘中心&#xff0c;经过数据技术处理&#xff0c;形成立体化的数字模型&#xff0c;以满足行…

【C++】学习笔记——哈希_2

文章目录 十八、哈希3. 实现哈希表哈希表的存储节点哈希函数哈希表的定义哈希表的插入哈希表的查找哈希表的删除测试函数完整代码结果 未完待续 十八、哈希 3. 实现哈希表 哈希表的实现方法有蛮多种&#xff0c;这里我们选一个比较经典的开散列法来实现哈希表。由于STL库里的…

免费【2024】springboot北京医疗企业固定资产管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

学术研讨 | 区块链网络体系结构研讨会顺利召开

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 近日&#xff0c;国家区块链技术创新中心组织了“区块链网络体系结构研讨会”&#xff0c;会议面向跨域交互多、计算规模大、数据管理复杂、性能与扩展性要求高等特征的区块链网络的体系结构展开交流研讨&…

linux下磁盘分区工具GParted

最近发现安装的redhat机器部分磁盘大小分配不合理 使用gpated对磁盘重新分区 1、使用U盘制作一个启动盘 下载启动盘制作工具Index of /downloads 使用非常简单&#xff0c;选择gparted-live-1.1.0-3-i686.iso包即可 2、制作完成后&#xff0c;重启机器&#xff0c;选择U盘…

【测开能力提升-Javascript】JavaScript运算符流程结构

1. 递增递减运算符 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script>// 前置递增运算符var age10age //类似于ageage1&#xff0c; 先加1后返回值alert(age)// 后置…

VUE3学习第二篇:报错记录

1、在我整理好前端代码框架后&#xff0c;而且也启动好了对应的后台服务&#xff0c;访问页面&#xff0c;正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场&#xff0c;使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…

JAVA.4.继承

1.特点 java只支持单继承&#xff0c;一个儿子继承一个父亲 但可以多层继承&#xff0c;a继承b&#xff0c;b继承c b是a的直接父类&#xff0c;c是a的间接父类 每个类都直接或者简介继承Object&#xff0c;不写继承就默认继承它 2.注意事项 构造方法 父类的构造方法&#…

Java实现七大排序(二)

一.交换排序 1.冒泡排序 这个太经典了&#xff0c;每个学编程都绕不开的。原理跟选择排序差不多&#xff0c;不过冒泡排序是直接交换。 public static void bubbleSort(int[] array){for (int i 0; i < array.length - 1; i) {for (int j 0; j < array.length-1-i; j…

unity2D游戏开发02添加组件移动玩家

添加组件 给PlayGame和EnemyObject添加组件BoxCollider 2D碰撞器&#xff0c;不用修改参数 给PlayGame添加组件Rigibody 2D 设置数据 添加EnemyObject&#xff0c;属性如下 Edit->project setting->Physics 2D 将 y的值改为0 给playerObject添加标签 新建层 将PlayerObj…