Codeforces Round 932 (Div. 2)

A. Entertainment in MAC(Problem - A - Codeforces)

题目大意:现有一个字符串和一个偶数n,我们需要对字符串执行n次操作,每次操作有两种选择,一种是将字符串反转然后接在原字符串后面,一种是仅仅将字符串反转。需要输出进行n次操作后字典序最小的字符串。

思路:显然字符串应该越短越好,偶数次操作,如果只用来反转,那么实际相当于没有进行操作,如果进行一次反转再进行一次反转拼接,那么实际上就改变了顺序,拼接太多次没有意义,最多拼接一次就够了。那么就比较一下这两种方式得到的字符串的大小即可。实际上我们只比较原字符串和反转后的字符串即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){string s,tmp;int n;cin>>n>>s;tmp=s;reverse(s.begin(),s.end());if(tmp<=s) cout<<tmp<<endl;else cout<<s<<tmp<<endl;}
}

B. Informatics in MAC(Problem - B - Codeforces)

题目大意:现在有一个数组,我们需要把它分成若干段,保证每一段的mex值都相同。输出这若干个区间的左右边界。

思路:首先如果数组中没有0,那么显然怎么划分都可,我们随意输出即可。如果数组中有0,那么就要保证每一段中都有0,如果非要保证每一段中有且仅有一个0就太麻烦了,我们可以就将数组划分成两段,从0开始连续出现的数肯定要在两个区间中都出现,我们先从头遍历,给第一个区间找到所有必须出现的数,然后剩下的数都是第二个区间中的,如果第二个区间中所有必须出现的数都有,那么就成立,否则就不成立。

#include<bits/stdc++.h>
using namespace std;
int a[100010];
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);map<int,int>mp;for(int i=1;i<=n;i++) {int x;scanf("%d",&x);mp[x]++;a[i]=x;}if(!mp.count(0)){printf("2\n");printf("1 1\n");printf("2 %d\n",n);}else{int mx=-1;for(auto it:mp){if(it.first==mx+1) mx++;else break;}int i;set<int>s;for(i=1;i<=n;i++){if(a[i]<=mx) s.insert(a[i]);if(s.size()==mx+1) break;}int k=i;s.clear();for(i=k+1;i<=n;i++){if(a[i]<=mx) s.insert(a[i]);}if(s.size()==mx+1) {printf("2\n");printf("1 %d\n",k);printf("%d %d\n",k+1,n);}else printf("-1\n"); }}
}

C. Messenger in MAC(Problem - C - Codeforces)

题目大意:现在有n条消息,每条消息有两个花费ai,bi,我们要从中选取若干条消息(不用按顺序),给选出的消息一个下标p,要使得sum(a[p])+sum(abs(b[p]-b[p-1]))的值小于l,问最多能选多少个消息。

思路:我们来分析一下,对于a[i]没什么说的,就是加起来,对于b[i],由于求的是绝对值,所以我们可以最小化b,也就是将b排序,然后实际产生贡献的就是最大的和最小的,对结果的贡献是两者的差值。那么该如何选呢?我最开始想的是显然a对结果的影响大一些,所以我们将a排序,然后最开始将所有的都选上,然后一个一个弹出,弹到符合要求为止,但是这个思路下面这个样例没法过:

3 12

4 8

2 1

2 12

 第一个由于a=4,肯定最先被弹出,但是这题最多的情况就是选第一个和第三个。

这题如果暴搜的话时间复杂度又太高了。

其实陷入了一个误区,我们已经分析出了最关键的一个条件,对b进行排序后可以最小化b的结果,所以现在的问题就是如何选择区间,虽然我们不能暴搜枚举出所有的选择状态,但是我们实际可以枚举区间。具体一点就是,我们去枚举区间的左右端点,对于一个左端点,枚举它的所有右端点,维护一个总和,同时用一个优先队列或是多集来维护被选区间中的a和一个变量sum来维护被选a的值,当br-bl+sum>l的时候就把最大的a弹出。如果弹出的是中间的值,那么就无所谓,反正本来所选的部分就不用连续,但是如果弹出了左右边界,那么我们维护的br-bl岂不是失效了,假设我们真的弹出了左右边界,那么当前的左边界应该是l+c,右边界应该是r-d,这个区间我们在设定左边界为l+c的时候会遍历到,而且因为区间缩小了,左右边界更近了,所以实际的br-bl可能会变小,这里用一个更大的值来表示,不会多算,但是却可以帮我们访问所有的情况。显然区间固定的时候,弹出较大的a是可行的策略。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n,l;scanf("%d%d",&n,&l);vector<pair<int,int>>p;for(int i=1;i<=n;i++){int a,b;scanf("%d%d",&a,&b);p.push_back({b,a});}sort(p.begin(),p.end());int ans=0;for(int i=0;i<n;i++){int sum=0;multiset<int>s;for(int j=i;j<n;j++){int a=p[j].second,b=p[j].first;sum += a;s.insert(a);while(s.size()&&p[j].first-p[i].first+sum>l) {int tmp=*s.rbegin();sum -= tmp;s.extract(tmp);}ans=max(ans,(int)s.size());}}printf("%d\n",ans);}
}

ps:这题很巧妙,很明显是有冗余的,而且一些特殊情况会影响我们表达式的正确性,但是冗余的影响实际上是不会干扰结果的。

D. Exam in MAC(Problem - D - Codeforces)

题目大意:现给定一个大小为n的集合s和一个数c,要求选择两个数x,y,满足0<=x<=y<=c,使得x+y不在集合中,y-x也不在集合中。(有t组测试样例,t<=2e4,1<=n<=3e5,1<=c<=1e9)

思路:如果暴力的话,那么就是枚举x,y,但是c的范围太大了,显然是会超时的,所以我们要换个思路,而且还要注意到t和n的范围,我们尽量要在线性的时间复杂度内解决。既然不能直接枚举x,y判断是否符合要求,那么我们是否可以在要求的时间内得到不符合要求的点对数呢,因为很显然我们是可以得到点对的总数的,那么排除不合法的剩下的不就是合法的。我们是可以枚举集合中的每个数的,那么能否通过枚举集合中的数,将不符合要求的点对的数量统计出来呢?如果只讨论数量而不讨论具体是什么的话,显然是会重复的。

比如1,2,3我们讨论对每个数不符合要求的数(c=3):1+2+3+4=10

1:(0,1)         | (0,1)(1,2)(2,3) 

2:(0,2)(1,1)  | (0,2)(1,3) 

3:(0,3)(1,2)  | (0,3) 

我们如果只统计个数的话,(1,2)在1和3中都出现了,我们就会讨论重复

那么重复讨论的问题该怎么避免呢?我们来看为什么会重复,因为(1,2)在求和成立的时候被算了一次,在求差成立的时候又被算了一次,所以就算多了产生重复。那么我们实际上只要统计出哪些数既求和成立又求差成立,把这些数加上即可。

我们一个一个看,求和成立的话可以找出多少对呢?
对于s[i],x+y=s[i],x<=y,那么就会又s[i]/2+1对,因为从0开始计算

求差成立的话有多少对呢?
对于s[i],y-x=s[i],0<x<=y<=c,所以s[i]<=y<=c,那么就有c-s[i]+1对

都成立的话又该怎么算呢?
x+y=s[i],y-x=s[j],y=(s[i]+s[j])/2,x=(s[i]-s[j])/2,这个式子看似麻烦,似乎需要O(n^2)的时间复杂度才能解决,但是我们仔细思考一下,s[i]和s[j]的奇偶性有什么关系,显然两者奇偶性应该相同,因为x和y都是整数,那么我们统计出奇数和偶数各自的个数岂不是就可以得到它们可以产生的组合数。然后问题就解决了。 

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n,c;scanf("%d%d",&n,&c);long long res = (long long)(c+2)*(c+1)/2;int j=0,o=0;for(int i=1;i<=n;i++){int x;scanf("%d",&x);res -= x/2+1;res -= c-x+1;if(x%2) j++;else o++;}res += (long long)j*(j+1)/2;res += (long long)o*(o+1)/2;printf("%lld\n",res);}
}

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

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

相关文章

15. C++泛型与符号重载

【泛型编程】 若多组类型不同的数据需要使用相同的代码处理&#xff0c;在C语言中需要编写多组代码分别处理&#xff0c;这样做显然太过繁琐&#xff0c;C增加了虚拟类型&#xff0c;使用虚拟类型可以实现一组代码处理多种类型的数据。 虚拟类型是暂时不确定的数据类型&#…

数据中台:数字中国战略关键技术设施

文章目录 每日一句正能量前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿&#xff0c;方法论体系更新与时俱进&#xff0c;紧跟时代热点深入6大行业&#xff0c;提炼实践精华大咖推荐&#xff0c;数字化转型必备案头书购买链接赠书活动 每日一句正能量 人生之…

找不到本地组策略编辑器解决办法

创建记事本写入以下命令 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-…

Django会话

一、Cookie介绍 1.1、背景介绍 HTTP协议有一个特性就是无状态的,是指协议对于交互性场景没有记忆能力 随着动态交互的web应用的出现,HTTP的无状态特性严重阻碍了动态交互应用程序的发展,例如一些购物网站在进行购物时候都会进行了页面跳转/刷新,按照HTTP的无状态协议岂不…

Compose UI 之 MediumLarge TopAppBar

Medium&Large TopAppBar 前面文章介绍了 Small 类型的 TopAppBar&#xff1a;TopAppBar CenterAlignedTopAppBar 。下来介绍 Medium 和 Large 类型的 TopAppBar&#xff1a;MediumTopAppBar LargeTopAppBar 。 MediumTopAppBar 上面介绍了Small 类型的 TopAppBar (TopAp…

实战|环信 Vue2 uniapp Demo重构焕新!经典再升级!

项目背景 当前环信 uni-app vue2 Demo 地址升级版本 Github 地址&#xff08;临时&#xff09; 原版本功能实现方式较混乱&#xff0c;代码逻辑晦涩难懂&#xff0c;不利于开发者参考或复用。此实战项目在确保原项目功能保留的情况下进行完全重写并新增大量功能&#xff0c;以…

【C语言】指针相关知识点

什么是指针&#xff1f; 指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元&#xff0c;可以说&#xff0c;地…

Golang搭建grpc环境

简介 OS : Windows 11 Golang 版本: go1.22.0 grpc : 1.2 protobuffer: 1.28代理 没有代理国内环境下载不了库七牛CDN &#xff08;试过可用&#xff09; go env -w GOPROXYhttps://goproxy.cn,direct阿里云代理(运行grpc时下载包出现报错 ): go env -w GOPROXYhttps://mirr…

黑马点评-异步秒杀实现

异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是…

Axure Cloud如何给每个原型配置私有域名

需求 在原型发布之后&#xff0c;自动给原型生成一个独立访问的域名&#xff0c;类似http://u591bi.axshare.bushrose.cn&#xff0c;应该如何配置呢&#xff1f; 准备事项 已备案域名 如何备案&#xff1f;阿里云备案流程 已安装部署Axure Cloud 如何安装部署&#xff0c;请…

设计一个教育培训系统100问?

设计一个教育培训系统需要考虑到各个方面的因素。以下是一系列问题&#xff0c;涵盖了从需求分析到实施和评估的各个方面&#xff1a; 教育培训系统的目标是什么&#xff1f;这个系统的目标受众是谁&#xff1f;需要哪些类型的课程或培训内容&#xff1f;是否需要个性化的学习…

网页的用户登录功能

首先要在网页的前端html页面上&#xff0c;创建一个用户的登录表单。 <form class"login" id"loginStatus" method"post" action"/login"><div class"login_info">手机:<input type"tel" id"…

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题&#xff0c;但是启用主题后前端没有看到有导航菜单&#xff0c;这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…

Kafka入门及生产者详解

1. Kafka定义 传统定义&#xff1a;分布式的、基于发布/订阅模式的消息队列&#xff0c;主要用于大数据实时处理领域。发布/订阅模式中&#xff0c;发布者不会直接将消息发送给特定的订阅者&#xff0c;而是将发布的消息分为不同的类别&#xff0c;订阅者只接受感兴趣的消息。…

Linux系统Docker部署DbGate并结合内网穿透实现公网管理本地数据库

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-66GkyG9g7oNq7tl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

基于yolov5的草莓成长期检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的草莓成长期检测系统&#xff0c;支持图像检测&#xff0c;视频检测和实时摄像检测功能_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的草莓成长期检测系统是在pytorch框架下实现的&#xff0c;成长期分为3类&#xff1a;…

加密与安全_使用Java代码操作RSA算法生成的密钥对

文章目录 Pre概述什么是非对称加密算法&#xff1f;如何工作&#xff1f;示例&#xff1a;RSA算法特点和优势ECC&#xff1a;另一种非对称加密算法 Code生成公钥和私钥私钥加密私钥加密私钥解密 ( 行不通 )私钥加密公钥解密公钥加密和公钥解密 &#xff08;行不通&#xff09;保…

字符指针变量

在指针的类型中我们知道有⼀种指针类型为字符指针 char* 1.一般使用方法如下&#xff1a; int main() { char ch w; char *pc &ch; *pc w; return 0; } 2.还有⼀种使⽤⽅式如下&#xff1a; int main() { const char* pstr "hello world."; printf("…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …

Linux系统——Haproxy高性能负载均衡软件

目录 一、Haproxy介绍 1.Haproxy定义 2.Haproxy主要特性 二、安装Haproxy 1.yum安装 2.第三方rpm包安装 3.编译安装 3.1解决Lua环境 3.2编译安装Haproxy 三、配置文件详解 1.状态页 2.日志管理 2.1定义日志到其他主机站点 3.指定进程线程个数 4.cpu亲缘性 5.多进…