恢复杯(月赛)

article/2025/6/22 11:25:43

月赛的题目偏向思维,很有意思。

1.字符串

题目意思:给定一个字符串,判定好字符串的条件是,一个字母的大小写都在这个字符串里面。

思路:开两个数组,一个存放大写的某个字母是否出现,另一个存放小写的某个字母出现,最后用bool类型判断是否为1即可。

tips:这里说一下map<char>的写法,其实第一时间想到map也是对的,但是你会发现,没有出现的字母会难以判断,例如AbcCa中,B字母没有出现,如果写的简单的话,map容易漏判。写全的话,代码会偏复杂,量也会有点大。于是综合考虑情况下,用数组的条件是最好的。

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<bool>a(26),b(26);
signed main(){int n;cin>>n;string ac;cin>>ac;/*for(auto c:ac){if(c>='a'&&c<='z')a[c-'a']=1;else b[c-'A']=1;}*/for(int i=0;i<n;i++){if(ac[i]>='a'&&ac[i]<='z')a[ac[i]-'a']=1;else b[ac[i]-'A']=1;}for(int i=0;i<26;i++){if(a[i]!=b[i]){cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;
}

2.平均数 

题目意思:给定n个数字,由0,-1,1构成,分别表示的是第i个数字等于平均数,小于平均数,大于平均数。判断是否有可能给定的这些n个数字满足平均数的情况....

思路:

不妨给出一些样例:
-1 0 1 1 1 1

-1 -1 -1 -1 1

观察上述两个案例,我们可以发现,-1和1分别表示的是小于和大于的情况,没有说明小于是具体小多少,大于具体大于多少。故,我们可以判断,若干个1一定可以被若干个-1抵消掉。到最后就是判断-1和1是否出现。

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){int n;cin>>n;bool flag1=0;bool flag2=0;for(int i=1,a;i<=n;i++){cin>>a;if(a==1)flag1=1;if(a==-1)flag2=1;}if(flag1==flag2)cout<<"YES"<<endl;else cout<<"NO"<<endl;
}

3.质数

 题目意思:给定一个区间,将区间里面的数字分成两个集合,一个集合要求里面所有的数字的gcd是1,另一个集合要求所有的数字的gcd不为1,最后求两个集合大小之差的最小值。

思路:

给定一个区间,特判区间等于1的情况,随后分析大于等于2的情况。

我们拿出一个样例[3,7]进行分析,发现可以按照奇数和偶数进行分类。

[3,5,7]奇数的分成一类,[2,6]分成一类,观察后发现偶数分成一类的情况一定有gcd不等于1,奇数的情况由于都是邻近的奇数,gcd都是1。

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){int l,r;cin>>l>>r;if(l==r){cout<<-1<<endl;return;}if(l==1&&r==2){cout<<0<<endl;return ;}if(r-l+1==2){cout<<-1<<endl;//长度是2的情况下还有一个特殊的样例判断//当l=3 r=4的时候,gcd分别为3和4,不满足情况//只有当l=1 r=2这个特殊的情况下,才满足分组的条件return;}cout<<(r-l+1)%2<<endl;//判断l和r之间的长度的奇偶
}
signed main(){int n;cin>>n;while(n--)solve();
}

4.众数

 题目意思:给定一组数字,可以任意选择两个数字,一个对数字进行+1,一个对数字进行-1,操作结束后找出新数组中的众数。如此往复求出所有众数,并从小到大进行输出。

思路:因为n的范围很小,只有3次方,所以我们可以直接进行暴力,开两层for,每一次对第一层的数字进行+1,第二层的数字进行-1,最后统计众数,并用bool进行标记。

统计众数我们可以通过set的pair<int,int>来进行存储,第一个int下放的是数量,第二个int下放的是数字。

#include <bits/stdc++.h>
using namespace std;
const int MAX_VALUE = 1e6 + 4;
void add(int x, vector<int>& sum, set<pair<int, int>>& s) {if (sum[x] > 0) {s.erase({sum[x], x});}sum[x]++;s.insert({sum[x], x});
}
void sub(int x, vector<int>& sum, set<pair<int, int>>& s) {s.erase({sum[x], x});sum[x]--;if (sum[x] > 0) {s.insert({sum[x], x});}
}
int main() {int n;cin >> n;vector<int> a(n + 1);vector<int> sum(MAX_VALUE, 0);vector<bool> vis(MAX_VALUE, false);set<pair<int, int>> s;for (int i = 1; i <= n; i++) {cin >> a[i];sum[a[i]]++;}for (int i = 0; i < MAX_VALUE; i++) {if (sum[i] > 0) {s.insert({sum[i], i});}}for (int i = 1; i <= n; i++) {// 尝试减少 a[i] 的值,增加a[i]+1的值sub(a[i], sum, s);add(a[i] + 1, sum, s);// 遍历数组中的每个其他元素for (int j = 1; j <= n; j++) {if (i == j) continue;// 尝试减少 a[j] 的值增加a[j]+1的值sub(a[j], sum, s);add(a[j] - 1, sum, s);// 标记当前最大频率的值vis[(*s.rbegin()).second] = true;//set默认是从小到大的排序// 恢复 a[j] 的值sub(a[j] - 1, sum, s);add(a[j], sum, s);}// 恢复 a[i] 的值sub(a[i] + 1, sum, s);add(a[i], sum, s);}for (int i = 0; i < MAX_VALUE; i++) {if (vis[i]) {cout << i << ' ';}}
}

5.种类数

 题目意思:给定一个数组,每一轮对数组中的数字进行修改,可以对每一个数字减去整个数组的种类数,最低减为0,判断要经过多少轮之后数组中的数字才能全部变成同一个数。

思路:

题目说的是多少轮之后数组中的数字全部变成同一个,显然这同一个数只能是0。

假设一开始给定的n个数里面最坏的情况就是有n个种类数,那么这时只需要1次即可。

那么同理也存在要操作n次的情况。

于是这个题目可以拆解成模拟题目,先对数组进行unique操作,然后对剩余的数字进行从小到大的模拟操作。

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){int n;cin>>n;vector<int>a(n);for(int i=0;i<n;i++){cin>>a[i];}sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());  // 去除重复元素,得到唯一元素数组if(a.size()==1){  // 如果去重后只有一个元素,说明所有元素已经相同cout<<0<<endl;return 0;}int ans=0,sum=0,cnt=0;  // ans记录操作轮数,sum记录累计减去的值,cnt用于标记是否处理过for(int i=0;i<a.size();i++){  // 遍历去重后的数组if(a[i]>sum){  // 如果当前元素减去累计减去的值小于等于0,跳过cnt=1;continue;}int m=a.size()-i+cnt;  // 计算当前剩余的种类数a[i]-=sum;  // 更新当前元素的值int d=(a[i]+m-1)/m;  // 计算需要减去的轮数ans+=d;  // 累加操作轮数sum+=d*m;  // 更新累计减去的值cnt=1;  // 标记已处理}cout<<ans<<endl;  // 输出最少操作轮数
}


http://www.hkcw.cn/article/vlhEAcplDB.shtml

相关文章

第二十一章 格式化输出

第二十一章 格式化输出 本章仍然是文本相关的工具&#xff0c;重点放在格式文本输出而非更改文本本身的程序上。 命令如下&#xff1a; nl&#xff1a;对行进行编号。fold&#xff1a;在制定长度处折行。fmt&#xff1a;一个简单的文本格式化工具。pr&#xff1a;格式化要输…

印度一婚礼现场爆发斗殴 双方亲戚因换座要求大打出手

印度一婚礼现场爆发斗殴,双方亲戚因换座要求大打出手,女性也参与其中,椅子餐具齐飞。责任编辑:zx0002

女生包迷你小粽子和室友一起吃 口味自选白糖或老干妈

文理女生包迷你小粽子投喂室友,手捧随便抓,口味自选白糖或老干妈。责任编辑:zx0002

【笔记】在 Clang 工具链中降级 NumPy 到 2.2.4

&#x1f4dd; 在 Clang 工具链中降级 NumPy 到 2.2.4 ✅ 目标说明 在 MSYS2 的 Clang 工具链环境中&#xff0c;将 NumPy 从 2.2.6 成功降级到 2.2.4。 &#x1f9f0; 环境信息 项目内容操作系统Windows 11MSYS2 终端类型Clang64&#xff08;需手动启动&#xff09;Python 路…

基于STM32控制直流电机加减速正反转设计

基于STM32控制直流电机 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.L298N电机驱动&#xff1b; 2.按键可以控制正/反转&#xff0c;加/减速&#xff0c;停止&#xff1b; 3.LCD1602显示转速等级和正反转&#xff…

性能优化 - 案例篇:大对象的优化

文章目录 Pre1. 引言2. String 的 substring 方法内存泄漏案例2.1 JDK6 的实现与内存泄漏2.2 JDK7 的修复2.3 优化启示 3. 集合扩容的隐形成本3.1 StringBuilder 扩容机制3.2 ArrayList 扩容机制3.3 HashMap 扩容机制3.4 优化建议 4. 结构维度&#xff1a;优化大对象的粒度与存…

尹锡悦夫妇公开露面参加大选投票 完成投票未回应提问

韩国第21届总统选举于当地时间3日上午6时正式开始投票。据韩联社报道,当天上午,韩国前总统尹锡悦与夫人金建希在安保人员陪同下前往首尔瑞草区的一处投票站完成投票。投票结束后,面对记者关于“何时接受检方调查”、“如何看待因弹劾引发的提前大选”以及“为何拒绝配合调查…

专家:国际调解院不是和西方打擂台 60国代表齐聚香港

国际调解院不是和西方打擂台 60国代表齐聚香港!调解不再看西方脸色,60国代表齐聚香港。2025年,中国主导设立的“国际调解院”正式挂牌成立,总部设在香港的旧湾仔警署。来自亚洲、非洲、中东等60个国家的代表共同见证这一历史性时刻。印尼外长表示:“终于不用再花冤枉钱看欧…

中纪委发布5月反腐月报 97人被查41人被处分

6月2日下午,中纪委网站发布《反腐月报》显示,5月共有97人被查,41人被处分。在被查的97人中,包括7名中管干部。这些中管干部分别为:十四届全国政协常委、经济委员会副主任毕井泉,国家国防科技工业局原党组成员、副局长张建华,陕西省政协副主席刘宽忍,四川省政府党组成员…

易烊千玺《酱园弄》光头造型 角色海报引热议

6月3日,《酱园弄》官方宣布该片第一部将于6月21日上映。预告片中,章子怡饰演的詹周氏身着破碎染血旗袍提包走过弄堂,周围的人们神情各异,雷佳音饰演的薛至武在她即将走出弄堂时伸手阻拦,詹周氏的命运充满未知。海报上,詹周氏站在中心,众人围绕在她周围,底部露出的报纸文…

韩国大选 尹锡悦夫妇完成投票

韩国第21届总统选举于当地时间3日上午6时正式开始投票。据韩联社报道,韩国前总统尹锡悦与夫人金建希当天上午在安保人员陪同下前往首尔瑞草区的一处投票站完成投票。投票结束后,面对记者关于“何时接受检方调查”“如何看待因弹劾引发的提前大选”“为何拒绝配合调查”等问题…

妈妈给萌娃哭声配音看笑网友:好贴心,还给孩子留了气口..

孩子妈:自从学会了配音,再也不担心孩子哭了,网友:好贴心,还给孩子留了气口...责任编辑:zx0002

媒体:别让装备竞赛绑架青少年 碳板鞋风靡校园引忧虑

近段时间,碳板鞋开始风靡校园,成为学生们的“新宠”。这类鞋子外观炫酷、科技感十足,但其流行背后隐藏着不少问题。碳板鞋最初设计是为了提高精英运动员的运动水平,但在校园里却成了学生们展示个性和时尚的方式,甚至形成了鄙视链,国际品牌高于国产品牌高于杂牌,普通运动…

cpper 转 Golang

推荐视频 8小时转职Golang工程师(如果你想低成本学习Go语言) 文章目录 与C对比Go语言基本语法特殊类型与占位符:defer数组 slice切片map[string]stringstruct 结构体继承interface 多态 机制调度器GPM&#xff1a;M:N 调度器&#xff08;多对多调度器&#xff09; runtime全局G…

Linux如何区分普通进程和实时进程

在 Linux 中&#xff0c;区分普通进程&#xff08;Normal Process&#xff09;和实时进程&#xff08;Real-Time Process&#xff09;主要通过以下两个核心机制实现&#xff1a; 1. 调度策略&#xff08;Scheduling Policy&#xff09; Linux 使用 调度策略明确标识进程类型&a…

学院校园网三层架构详解配置实战:从拓扑到策略全解析

目录 一、项目背景与网络拓扑 1.1 网络架构概述 1.2 物理拓扑结构 二、IP地址规划与VLAN划分 2.1 IP地址分配表 2.2 VLAN规划策略 三、设备配置详解 3.1 出口路由器R1配置 3.1.1 基础配置 3.1.2 路由配置 3.1.3 NAT配置 3.1.4 R2配置 3.2 核心交换机S1配置 3.2.…

长期喝桶装水或面临健康风险 微塑料隐患需警惕

在日常生活中,有人习惯于长期自己烧水喝,也有一部分人对自来水的水质问题担忧,选择桶装水或瓶装水。那么,长期自己烧水喝的人和经常买桶装水喝的人,到底谁更健康?2024年1月,国际学术期刊《美国国家科学院院刊》发表了一项最新研究发现:每升瓶/桶装水中平均约含有24万个…

《酱园弄》第一部群星海报来啦!

《酱园弄》第一部群星海报来啦!真相无踪、命数未定,海报更是信息量满满,好了这下暑假有电影看了。责任编辑:zx0002

多人殴打未成年人被抓获 最小15岁 7人全部落网

多人殴打未成年人被抓获 最小15岁 7人全部落网!6月2日,四川古蔺警方通报了一起在地下停车场发生的多人殴打未成年人事件。警方成功抓获了7名涉案人员,其中年龄最大的26岁,最小的15岁。目前,已有2人被刑事拘留,另外5人受到行政处罚。责任编辑:0882

水果夹酸奶风靡长沙 成餐饮新宠

水果夹酸奶风靡长沙 成餐饮新宠。继“干噎酸奶”风靡网络后,“水果夹酸奶”成为近期的热门甜品。新鲜的草莓、菠萝蜜、苹果、葡萄甚至是荔枝和蓝莓切开,加入适量酸奶,吸引了许多消费者前来品尝。在长沙,数十家酸奶、甜品店纷纷推出这款新品,一些湘菜馆和料理店也特意增加了…