当前位置: 首页 > news >正文

CF Edu 127 A-E vp补题

CF Edu 127 A-D vp补题

继续每日一vp,今天晚上有课,时间不太多,回去就直接vp。前三题比较简单,过了之后排名rk2000+,然后就去洗澡了。d题没怎么认真思考,其实也可做。最后rk4000+。发挥还行,b题罚时4次确实不应该。继续加油!
题目链接

A. String Building 签到
题意:给你一个只含‘a’和‘b’的字符串,问你能否通过‘aa’,‘aaa’,‘bb’,‘bbb’来组成。
思路:很明显直接判断字符串中是否存在单独的‘a’或者‘b’即可。
经典的双指针写法

void Showball(){string s;cin>>s;for(int i=0;i<s.size();i++){int j=i;while(j<s.size()-1&&s[j]==s[j+1]) j++;if(i==j) {cout<<"NO"<<endl;return;}i=j;}cout<<"YES"<<endl;
}

B. Consecutive Points Segment 贪心
题意:给你一个严格递增的序列,你可以对每一个数x,进行x+1,x-1或者不变的操作。问你能否把序列构造成形如l,l+1,l+2,...,l+n−1l,l+1,l+2,...,l+n-1l,l+1,l+2,...,l+n1的连续的序列。
思路:直接贪心分析,第一个数的情况比较特殊,单独分析,一旦前面的数确定就不能改变了,我们每次尽可能让数变大,如果相邻差值超过3,那么无法进行构造。具体看代码。当时写的时候细节没有处理好,wa了4发,(气急败坏!)

void Showball(){int n;cin>>n;vector<int> a(n);for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n-1;i++){int t=a[i+1]-a[i];if(!i){if(t==0) a[i+1]++;else if(t==1) a[i]++,a[i+1]++;else if(t==2) a[i]++;else if(t==3) a[i]++,a[i+1]--;else {cout<<"NO"<<endl;return;}}else{if(t==0) a[i+1]++;else if(t==1) continue;else if(t==2) a[i+1]--;else {cout<<"NO"<<endl;return;}}}cout<<"YES"<<endl;
}

C. Dolce Vita 前缀和+贪心
题意:你每天都有x元,一开始给你n个物品的价格,每天所有的物品的价格都会+1。问你一共最多可以买几件物品。
思路:这个题算法本场高光了,看完题立马有了思路,简单理了一下逻辑直接就开码了。(码之前还提醒自己这题要开long long!)
然后很快,样例过了。交上去…看到一直在过数据,直呼稳了。然后wa 5。以为贪心错了,结果看了一下,vector没有开long long。(下次注意!
回归正题:这个题,贪心,我们就先从小到大给商品排个序。然后求一下前缀和。由于我们要算一共能买几件商品,我们直接统计每件商品最多能买几次,再求和就可以。对于第iii个物品,如果x<s[i],那么说明,这个物品一次都买不了,(因为我们要尽可能买便宜的商品)。不妨令t=(x-s[i])。那么我们发现每个物品最多可以买t/i+1t/i+1t/i+1次。因为我们排了序,所以如果t>0,说明第一次我们可以直接买到1-i这些商品,t就是剩下的钱。因为每天每件商品会涨价1元。所以t/it/it/i就是剩下的钱能够在涨价后还能买几天。因为第一天没有涨价,所以还要加上第一天的一次。最后统计就ok。代码十分简洁!

void Showball(){LL n,x;cin>>n>>x;vector<LL> a(n+1);LL sum=0;//写题解时,发现前缀和边算边用for(int i=1;i<=n;i++) cin>>a[i];sort(a.begin()+1,a.end());LL ans=0;for(int i=1;i<=n;i++){sum+=a[i];LL t=x-sum;if(t>=0) ans+=(t/i+1);}cout<<ans<<endl;
}

D. Insert a Progression 贪心+思维
题意:给你一个序列和一个正整数x。你需要将1-x之间的数插入到这个序列中去(可以插入到开头和结尾),然后求出最小的相邻两项绝对值之差的总和。
思路:经过分析,我们很快可以发现一些性质,对于单调的区间,插入后维持单调性,是不会影响结果的。比如在2和7之间插入3 4 5 6。结果还是5。反过来也如此,进行拓展我们就可以发现在序列最大值和最小值之间的数,可以直接插入并且对结果没有影响。接下来我们考虑这之外的数如何处理。我们设序列最大值为maxnmaxnmaxn,最小值为minnminnminn。通过刚才的分析,我们发现,对于111minn−1minn-1minn1这些数,如果我们按照连续的顺序插入,其实和直接插入1的结果是一样的,例如我们将1,2,3插入到4 6 7这个序列中。1,2,3,4,6,7。可以发现符合前面讲的单调的性质,所以2,3这些元素对结果不影响。所以我们只需要考虑1的插入。同理,我们也只需要考虑x的插入。
对1插入的位置进行分析。无非就是开头,结尾和minnminnminn的旁边。
对于开头的情况,我们发现对答案的贡献是max(a0−1,0)max(a_0-1,0)max(a01,0)。对于结尾的情况。贡献则是max(an−1−1,0)max(a_{n-1}-1,0)max(an11,0)。对于最小值旁边的情况,贡献则是2∗max(minn−1,0)2*max(minn-1,0)2max(minn1,0)。因为左边贡献一次,右边贡献一次。不理解的话,选三个数手算一下,就明白了。对于x的插入分析同理。

LL a[N];
void Showball(){LL n,x;cin>>n>>x;for(int i=0;i<n;i++) cin>>a[i];if(n==1){cout<<max(a[0],x)-1<<endl;return;}LL ans=0;LL minn=*min_element(a,a+n);LL maxn=*max_element(a,a+n);for(int i=0;i<n-1;i++){ans+=abs(a[i]-a[i+1]);}LL t1=min({2*max(0ll,x-maxn),max(0ll,x-a[0]),max(0ll,x-a[n-1])});LL t2=min({2*max(0ll,minn-1),max(0ll,a[0]-1),max(0ll,a[n-1]-1)});cout<<ans+t1+t2<<endl;
}

E. Preorder思维+计数
题意:给你一个满二叉树,每个节点都有一个字符‘A’或者‘B’。然后总的字符串就是从根节点按照序号连起来的字符。你可以将一个非叶子节点的左二子和右儿子交换。问你一共能够构成多种字符串。
思路:题目也很清晰。我们知道当两个儿子不同的时候,那么就可以有两种情况。所以我们就可以递归处理,如果左边和右边的字符串不相同答案就会乘2。因此我们需要较快的去比较左右字符串的大小。因此我们就可以进行规定,每次组合都按照字典序进行组合,那么对于两个一样情况的字符串,我们就可以直接进行比较了。
ps:对于char数组 使用

char s[N];
cin>>s+1;

这样读入在c++20里是不被允许的,会报错。一定要使用的话,可以循环读入字符,或者使用std::string

char s[N];
int n;
int f[N];
//快速幂 a^b mod p
LL qmi(int a, int b, int p)
{LL res = 1 % p;while (b){if (b & 1) res = res * a % p;a = a * (LL)a % p;b >>= 1;}return res;
}
string dfs(int u){if(!s[u<<1]) return s[u]=='A'?"A":"B";string s1=dfs(u<<1),s2=dfs(u<<1|1);f[u]=f[u<<1]+f[u<<1|1];if(s1!=s2) f[u]++;if(s1<s2) return s1+s[u]+s2;else return s2+s[u]+s1;
}
void Showball(){ s[0]='?';cin>>n;for(int i=1;i<1<<n;i++) cin>>s[i];dfs(1);cout<<qmi(2,f[1],mod)<<endl;
}

完结撒花!!!

相关文章:

CF Edu 127 A-E vp补题

CF Edu 127 A-D vp补题 继续每日一vp&#xff0c;今天晚上有课&#xff0c;时间不太多&#xff0c;回去就直接vp。前三题比较简单&#xff0c;过了之后排名rk2000&#xff0c;然后就去洗澡了。d题没怎么认真思考&#xff0c;其实也可做。最后rk4000。发挥还行&#xff0c;b题罚…...

剑指 Offer 05. 替换空格

摘要 剑指 Offer 05. 替换空格 一、字符替换 由于每次替换从1个字符变成3个字符&#xff0c;使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的3倍&#xff0c;这样可保证字符数组可以容纳所有替换后的字符。 获得 s 的长度 length创建字符数组 array&#x…...

通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作

1.通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作 例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输入led…...

Python实现某du文库vip内容下载,保存成PDF

前言 是谁&#xff0c;是谁在网页上搜索往年考试卷题答案的时候只能阅读前两页的选择题&#xff0c;是谁在搜几千字的文档资料只能看25%&#xff0c;是谁在百度文库找七找八的时候所有的东西都要付费才能继续看… 我先说 是我自己 我又不经常用&#xff0c;只有偶尔需要看看…...

vue3.0 模板语法

文章目录前言&#xff1a;1. 内容渲染指令1.1 v-text1.2 {{ }}插值表达式1.3 v-html2. 双向绑定指令2.1 v-model2.2 v-model的修饰符3. 属性绑定指令3.1 动态绑定多个属性值3.2 绑定class和style属性4.条件渲染指令4.1 v-if、v-else-if、v-else4.2 v-show4.3 v-if与v-show的区别…...

【GlobalMapper精品教程】054:标签(标注)功能案例详解

同ArcGIS标注一样,globalmapper提供了动态标注的功能,称为标签,本文详解标签的使用方法。 文章目录 一、标签配置二、创建标签图层三、标签图层选项1. 标签字段2. 标签样式3. 标签格式4. 标签语言5. 标签优先级一、标签配置 在配置页面的【矢量显示】→标签选项卡下,有标签…...

超详细树状数组讲解(+例题:动态求连续区间和)

树状数组的作用&#xff1a;快速的对数列的一段范围求和快速的修改数列的某一个数为什么要使用树状数组&#xff1a;大家从作用中看到快速求和的时候可能会想到为什么不使用前缀和只需要预处理一下就可以在O(1)的时间复杂度下实行对于数列的一段范围的和但是我们可以得到当我们…...

【学习笔记】AGC055

A - ABC Identity 如果只有AAA,BBB两种字符的话&#xff0c;我们发现要寻找p∈[1,n]p\in [1,n]p∈[1,n]&#xff0c;使得[1:p][1:p][1:p]中AAA的数目与[p1:n][p1:n][p1:n]中BBB的数目相同。 如果有A,B,CA,B,CA,B,C三种字符&#xff0c;我们可以先将A,BA,BA,B分离出来&#xf…...

墨者——内部文件上传系统漏洞分析溯源 内部文件上传系统漏洞分析溯源

墨者——内部文件上传系统漏洞分析溯源 内部文件上传系统漏洞分析溯源 1.选择合适的文件上传 2.可以看到为*.asp文件 3.可以推测出此站点为IIS 4.上传shell.asp试试 5.上传报错&#xff0c;将其改名为shell.asp.txt上传&#xff0c;发现上传成功 6.有个问题就是服务器将我们所…...

5.2 Python if语句

5.2.3 检查是否不相等要判断两个值是否不等&#xff0c;可结合使用惊叹号和等号(!)&#xff0c;其中的惊叹号表示不&#xff0c;在很多编程语言中都如此。下面再使用一条if语句来演示如何使用不等运算符。我们将把要求的比萨配料存储在一个变量中&#xff0c;再打印一条消息&am…...

ubuntu gerrit 配置

1 - 简介 参考地址: https://www.cnblogs.com/anliven/p/12019974.html https://www.cnblogs.com/anliven/p/11980432.html 虽然Gerrit 本身提供 Code Review和 Git 仓库的两大功能,但实际上很多项目用的是其他的Git仓库,例如GitLab和GitHub。 一般情况下,Gerrit位于最终…...

运动蓝牙耳机什么牌子好,运动蓝牙耳机品牌推荐

现在市面上运动耳机的品牌越来越多&#xff0c;还不知道选择哪一些运动耳机品牌&#xff0c;可以看看下面的一些耳机分享&#xff0c;运动耳机需要注意耳机的参数配置以及佩戴舒适度&#xff0c;根据自己最根本的使用需求来选择运动耳机。 1、南卡Runner Pro4骨传导蓝牙运动耳…...

(7)C#传智:方法及参数、重载(第7天)

一、方法作用域 被调用者需要调用者的值,方法有二: 1.传参数. private static void Main(string[] args){int m 3;Console.WriteLine(m);Console.ReadKey();}public static int GetMax(int m){return m 3;} 2.使用静态字段模拟全局. 多个方法都需要时&#x…...

Python 函数式编程

函数式编程&#xff1a;允许把函数本身作为参数传入另一个函数&#xff0c;还允许返回一个函数&#xff01; 1.高阶函数 一个函数可以接收另一个函数作为参数&#xff0c;这种函数称之为高阶函数 abs(-10) 是函数调用 abs是函数本身 abs函数名其实是一个变量名 变量可以…...

pandas读取EXCEL列名重复问题解决——pandas设置多行为列名(多层列名)

问题呈现 这是我在问答区看到的一个问题。 问&#xff1a;在python中使用pandas读取Excel数据&#xff0c;重复数据被区分了&#xff0c;如何做到重复数据不被区分&#xff1f; 解决思路 很明显&#xff0c;这是pandas读取excel文件时列名设置问题&#xff0c;我第一时间想…...

CMake常用语法

1. cmake_minimum_required(VERSION 3.4.1) 指定需要的最小的cmake版本 2. aux_source_directory 查找源文件并保存到相应的变量中: #查找当前目录下所有源文件并保存至SRC_LIST变量中 aux_source_directory(. SRC_LIST)3. add_library 3.1 添加一个库 add_library(<n…...

Java知识复习(一)基础知识

1、什么是JVM、JDK和JRE&#xff1f; JVM是指运行Java字节码的虚拟机。而字节码文件指的就是扩展名为.class的文件&#xff0c;JDK指功能齐全的Java SDK&#xff0c;能够创建和编译程序JRE指Java运行的环境&#xff0c;包括JVM、类库和命令等 2、重载和重写的主要区别 重载&…...

springboot+vue.js校园车辆用车预约管理系统

springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是目前最火热的java开发框架 前端技术&#xff1a;nodejsvueelementui本项目的应用场景描述如下&…...

【 K8s 源码之调度学习】Pod 间亲和性和反亲和性的源码分析

查看案例 字段含义podAffinityPod 间的亲和性定义podAntiAffinityPod 间的反亲和性定义requiredDuringSchedulingIgnoredDuringExecution硬性要求&#xff0c;必须满足条件&#xff0c;保证分散部署的效果最好使用用此方式preferredDuringSchedulingIgnoredDuringExecution软性…...

计及绿证交易及碳排放的含智能楼宇微网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

场景扩展,体验升级 | DBMotion新增无公网数据库迁移、支持监控报警等多项功能

丝滑的零停机数据库在线迁移工具——DBMotion&#xff0c;又双叒叕发新版&#xff1a;新增的网关、数据源功能&#xff0c;让你无公网IP的数据库也可以迁移&#xff1b;新增的监控功能&#xff0c;让你对迁移性能一目了然&#xff1b;新增的报警功能&#xff0c;让你及时获得同…...

【正点原子FPGA连载】第十五章eMMC读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十五章eMMC读写…...

i2c子系统

i2c 硬件协议 Linux 应用层读写i2c 数据 在Linux系统上&#xff0c;不仅可以在内核中使用 i2c 总线发送、接收数据&#xff0c;同时也支持应用层使用i2c 总线发送、接收。 如果在内核中使能了drivers/i2c/i2c-dev.c 配置&#xff0c;内核就会为每一个i2c 控制器生成一个/dev/…...

【K3s】第17篇 Helm版本和支持的Kubernetes版本对照表

目录 Helm版本和支持的Kubernetes版本对照表 Helm版本和支持的Kubernetes版本对照表 描述了在Helm和Kubernetes之间支持的最大版本偏差。 Helm的版本用 x.y.z 描述&#xff0c;x是主版本&#xff0c;y是次版本&#xff0c;z是补丁版本。 当一个Helm的新版本发布时&#xff0…...

如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai

如何自己搭建一个ai画图系统&#xff1f; 从0开始云服务器部署novelai ​ 上面两张图都是通过ai生成的&#xff0c;是不是有以假乱真的感觉。 本教程提供的是自己搭建一个可以外网访问的ai系统的方法&#xff0c;需要采购gpu服务器&#xff08;后续会出白嫖的方式&#xff09;&…...

SpringSecurity过滤请求导致的系统bug

背景 今天开发一个新的会员管理系统&#xff0c;继承了SpringSecurity的&#xff0c;用以控制权限。结果无论怎么配置&#xff0c;都会报错&#xff1a;An Authentication object was not found in the SecurityContext 这句话的意思很明确&#xff1a;指的就是在SecurityCon…...

css\js\vue知识点

1.css3新特性 css3新特性 1&#xff09;选择器 2&#xff09;阴影 3&#xff09;形状转换&#xff08;2D <-> 3D&#xff09; 4&#xff09;变形 5&#xff09;动画&#xff08;过渡动画、帧动画&#xff09; 6&#xff09;边框 7&#xff09;多重背景 8&#xff09;反…...

在vue项目中使用video.js实现视频播放和视频进度条打点

一、用video.js实现视频播放 1、安装video.js插件 // 安装video.js插件 npm install video.js -S // 如果需要播放rtmp直播流&#xff0c;需安装一下插件 npm install videojs-flash -S 2、在组件代码里使用 <template><div data-vjs-player><video ref&quo…...

【代码训练营】day41 | 01背包问题 416. 分割等和子集

所用代码 java 01背包理论 背包最大重量为&#xff1a;4 重量价值物品0115物品1320物品2430 暴力&#xff1a;O(2^n) 动态规划&#xff1a; 1、二维dp数组 dp[i] [j] dp数组含义&#xff1a;[0, i]物品&#xff0c;任取放进容量为j的背包里的最大价值 递推公式&#xff1a…...

linux网络编程-多进程实现TCP并发服务器

服务端流程步骤socket函数创建监听套接字lfdbind函数将监听套接字绑定ip和端口listen函数设置服务器为被动监听状态&#xff0c;同时创建一条未完成连接队列&#xff08;没走完tcp三次握手流程的连接&#xff09;&#xff0c;和一条已完成连接队列&#xff08;已完成tcp三次握手…...