Codeforces Round 925 (Div. 3)(A~E)
题目暂时是AC,现在是Hack阶段,代码仅供参考。
A. Recovering a Small String
题目给出的n都可以由字母来组成,比如4可以是a+a+b,字母里面排第一个和第二个,即1+1+2=4。但是会歧义,比如a+b+a为1+2+1=4,也是4,答案就不唯一,输出字典序最小的那三个字母。
直接枚举。
#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;int n;void solve(){cin>>n;per(i,'a','z'){per(j,'a','z'){per(k,'a','z'){int ti=i-'a'+1;int tj=j-'a'+1;int tk=k-'a'+1;if(ti+tj+tk==n){cout<<(char)i<<(char)j<<(char)k<<endl;return;}}}}
}void init(){}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t;cin>>t;while(t--)solve(),init();return 0;
}
B. Make Equal
你可以任选序列中的两个数 i < j,让 a[i] 减去 1~a[i] 的任意值 加到 a[j] 上面,这个操作可以无限执行,问是否可以让序列的每个数都相等。(也可以不执行操作)
关键要想到每个数都要相等的话,那么每个数都要变成序列的平均值,然后模拟就行了。
#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;int n,a[N],sum;void no(){cout<<"NO"<<endl;
}void yes(){cout<<"YES"<<endl;
}void solve(){cin>>n;per(i,1,n)cin>>a[i],sum+=a[i];if(sum%n!=0)return no();sum/=n;//每一个都要是sum的平均值int nowtake=0;per(i,1,n){if(a[i]==sum)continue;else if(a[i]<sum){if(nowtake>=sum-a[i]){nowtake-=sum-a[i];}else return no();}else if(a[i]>sum){nowtake+=a[i]-sum;}}if(nowtake)return no();else return yes();
}void init(){sum=0;
}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t;cin>>t;while(t--)solve(),init();return 0;
}
C. Make Equal Again
给你一个序列A,你可以选择任意一个连续区间,全部变成任意一个数,比如[2,2,9,10],选择3~4,全部变成2,就会变成[2,2,2,2],这个操作你只能执行一次,问你将序列A中的每个数都相等至少要改变几个数。
从答案入手,最大范围是 l=1,r=n,就是全部修改,然后看看 l 和 r 能不能往里面变,让答案更小。
显然可以分类讨论。
如果a[l] == a[r],那就是要改中间的部分。
如果a[l] != a[r],那就是要改左边或者右边更短的那一截。
#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;int n,a[N];void solve(){cin>>n;per(i,1,n)cin>>a[i];int l=1,r=n;if(a[l]!=a[r]){while(a[l]==a[1])l++;while(a[r]==a[n])r--;cout<<min(n-l+1,r)<<endl;}else{while(a[l]==a[1])l++;while(a[r]==a[n])r--;if(l<=r)cout<<r-l+1<<endl;else cout<<0<<endl;}
}void init(){per(i,1,n)a[i]=0;
}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t;cin>>t;while(t--)solve(),init();return 0;
}
补题:D. Divisible Pairs
对于序列中 i < j 的两个数,如果有 (a[i]+a[j])%x==0 并且 (a[i]-a[j])%y==0 那么称之为一个漂亮对,问你有几个漂亮对。
朴素算法很容易写出来,但是这道题的范围要求复杂度小于等于nlogn。
n^2过不了。
per(i,1,n){per(j,i+1,n){if((a[i]+a[j])%x==0 and (a[i]-a[j])%y==0){ans++;}}}
循环显然没有可以改进的空间了,所以我们需要对判断条件入手。
(a[i]+a[j])%x==0 and (a[i]-a[j])%y==0
也就是(箭头根据模运算律展开)
1、(a[i]+a[j])%x==0 -> (a[i]%x+a[j]%x)%x==02、(a[i]-a[j])%y==0 -> (a[i]%y-a[j]%y)%y==0
最终可以得到下面两个条件
1、a[i]%x + a[j]%x == x 或者 a[i]%x + a[j]%x == 02、a[i]%y 和 a[j]%y 的余数相等
所以只需要把每个数对x和y取余之后保留下来,再去匹配条件就可以了。
#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;int n,x,y,tmp,ans;map<pair<int,int>,int>f;void solve(){cin>>n>>x>>y;per(i,1,n){cin>>tmp;int l=tmp%x,r=tmp%y;ans+=f[{x-l,r}];if(l==0)ans+=f[{0,r}];f[{l,r}]++;}cout<<ans<<endl;
}void init(){f.clear();ans=0;
}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t;cin>>t;while(t--)solve(),init();return 0;
}
E. Anna and the Valentine's Day Gift
博弈论,主要难度在于读题和代码细节。
Anna和Sasha在玩游戏,Anna先手开始第一回合。
Anna回合的操作:选择一个数,翻转。如:255变成552。250变成52(去掉开头的0)
Sasha回合的操作:选择两个数拼接成一个数,方向任意。如:255,10变成25510或者10255
如果轮到Sasha的时候无法找出两个数,那么游戏结束。
若最后留下来的那一个数>=10^m,那么Sasha胜利,否则Anna胜利。
问两个人都执行他们的最优操作,最后谁会胜利。
对于Anna来说最优的操作是让结尾0最多的数翻转,才会减少最终拼接数的位数。
对于Sasha来说拼接的意义就是让结尾0最多的数,不能被翻转。
那么处理一下输入,保留一下总位数和结尾0的数量,排个序,模拟。
#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5,M=2e6+5;int n,tmp,m;
vector<pair<int,int>>v;//几位数,结尾几个0void solve(){cin>>n>>m;per(i,1,n){cin>>tmp;int cnt=0,cntz=0;bool flag=true;while(tmp){int bit=tmp%10;if(bit!=0)flag=false;if(flag)cntz++;//记录结尾0的数量cnt++;//记录位数tmp/=10;}v.push_back({cnt,cntz});}sort(v.begin(),v.end(),[](pair<int,int>a,pair<int,int>b){return a.se>b.se;});//根据结尾0的数量降序排序,每次都对结尾0最多的进行操作int all=0;//算一下最后总位数会剩下多少,用来和10^m的m比较bool Anna=true;per(i,0,v.size()-1){if(Anna){Anna=false;v[i].fr-=v[i].se;//总位数减去结尾0的数量}else {Anna=true;//Sasha回合保护一个结尾,所以不用变}all+=v[i].fr;//累计总位数}if(all>=m+1){//m是1后面有几个0,总位数是m+1cout<<"Sasha"<<endl;}else cout<<"Anna"<<endl;
}void init(){v.clear();
}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t;cin>>t;while(t--)solve(),init();return 0;
}
相关文章:
Codeforces Round 925 (Div. 3)(A~E)
题目暂时是AC,现在是Hack阶段,代码仅供参考。 A. Recovering a Small String 题目给出的n都可以由字母来组成,比如4可以是aab,字母里面排第一个和第二个,即1124。但是会歧义,比如aba为1214,也是…...
@RequestBody、@RequestParam、@RequestPart使用方式和使用场景
RequestBody和RequestParam和RequestPart使用方式和使用场景 1.RequestBody2.RequestParam3.RequestPart 1.RequestBody 使用此注解接收参数时,适用于请求体格式为 application/json,只能用对象接收 2.RequestParam 接收的参数是来自HTTP 请求体 或 请…...
LeetCode、1143. 最长公共子序列【中等,二维DP】
文章目录 前言LeetCode、1143. 最长公共子序列【中等,二维DP】题目链接与分类思路2022年暑假学习思路及题解二维DP解决 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者…...
162基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理
基于matlab的多尺度和谱峭度算法对振动信号进行降噪处理,选择信号峭度最大的频段进行滤波,输出多尺度谱峭度及降噪结果。程序已调通,可直接运行。 162 matlab 信号处理 多尺度谱峭度 (xiaohongshu.com)...
Android Studio六大基本布局的概览和每个布局的关键特性以及实例分析
1. 线性布局 (LinearLayout) 描述: 线性布局是一种按指定方向(水平或垂直)排列其子视图的布局容器。通过android:orientation属性可设置为horizontal或vertical。 关键属性: android:orientation: 指定布局方向。android:layout_weight: 子视图权重,用于分配剩余空间。示…...
【go语言】一个简单HTTP服务的例子
一、Go语言安装 Go语言(又称Golang)的安装过程相对简单,下面是在不同操作系统上安装Go语言的步骤: 在Windows上安装Go语言: 访问Go语言的官方网站(golang.org)或者使用国内镜像站点࿰…...
LeetCode Python - 15.三数之和
目录 题目答案运行结果 题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可…...
C#中implicit和explicit
理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…...
探讨java系统中全局唯一ID实现方案
为什么需要全局唯一ID 我们这里引用美团 Leaf 的场景介绍:在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一…...
微信小程序(四十四)鉴权组件插槽-登入检测
注释很详细,直接上代码 新增内容: 1.鉴权组件插槽的用法 2.登入检测示范 源码: app.json {"usingComponents": {"auth":"/components/auth/auth"} }app.js App({globalData:{//定义全局变量isLoad:false} })…...
【ES】--ES集成热更新自定义词库(字典)
目录 一、问题描述二、具体实施1、Tomcat实现远程扩展字典2、验证生效3、ES配置远程扩展字典4、为何不重启ES能实现热更新 一、问题描述 问题现象: 前面完成了自定义分词器词库集成到ES中。在实际项目中词库是时刻在变更的,但又不希望重启ES,对此我们应…...
能源管理师——为能源可持续发展护航
能源管理师是在能源管理领域具有专业知识和技能的专业人士,他们的工作对于实现能源的有效利用和可持续发展至关重要。 能源管理师的主要职责是协助企业或组织进行能源管理,包括能源规划、能源审计、节能措施的实施和能源绩效的评估等。他们通过对能源使…...
设计模式理解:单例模式+工厂模式+建设者模式+原型模式
迪米特法则:Law of Demeter, LoD, 最少知识原则LKP 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。 所以,在运用迪米特…...
DataX源码分析 writer
系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录前言DataX的Writer写入流…...
为自己的项目媒体资源添加固定高度
为自己的项目媒体资源添加固定高度 未媒体资源添加固定高度,不仅有利于确定懒加载后的切确位置,还可以做骨架屏、loading动画等等,但是因为历史数据中很多没有加高度的媒体资源,所以一直嫌麻烦没有做。 直到这个季度有一个自上而…...
家政小程序系统源码开发:引领智能生活新篇章
随着科技的飞速发展,小程序作为一种便捷的应用形态,已经深入到我们生活的方方面面。尤其在家庭服务领域,家政小程序的出现为人们带来了前所未有的便利。它不仅简化了家政服务的流程,提升了服务质量,还为家政服务行业注…...
多表查询
目录 统计出一张数据表中的数据量 查询 dept 表中的数据量 查询 emp 表中的数据量 实现 emp 与 dept 的多表查询 笛卡尔积 消除笛卡尔积 把数据表 emp 的别名定为 e,数据表 dept 的别名定为 d,然后在查询中分别使用 e 和 d 代替这两个表 Oracle从…...
PHP开发日志 ━━ 深入理解三元操作与一般条件语句的不同
概况 三元运算符的功能与“if…else”流程语句一致。 在一般情况下,三元操作替换if条件语句可以精简代码,并且更为直观,但是在下面的情况中使用三元操作将会返回警告。 借图: 案例 比如原代码: class classA{publ…...
多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测
多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测 目录 多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预…...
vue3-内置组件-Suspense
Suspense (实验性功能) <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关 API 也可能会发生变化。 <Suspense> 是一个内置组件,用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
