Codeforces Round 481 (Div. 3)

本场比赛也是没有考察什么算法重点在于思维模式

目录

A. Remove Duplicates

B. File Name

C. Letters

D. Almost Arithmetic Progression

E. Bus Video System

F. Mentors

G. Petya's Exams


A. Remove Duplicates

要求我们从右边开始保留数,我们可以考虑的就是用map来保存第一个出现的,然后倒着输出即可

void solve(){cin>>n;vector<int> a(n);for(auto&v:a) cin>>v;vector<int> ans;map<int,int> mp;for(int i=n-1;i>=0;i--){if(mp.count(a[i])) continue;ans.push_back(a[i]);mp[a[i]]++;} cout<<ans.size()<<endl;for(int i=ans.size()-1;i>=0;i--) cout<<ans[i]<<' ';cout<<endl;return ;
}

B. File Name

从字符中把三个以上的x删掉最多连续两个,明显的对于x我们使用双指针来维护即可

void solve(){cin>>n;string s; cin>>s;s=' '+s;int ans=0;for(int i=1;i<=n;i++){int j=i;if(s[j]=='x'){while(j<=n && s[j]=='x') j++;j--;ans+= max(0,j-i+1-2);i=j; }}cout<<ans<<endl;return ;
}

C. Letters

最为经典的前缀和加二分处理,注意我们找到比现在大于等于的然后减去前面的就好了

void solve(){cin>>n>>m;vector<LL> a(n+5);for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];while(m--){LL x; cin>>x;int l=1,r=n;while(l<r){int mid=l+r>>1;if(a[mid]>=x) r=mid;else l=mid+1;}cout<<l<<' '<<x-a[l-1]<<endl;}return ;
}

D. Almost Arithmetic Progression

题目考察的是等差数列的性质我们可以了解到等差数列固定了第一个数和公差整个也就固定了,也就是固定了第一个数和第二个数整个也就固定了,所以一共有3*3=9种操作次数,所以我们只要对1,2处理即可,考虑使用函数解决(重复的东西用函数美丽且好调试)

void solve(){cin>>n;vector<int> a(n+5),b(n+5);int ans=2*n+5;for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];if(n==1||n==2) return cout<<0,void();auto change = [&](){int d=b[2]-b[1];int res=0;for(int i=3;i<=n;i++){if(b[i]-b[i-1]==d) continue;res++;if(b[i]-b[i-1]==d+1) b[i]--;else if(b[i]-b[i-1]==d-1) b[i]++;else return 2*n+5;}return res;};for(int i=-1;i<=1;i++)for(int j=-1;j<=1;j++){for(int k=1;k<=n;k++) b[k]=a[k];b[1]+=i,b[2]+=j;ans=min(ans,abs(i)+abs(j)+change());}cout<<(ans >2*n ? -1 : ans)<<endl;return ;
}

E. Bus Video System

我们可以多样的思考问题,整个过程一定是以恶搞波形图,最后一定是整体上升的一个过程,那么最大的不能大过容量,最小的不能小于0,所以我们就此维护最大值和最小值然后处理出初始的时候的上下限即可

LL t,n,m;void solve(){cin>>n>>m;LL Smax=0,Smin=m,now=0;while(n--){LL x; cin>>x;now+=x;Smax=max(Smax,now);Smin=min(Smin,now);}LL top = m-Smax;LL down = max(0ll - Smin,0ll);cout<<max(top-down+1,0ll)<<endl;return ;
}

F. Mentors

题目告诉我们关系不会重复不妨这样考虑如果我们从小到大按照能力排序然后对于每一个关系维护前面比他小的有口角的人数,按照他的排序减去有口角的即可,对于相同的数我们在口角中去掉,然后再考虑答案的时候用map来维护前面每一个能力出现的数量再减去即可

struct code{int x,id;bool operator<(const code&t)const{return x<t.x;}
}e[N];void solve(){cin>>n>>m;vector<int> w(n+1);for(int i=1;i<=n;i++){int x; cin>>x;w[i]=x;e[i]={x,i};}sort(e+1,e+1+n);vector<int> ton(n+5);map<int,int> same;while(m--){int a,b; cin>>a>>b;if(w[a]==w[b]) continue;if(w[a]>w[b]) swap(a,b);// 有能力的在后面ton[b]++;}vector<int> ans(n+5);for(int i=1;i<=n;i++){auto [x,id]=e[i];ans[id]=i-1-ton[id]-same[x];same[x]++;}for(int i=1;i<=n;i++) cout<<ans[i]<<' ';cout<<endl;return ;
}

G. Petya's Exams

简单贪心策略,我们肯定是谁先考试先处理谁他的前面一定是最多的可用空闲时间,然后从他的告诉考试时间考试处理,如果够了就退出,这是一个比较简单且明显的贪心策略,可以简单的证明是正确的

struct code{int id,d,test,need;bool operator<(const code&t)const{return test<t.test;}
}e[N];void solve(){cin>>n>>m;for(int i=1;i<=m;i++){int d,test,need; cin>>d>>test>>need;e[i]={i,d,test,need};}sort(e+1,e+1+m);vector<int> day(n+5);for(int i=1;i<=m;i++){auto [id,d,test,need]=e[i];day[test]=m+1;for(int i=d;i<=test;i++){if(day[i]) continue;day[i]=id;need--;if(!need) break;}if(need) return cout<<-1,void();}for(int i=1;i<=n;i++) cout<<day[i]<<' ';cout<<endl;return ;
}

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

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

相关文章

leetcode热题100.二叉树中的最大路径和

Problem: 124. 二叉树中的最大路径和 文章目录 题目解题方法复杂度Code 题目 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 …

c++ 语法函数

函数定义 返回值 函数名(参数列表){ 函数体 return xx } 无返回值 不需要return 返回值类型为 void int sum(int a,int b) {int sum a b;return sum; } int main(int argc, const char * argv[]) {// insert code here...std::cout << "Hello, World!\n"…

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题&#xff08;异步问题&#xff09;症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想&#xff0c;看了一天代码&#xff0c;大概看明白了&#xff0c;但要做改进还要有…

C语言指针学习 之 指针是什么

前言 指针是C语言中一个重要概念&#xff0c;也是C语言的一个重要特色&#xff0c;正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针&#xff0c;也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

末世智能毁灭机械

在一个遥远的星球上&#xff0c;AI和机器人在末世中扮演着重要角色。由于一场毁灭性的灾难&#xff0c;人类文明几乎被彻底毁灭&#xff0c;幸存者被迫在废土中艰难求生。为了重建家园&#xff0c;人类和机器人联手&#xff0c;利用智能机械技术开始了重建工作。 然而&#xff…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

C#基础题

值类型和引用类型之间的区别是什么&#xff1f; 值类型在内存中存储实际值&#xff0c;而引用类型存储对对象的引用。值类型在栈上分配内存&#xff0c;而引用类型在堆上分配内存。值类型是不可变的&#xff0c;而引用类型是可变的。值类型的大小是固定的&#xff0c;而引用类型…

Java工具类库Hutool

这里写目录标题 一、简介二、包含组件三、常用功能演示2、时间工具DateUtil3、数字类工具NumberUtil4、身份认证工具IdcardUtil5、信息脱敏工具DesensitizedUtil6、字段校验工具Validator7、集合工具类CollStreamUtil 一、简介 Hutool是一个小而全的Java工具类库&#xff0c;通…

类与对象

面向对象的程序设计 面对对象的程序 类 类 .... 类 设计程序的过程&#xff0c;就是设计类的过程。 面对对象的程序设计方法&#xff1a; 1.将某类客观事物共同特点&#xff08;属性&#xff09;归纳出来&#xff0c;形成一个数据结构&#xff08;可以用多个变量描述…

elementui 回到顶部报错

<template>Scroll down to see the bottom-right button.<el-backtop target".page-component__scroll .el-scrollbar__wrap"></el-backtop> </template> 使用element的Backtop 回到顶部组件的伙伴们&#xff0c;把官网代码复制到页面使用时…

定义HarmonyOS IDL接口

HarmonyOS IDL简介 HarmonyOS Interface Definition Language&#xff08;简称HarmonyOS IDL&#xff09;是HarmonyOS的接口描述语言。HarmonyOS IDL与其他接口语言类似&#xff0c;通过HarmonyOS IDL定义客户端与服务端均认可的编程接口&#xff0c;可以实现在二者间的跨进程…

SpringBoot+Vue实现各种文件预览(附源码)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;在笑大学牲 &#x1f39f;️个人主页&#xff1a;无所谓^_^ ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 项目运行效果 前言 在做项目时&#xff0c;文件的上传和预览必不可少。继上…

数字化转型:企业适应新常态的关键之举_光点科技

在全球商业环境不断演变和技术日新月异的背景下&#xff0c;数字化转型已经成为企业不可回避的课题。它不仅关乎企业的未来生存与发展&#xff0c;更是适应新常态、提升竞争力的关键之举。但是&#xff0c;数字化转型并非一夜之间可以完成的任务&#xff0c;它需要全面的策略规…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库&#xff0c;它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库&#xff0c;是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

linux中vim的操作

(码字不易&#xff0c;关注一下吧w~~w) 命令模式&#xff1a; 当我们按下esc键时&#xff0c;我们会进入命令模式&#xff1b;当使用vi打开一个文件时也是进入命令模式。 光标移动&#xff1a; 1 保存退出&#xff1a;ZZ 2 代码格式化&#xff1a;ggG 3 光标移动&#xff…

JSP和JSTL板块:第一节 JSP追根溯源 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 JSP和JSTL&#xff1a;第一节 JSP主要内容 一、什么是JSP二、IDEA的JSP相关配置1.UTF-8编码2.JSP代码模板 三、JSP的底层是Servlet四、Jsp的注释1.显式注释2.隐式注释 五、Scriptlet : 写在Jsp里的java脚本段 一、什么是JSP JSP: Java Server Page。SUN 公司提供的动态…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后&#xff0c;被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求&#xff0c;下面针对查询数据表…

【Leetcode】2670. 找出不同元素数目差数组

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, …