Codeforces Round 960 (Div. 2)(ABCD)

C o d e f o r c e s R o u n d 960 ( D i v . 2 ) \Huge{ Codeforces Round 960 (Div. 2)} CodeforcesRound960(Div.2)

文章目录

  • Problems A. Submission Bait
    • 题意
    • 思路
    • 标程
  • Problems B. Array Craft
    • 题意
    • 思路
    • 标程
  • Problems C. Mad MAD Sum
    • 题意
    • 思路
    • 标程
  • Problems D. Grid Puzzle
    • 题意
    • 思路
    • 标程

题目链接:Codeforces Round 960 (Div. 2)

Problems A. Submission Bait

题意

给出一个数组,Alice和Bob每次可以选择一个数字,且每次选择的数字不小于上一个人选择的数字。然后将其变为0。

最后无法进行选择的人输掉比赛。

思路

Alice先手,若最大数的个数为奇数,那么Alice赢,若为偶数,考虑第二大数字的个数,以此类推。

标程

#include<bits/stdc++.h>using namespace std;
void Solved() {int n; cin >> n;vector<int> a(n + 1);for(int i = 1; i <= n; i ++ ) cin >> a[i];sort(a.begin() + 1, a.end(), [](int n1, int n2) {return n1 > n2;});int x = 0, mx = a[1], z = 1;for(int i = 1; i <= n;  i ++ ) {if(mx == a[i]) x ++;else {if(x % 2 == z) {cout << "YES\n"; return;} else {x = 1; mx = a[i];}}}if(x % 2 == z) cout << "YES\n";else cout << "NO\n"; 
}signed main(void) {int ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}

Problems B. Array Craft

题意

给出数组b,然后给出两个定义:

  1. 最大前缀位置:满足 b 1 + … + b i = max ⁡ j = 1 m ( b 1 + … + b j ) b_1+\ldots+b_i=\max_{j=1}^{m}(b_1+\ldots+b_j) b1++bi=maxj=1m(b1++bj)的最小索引 i i i
  2. 最大后缀位置:满足 b i + … + b m = max ⁡ j = 1 m ( b j + … + b m ) b_i+\ldots+b_m=\max_{j=1}^{m}(b_j+\ldots+b_m) bi++bm=j=1maxm(bj++bm)的最小索引 i i i

然后给出三个整数 n , x , y n,x,y n,x,y,分别表示数组大小,最大前缀位置,最大后缀位置。

思路

根据 x , y x,y x,y的相对位置直接模拟就行。

根据定义, a X = a y = 1 a_X=a_y=1 aX=ay=1,对于 x x x,从 x x x开始的 ( 1 ≤ i ≤ x ) (1\le i \le x) (1ix)的前缀和必然大于 1 1 1,从 x x x开始的 ( x ≤ i ≤ n ) (x\le i \le n) (xin)的前缀和必然小于 1 1 1 y y y也同理。

标程

#include<bits/stdc++.h>using namespace std;void Solved() {int n, x, y; cin >> n >> x >> y;vector<int> a(n + 1);a[x] = a[y] = 1;if(x <= y) {int x1 = 0;for(int i = x; i >= 1; i -- ) {if(x1 < 1) a[i] = 1, x1 ++;else a[i] = -1, x1 --;}for(int i = x + 1; i < y; i ++ ) {a[i] = -1;}x1 = 0;for(int i = y; i <= n; i ++ ) {if(x1 < 1) a[i] = 1, x1 ++;else a[i] = -1, x1 --;}} else {int x1 = 1;for(int i = y - 1; i >= 1; i -- ) {if(x1 >= 1) a[i] = -1, x1 --;else a[i] = 1, x1 ++;}for(int i = y + 1; i < x; i ++ ) {a[i] = 1;}x1 = 1;for(int i = x + 1; i <= n; i ++ ) {if(x1 >= 1) a[i] = -1, x1 --;else a[i] = 1, x1 ++;}}for(int  i= 1 ; i <= n; i ++ ) {cout << a[i] << ' ';} cout << endl;
}signed main(void) {int ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}

Problems C. Mad MAD Sum

题意

给出定义: M A D MAD MAD(最大显示重复数)在数组中出现至少两次的最大数。具体来说,如果没有出现至少两次的数字,则 M A D MAD MAD 0 0 0

循环执行下列操作:

  1. s u m = s u m + ∑ i = 1 n a i sum=sum+\sum_{i=1}^{n}{a_i} sum=sum+i=1nai
  2. b i = M A D ( a 1 , a 2 … a n ) b_i=MAD(a_1,a_2…a_n) bi=MAD(a1,a2an)
  3. a i = b i ( 1 ≤ i ≤ n ) a_i=b_i(1\le i \le n) ai=bi(1in)

当数组 a a a全为0时结束循环,求sum的大小。

思路

手动模拟一次即可发现,只需一次循环,数组a就会变为不严格的升序 a i ≤ a i + 1 ( 1 ≤ i ≤ n − 1 ) a_i\le a_{i + 1}(1\le i\le n-1) aiai+1(1in1)

设第一次手动模拟后的数组为b_1,那么b_1中除了最后一位,其他位可能会出现单个数字的情况(即相邻两个数都不同),且现在b_i为升序,那么这一位在下一次循环后就不存在了。

但第二次循环之后,b_2除最后一位,其他位不可能出现上述情况。

b_1之所以会出现单个数字的情况,是因为循环前原数组可能是无序的。

b_2不会出现这种情况就是因为b_1是有序的。

规律可以观察下列两种情况:

a : [ 4 , 5 , 3 , 3 , 3 , 3 , 4 , 5 ] a:[4,5,3,3,3,3,4,5] a:[4,5,3,3,3,3,4,5] a : [ 4 , 4 , 5 , 5 , 6 , 6 ] a:[4,4,5,5,6,6] a:[4,4,5,5,6,6]
b 1 : [ 0 , 0 , 0 , 3 , 3 , 3 , 4 , 5 ] b_1:[0,0,0,3,3,3,4,5] b1:[0,0,0,3,3,3,4,5] b 1 : [ 0 , 4 , 4 , 5 , 5 , 6 ] b_1:[0,4,4,5,5,6] b1:[0,4,4,5,5,6]
b 2 : [ 0 , 0 , 0 , 0 , 3 , 3 , 3 , 3 ] b_2:[0,0,0,0,3,3,3,3] b2:[0,0,0,0,3,3,3,3] b 2 : [ 0 , 0 , 4 , 4 , 5 , 5 ] b_2:[0,0,4,4,5,5] b2:[0,0,4,4,5,5]
b 3 : [ 0 , 0 , 0 , 0 , 0 , 3 , 3 , 3 ] b_3:[0,0,0,0,0,3,3,3] b3:[0,0,0,0,0,3,3,3] b 3 : [ 0 , 0 , 0 , 4 , 4 , 5 ] b_3:[0,0,0,4,4,5] b3:[0,0,0,4,4,5]
b 4 : [ 0 , 0 , 0 , 0 , 0 , 0 , 3 , 3 ] b_4:[0,0,0,0,0,0,3,3] b4:[0,0,0,0,0,0,3,3] b 4 : [ 0 , 0 , 0 , 0 , 4 , 4 ] b_4:[0,0,0,0,4,4] b4:[0,0,0,0,4,4]
b 5 : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3 ] b_5:[0,0,0,0,0,0,0,3] b5:[0,0,0,0,0,0,0,3] b 5 : [ 0 , 0 , 0 , 0 , 0 , 4 ] b_5:[0,0,0,0,0,4] b5:[0,0,0,0,0,4]

通过规律,我们可以先处理出来前两次循环,然后直接计算即可

标程

#include<bits/stdc++.h>
using namespace std;#define int long long void Solved() {int n; cin >> n;vector<int> a(n + 1);for(int i = 1; i <= n; i ++ ) cin >> a[i];int mx = 0, res = 0;for(int j = 0; j < 2; j ++ ) {map<int, int> mp;mx = 0;for(int i = 1; i <= n; i ++ ) {res += a[i];mp[a[i]] ++;if(mp[a[i]] >= 2) mx = max(mx, a[i]);a[i] = mx;}}for(int i = 1; i <= n; i ++ ) {res += a[i] * (n - i + 1);}cout << res<< endl;    
}signed main(void) {int ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}

Problems D. Grid Puzzle

题意

给出一个数字n,然后给出一个长度为 n n n的数组 a a a。数组a表示在一个大小为 n × n n\times n n×n的矩阵中,第i行的前 a i a_i ai各元素是黑色。

先有下列两种操作,每次只能选择一个执行:

  1. 选择一个 2 × 2 2\times 2 2×2的矩阵,并将其变为白色。
  2. 选择任意一行,将其全变为白色。

问最少操作多少次,可以将整个 n × n n\times n n×n的矩阵全变为白色。

思路

  1. 容易发现,如果当前行 a i > 4 a_i > 4 ai>4,那么显然使用一次操作2最优。

  2. 如果相邻两行 a i ≤ 2 a_i \le 2 ai2,那么使用操作1最优,因为可能消除下一行。

  3. 如果当前的 a i ≤ 4 a_i\le 4 ai4,那么可能用操作1,也可能是操作2;此时若下一行 a i + 1 ≤ 4 a_{i+1}\le 4 ai+14,那么考虑当前使用操作1。

综上,我们可以用 f i f_i fi表示前i行的最优解, g i g_i gi记录上述(3)的情况,然后进行状态转移即可。最后 f [ n ] f[n] f[n]即为结果。

标程

#include<bits/stdc++.h>
using namespace std;const int mod = 1e9 + 7;void Solved() {int n; cin >> n;vector<int> a(n + 1), f(n + 1), g(n + 1, mod);;int res = 0;for(int i = 1; i <= n; i ++ ) cin >> a[i];for(int i = 1; i <= n; i ++ ) {f[i] = f[i - 1] + (a[i] > 0);                   //默认都用操作2if(a[i] <= 2) {                                 //这类情况可以判断是否用操作1g[i] = min(g[i], f[i - 1] + 1);f[i] = min(f[i], g[i - 1]);					//考虑将上一行的染色方式改为操作1}if(i + 1 <= n && a[i] <= 4 && a[i + 1] <= 4) {  //这类情况用两次操作1最优g[i + 1] = g[i - 1] + 2;}}cout << f[n]<< endl;
}signed main(void) {int ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}

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

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

相关文章

软件测试----概念篇(笔试相关,一般考察开发模型和测试模型的特点及适用场景)

文章目录 前言一、需求二、开发模型1.什么是“模型”2.软件的生命周期3.常见开发模型瀑布模型螺旋模型增量模型、迭代模型敏捷模型 三、测试模型V模型W模型(双V模型&#xff09; 前言 在当今软件行业飞速发展的时代&#xff0c;软件测试已成为软件质量保障的重要环节。它贯穿于…

数字转换(树形DP)

如何对一个问题挖掘信息把它变成已知的问题十分重要&#xff0c;这一题恰恰体现这一点&#xff1a; https://www.acwing.com/problem/content/1077/ 首先&#xff0c;对于一个数x&#xff0c;它对应一个其约数之和y&#xff0c;同时他们可以相互转换&#xff0c;于是我们可以…

WhisperX

文章目录 一、关于 WhisperX新闻 &#x1f6a8; 二、设置⚙️1、创建Python3.10环境2、安装PyTorch&#xff0c;例如Linux和Windows CUDA11.8&#xff1a;3、安装此repo4、Speaker Diarization 三、使用&#x1f4ac;&#xff08;命令行&#xff09;1、English2、他语言例如德语…

前端TS高阶篇

本次一共推出三篇文章,TS基础篇、TS高阶篇、TS习题篇,三篇文章均已发布。 语法篇 1. 联合类型的问题 interface a1{kind:circle | squarerad?:numberside?:number }function getAre(a:a1){// return a.rad*3 //此处报错,因为 rad 为可选参数,可能未定义return a.rad…

Cyber Weekly #16

赛博新闻 1、OpenAI 发布 GPT-4o mini OpenAI 本周官宣推出 GPT-4o mini&#xff0c;这是 GPT-4o 更小参数量的简化版本。ChatGPT 的免费用户、Plus 用户和 Team 用户能使用 GPT-4o mini 而并非 GPT-3.5 Turbo&#xff0c;企业用户在下周也将获得 GPT-4o mini 的权限。GPT-4o…

少儿编程启蒙宝典:Scratch动画游戏108变

一、编程教育的时代价值与意义 随着数字时代的深入发展&#xff0c;社会对人才的需求正发生深刻变革&#xff0c;计算思维与编程能力已成为衡量个人竞争力的重要指标。在此背景下&#xff0c;培养孩子们运用计算思维解决实际问题的能力&#xff0c;成为教育领域的重要任务。编…

UE4-获得角色控制权的两种方法

方法一&#xff1a; 方法二&#xff1a; 注意此方法不能有多个玩家出生点&#xff0c;如果有多个玩家出生点&#xff0c;会随机的选择一个玩家出生点进行生成。

IP5306移动电源DIY

最近制作一款移动电源&#xff0c;芯片采用的是IP5306

JavaScript 如何判断 URL 是否合法

目录 一、使用正则表达式验证 URL&#xff1a; 二、利用HTML5的URL对象 三、使用元素判断URL 四、最靠谱方法 一、使用正则表达式验证 URL&#xff1a; function isValidUrl(url) {const regex /^(https?:\/\/)?([\da-z\.-])\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;return…

UDP详细总结

UDP协议特点 UDP是无连接的传输层协议&#xff1b; UDP使用尽最大努力交付&#xff0c;不保证可靠交付&#xff1b; UDP是面向报文的&#xff0c;对应用层交下来的报文&#xff0c;不合并&#xff0c;不拆分&#xff0c;保留原报文的边界&#xff1b; UDP没有拥塞控制&#…

python实现图像对比度增强算法

python实现直方图均衡化、自适应直方图均衡化、连接组件标记算法 1.直方图均衡化算法详解算法步骤公式Python 实现详细解释优缺点 2.自适应直方图均衡化算法详解算法步骤公式Python 实现详细解释优缺点 3.连接组件标记算法详解算法步骤8连通与4连通公式Python 实现详细解释优缺…

微服务实现全链路灰度发布

一、实现步骤 再请求 Header 中打上标签&#xff0c;例如再 Header 中添加 "gray-tag: true" &#xff0c;其表示要进行灰度测试&#xff08;访问灰度服务&#xff09;&#xff0c;而其他则访问正式服务。在负载均衡器 Spring Cloud LoadBalancer 中&#xff0c;拿到…

Deepin系统,中盛科技温湿度模块读温度纯c程序(备份)

#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <termios.h>int main() {int fd;struct termios options;// 打开串口设备fd open("/dev/ttyMP0", O_RDWR | O_NOCTTY|O_NDELAY); //O_NDELAY:打开设备不阻塞//O_NOCTT…

Qt Creator配置以及使用Valgrind - 检测内存泄露

Qt Creator配置以及使用Valgrind - 检测内存泄露 引言一、下载安装1.1 下载源码1.2 安装 二、配置使用2.1 Qt Creator配置2.2 使用2.3 更多详细信息可参考官方文档&#xff1a; 三、参考链接 引言 Valgrind是一个在Linux平台下广泛使用的开源动态分析工具&#xff0c;它提供了一…

7Python的Pandas:基础操作

Pandas 是一个强大的 Python 数据分析工具库&#xff0c;它提供了许多便利的数据结构和数据操作方法。以下是一些常见的 Pandas 基础操作&#xff1a; 导入 Pandas 库&#xff1a; import pandas as pd创建 DataFrame&#xff1a; data {Name: [Alice, Bob, Charlie], Age: [2…

开启你的 Django 开发之旅:从环境搭建到服务部署

欢迎来到这个关于如何使用 Django、MySQL、HTML、CSS、Bootstrap、jQuery 和 ECharts 构建一个全栈 Web 应用的指南。在这个博客中&#xff0c;我们将从零开始&#xff0c;一步步地搭建开发环境&#xff0c;并最终将服务部署到 Linux 系统上。 本篇进介绍大概得步骤&am…

任务2:python+InternStudio 关卡

任务地址 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Python/task.md 文档 https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Python 任务 Python实现wordcount import re import collectionstext """ Got this panda plush to…

【机器学习】智能驱动未来:机器学习在能源效率提升与环境管理中的创新应用

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习能源环境领域的应用潜力&#x1f304;能源效率提升&#x1f3de;️环境管理⛰️具体案例…

Linux之旅:常用的指令,热键和权限管理

目录 前言 1. Linux指令 &#xff08;1&#xff09; ls &#xff08;2&#xff09; pwd 和 cd &#xff08;3&#xff09;touch 和 mkdir &#xff08;4&#xff09; rmdir 和 rm &#xff08;5&#xff09;cp &#xff08;6&#xff09;mv &#xff08;7&#xff09;…

开发工具推荐:await-to-js

目录 前言&#xff1a; 1. .then().catch() 2. async await 3. await-to-js 前言&#xff1a; 今天给大家推荐一块我觉得用着还不错的工具&#xff0c;await-to-js&#xff1b; await-to-js - npm GitHub - scopsy/await-to-js: Async await wrapper for easy error ha…