牛客小白月赛117

article/2025/6/13 20:50:39

依旧掉分场, 疯狂wa, 感觉越打越菜了.... 

A. 好字符串 

题目描述
给你一个长度为 n 的字符串 s,如果一个小写字母为好字符,当且仅当该小写字母对应的大写字母和它同时在字符串 s 中出现 或者 同时不在字符串 s 中出现;而如果一个字符串为好字符串,当且仅当 26 个小写字母 ‘a’∼‘z’都是好字符。
现在想知道字符串 s 是否为好字符串。
输入描述:
第一行输入一个整数 n (1≦n≦100),表示字符串 s 的长度。 
第二行输入一个长度为 n 的字符串 s,仅由大小写字母组成。
输出描述:
如果字符串 s 为好字符串,输出 YES,否则输出 NO。注意输出均为大写字母。

解题思路:用两个数组进行统计一下,大写一组, 小写一组, 然后顺次匹配一下 

写完三题后,准备交了,第一题就wa了一次,应该是遍历去重后的a,遍历成原字符串s了

更简单直接的代码2的思路 

#include<bits/stdc++.h>
using namespace std;
int main(){int n; cin>>n;string s; cin>>s;sort(s.begin(),s.end());int c=0;set<int> a(s.begin(),s.end());
//     cout<<a.size()<<endl;if(((int)a.size())&1) { cout<<"NO"; return 0; }unordered_map<char,int> mp; int cnt=0,cnt0=0;for(auto& x:a){if(x>='a'&&x<='z'&&mp.count((char)(x-32))){cnt++;}mp[x]++;}
//     cout<<cnt<<endl;int n0=a.size();if(cnt==n0/2) cout<<"YES";else cout<<"NO";return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){int n; cin>>n;string s; cin>>s;bool a[26]={false};bool b[26]={false};for (char ch:s) {if (ch>='a'&&ch<='z') {a[ch-'a']=true;} else { b[ch-'A']=true;}}for (int i=0;i<26;i++) {if (a[i]!=b[i]) {cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;return 0;
}

 B. 平均数

题目描述

班上有 n 名同学,其中每位同学都有一个数值,但是每位同学并不会告诉你这个数值为多少,他们只会告诉你这个数值是否大于 / 等于 / 小于这 n 个数值的平均数,具体地:
若 ai​=−1,表示第 i 名同学的数值小于平均数;
若 ai​=0,表示第 i 名同学的数值等于平均数;
若 ai=1,表示第 i 名同学的数值大于平均数。
其中平均数指的是这 n 个数值的平均数值(保留小数点,不四舍五入),如{3,4,5,6} 的平均数为 3+4+5+64=4.5。
但是,它们其中,有些人可能会说谎,请你检查并判断:若给定的这 n 个数 ai​ 满足平均数的情况,则输出 YES,否则输出 NO。

输入描述:

第一行输入一个整数 n (1≦n≦105),表示数组 a 的长度。 
第二行输入 n 个整数 a1,a2,…,an(−1≦ai​≦1),表示每一个同学的数字与平均数的关系。
输出描述:
如果给定的这 n 个数 ai​ 满足平均数的情况,则输出 YES,否则输出 NO。注意输出均为大写字母。

解题思路:题意就是一问一个人, 它回复你比平均数大, 还是比平均数小, 还是相等, 

只要总体回复中有一个1和-1都有就行, 特殊的是全为0, 输出YES

#include<bits/stdc++.h>
using namespace std;
int main(){int n; cin>>n;vector<int> a(n); int num=0;for(int i=0;i<n;i++){cin>>a[i];num+=a[i];}if(num==0) { cout<<"YES"; return 0; }int cnt0=0,cnt1=0;for(int i=0;i<n;i++){if(a[i]>0) cnt0++;else if(a[i]<0) cnt1++;}if(cnt0>0&&cnt1>0) cout<<"YES";else cout<<"NO";return 0;
}// avg=4// -1 0 1 1

 C. 质数

题目描述
给你 q 次询问,每次询问给出两个整数 l,r,现在需要你将区间 [l,r][l,r][l,r] 内所有数分别放入两个集合 S1​,S2​ 其中之一,最终需要满足:
∙S1,S2​ 两个集合都至少有一个数,并且满足 gcd⁡(S1)=1 且 gcd⁡(S2)≠1。
现在,对于每次询问,在满足上述条件的情况下,求出 ∣len⁡(S1)−len⁡(S2)∣ 的最小值,如果没有满足的情况,则输出 −1。

注:若集合 S={3},则 gcd⁡(S)=gcd⁡(3)=3;若集合 S={6,9,12},则 gcd⁡(S)=gcd⁡(6,9,12)=3,其中 gcd 表示集合内所有数的最大公因数。

输入描述:
第一行输入一个整数 q (1≦q≦105),表示询问次数。 
此后 q 行,第 i 行输入两个整数 li,ri(1≦li​≦ri​≦1018),表示第 i 次询问的区间。
输出描述:
对于每次询问,新起一行输出一个整数,表示 ∣len⁡(S1)−len⁡(S2)∣ 的最小值,如果没有满足的情况,则输出 −1。

解题思路:两个集合, 集合S1中元素互质, 集合S2中元素不互质 

两个集合, 一个数不行的, 两个数, 一个是1,因为要连续, 所以另外一个数只能是2, 其他是不行的,  

统计区间中偶数和奇数的个数,如果只有一个奇数,eg: 2 3 4, 

当至少一个偶数和至少两个奇数, 奇数gcd为1,偶数gcd>1, 放到S1和S2中即可

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){int q;cin >> q;while(q--){ll l, r;cin>>l>>r;ll n=r-l+1;if(n==1){cout<<-1<<endl;continue;}if(n == 2){if(l==1&&r==2){cout<<0<<endl;} else {cout<<-1<<endl;}continue;}ll z =(r/2)-((l-1)/2);ll e =n-z;if(e==1){cout<<1<<endl;continue;}if(z>=1&&e>=2){int d = abs(e-z);cout<<d<<endl;continue;}cout<<-1<<endl;}return 0;
}

 D . 众数

题目描述

给定一个长度为 n 的数组 a1,a2,…,an,现在你需要执行恰好一次如下操作:
,∙选择两个不同的位置 i,j (1≦i,j≦n; i≠j),ai变成的ai+1, aj变成 aj -1。
现在,我们想知道,对于每一种不同的操作方式后得到的新数组(不包含不操作的情况),它们的众数都会是什么。你需要将全部可能称为众数的数字去重后,从小到大依次输出。

【名词解释】
一个数组的众数:指的是这个数在数组中的出现次数最多,如果有多个数出现次数最多,则这些数中最大的那个数是众数,如:{1,2,2,4} 的众数为 2, {3,3,2,2,1,1} 的众数为 3。

输入描述:
第一行输入一个整数 n (2≦n≦103),表示数组的大小。 
第二行输入 n 个整数 a1,a2,…,an(1≦ai​≦10^6),表示数组的元素。
输出描述:
在一行上从小到大依次输出去重后的若干个整数,代表所有可能出现的众数。

解题思路:代码的时间复杂度是O(n^2 log n), 

用一个set维护当前数字的出现次数, 如果出现次数相同就按数值大小进行降序处理, 

然后对于每一组数据进行+1/-1的操作, 更新频率数组和相关的节点信息, 然后将当前众数添加到ans数组里面, 同时进行恢复操作

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int max_Num = 1e7 + 10;
struct Node{int num, cnt;bool operator<(const Node& other) const {if (cnt == other.cnt) {return num > other.num; }return cnt > other.cnt; }
};
set<Node> st;
vector<int> fq(max_Num);
void o2(int x, int d) {st.erase({x, fq[x]});fq[x] += d;st.insert({x, fq[x]});
}
void o1(int x, int d) {o2(x, -1);o2(x + d, 1);
}
set<int> ans;
int main() {int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i++) {cin >> a[i];fq[a[i]]++;}for (int i = 0; i < max_Num; i++) {if (fq[i] != 0) {st.insert({i, fq[i]});}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i == j) {continue;}o1(a[i], 1);o1(a[j], -1);ans.insert(st.begin()->num);o1(a[i] + 1, -1);o1(a[j] - 1, 1);}}for (auto& x : ans) {cout << x << " ";}cout << endl;return 0;
}

 E. 种类数

 题目描述

给定一个长度为 n 的数组 a1,a2,…,an​,定义一轮操作如下:
,∙令 x 为当前数组中所有数的种类数(即不同数的数量),随后对数组中的每一个元素都进行一次修改——对于每个索引 i (1≦i≦n),使得 ai ​ 变为 max⁡{0,ai−x}。
我们想知道,至少需要多少轮操作(可以为零轮),才能使得数组 a 中所有数变得相同。我们可以证明,有限次操作内一定可以达成目标。

输入描述:
第一行输入一个整数 n (1≦n≦105),表示数组的长度。 
第二行输入 n 个整数 a1,a2,…,an (0≦ai​≦10^18),表示数组的元素。
输出描述:
输出一个整数,代表要使得数组 a 中所有数变得相同的最少操作轮数。

解题思路:我赛时的代码时间复杂度是O(nlogn)但是就是超时过不了,

用二分, 我们每轮减的是某一个符合条件的区间而不是一个数字

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {int n;cin >> n;vector<ll> 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());bool f = false;for (ll x : a) {if (x == 0) {f = true;break;}}vector<ll> p;for (ll x : a) {if (x > 0) {p.push_back(x);}}if (p.empty()) {cout << 0 << endl;return 0;}ll ans = 0;ll d = 0;int st = 0;                            //指向数组中第一个未被完全减到 0 的数n = a.size();while (true) {int k = n - st + (f ? 1 : 0);if (k <= 1) {break;}ll m = a[st] - d;int x = k;ll t = (m + x - 1) / x;            //还需要几轮ans += t;d += x * t;int nxt = upper_bound(a.begin() + st, a.end(), d) - a.begin();if (nxt > st) {st = nxt;f = true;}}cout << ans << endl;return 0;
}

 F. 中位数

 

解题思路:贡献法, 枚举中位数, 求mid =1 -> n 的乘积, 每个mid ^(mid在所有肯呢个排列中的所有可能区间中位数的情况数),枚举所有可能的区间长度 len=1, len=2, len=3....len=n

len! * len*(n-len) ! * ( n-len +1)

比mid小:mid-1 比mid大:n-mid

mid左侧为 C (len/2).floor / mid-1 ; mid右侧为 C len-1-(len/2).floor / n-mid

然后从len=1 -> n累加

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int P=1610612741;
const int PM1=P-1;
int Qpow(int a,int b){int res=1;while(b){if(b&1) res=res*a%P;a=a*a%P;b>>=1;}return res;
}
void solve(){int n;cin>>n;vector<vector<int>> C(n+1,vector<int>(n+1));for(int i=0;i<=n;i++){C[i][0]=1;for(int j=1;j<=i;j++){C[i][j]=(C[i-1][j]+C[i-1][j-1])%PM1;}}vector<int> f(n+1);f[0]=1;for(int i=1;i<=n;i++){f[i]=1LL*f[i-1]*i%PM1;}//预处理vector<int> ff(n+1);for(int i=1;i<=n;i++){ff[i]=1LL*f[i]*f[n-1]%PM1;ff[i]=1LL*ff[i]*(n-i+1)%PM1;}int ans=1;for(int i=2;i<=n;i++){int tot=0;for(int l=1;l<=n;l++){int c=0;if(l%2==0){c=1LL*C[i-1][l/2]*C[n-i][l/2-1]%PM1;}else{c=1LL*C[i-1][l/2]*C[n-i][l/2]%PM1;}tot+=1LL*c*ff[l]%PM1;}ans=1LL*ans*Qpow(i,tot%PM1)%P;}cout<<ans<<endl;
}
signed main(){solve();return 0;
}

感谢大家的点赞和关注,你们的支持是我创作的动力! 

 


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

相关文章

【数据分析】基于Cox模型的R语言实现生存分析与生物标志物风险评估

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理生存分析画图输出图片其他标记物的分析总结系统信息介绍 分析生存数据与多种生物标志物之间的关系。它通过Cox比例风险模型来评估不同生物标志物…

“长大设计歼-90” 小孩哥、小孩姐,尽管大胆畅想

“这里面能装核弹吗?”“叔叔,这炮真能打一万发吗?你们数过吗?”“我长大以后,要设计太空战机歼-90!”小朋友们你们尽情畅想未来国防力量的新篇章将由你们去开创大朋友们且接稚子剑,斩尽暮气来孩子们的奇思妙想还需要你们守护今天,“六一”国际儿童节祝所有大朋友、小朋…

商家炮轰美团神券活动 强制补贴引发争议

一位名为“天才外卖运营课堂”的博主在抖音上表达了对美团618活动的不满,称其为“拿商家的钱,办美团的事”。该活动规定,18元的优惠券中,商家需承担12元,平台补贴6元。面对京东外卖的竞争压力,美团推出了这项举措,但结果却引发了商家和消费者的广泛争议。市场人士指出,…

把足球搞上去 江苏是认真的 “苏超”燃动全省

虎扑App紧急新增“江苏联”频道。在“苏超”第三轮于5月31日开打之前,一票难求和诸梗风行的情势深度交织,让越来越多的网友沉醉其间。玩梗层出不穷:“我从来不关心足球,这次特别关注”“我都不是球迷,我就是为了争口气”“没有假球,全是世仇”“比赛第一,友谊第十四”。…

美洛杉矶港负责人:目前进口量在缓慢回升

美洛杉矶港负责人:目前进口量在缓慢回升 但没达到原有水平美国有线电视新闻网5月30日报道称,尽管美国港口管理方期盼关税出现利好消息,但由于美国政府在关税政策层面的剧烈摇摆,即使有利好消息传出,商品也难以立即恢复流入美国港口。目前,美国港口进口量仍未恢复至原有水…

AE已禁用刷新请释放Caps Lock

用AE 是不是遇到过这样的提示&#xff0c; 不用担心。 只需要关闭大写按键即可 关闭 这个CAPS LOCK 按键即可

俄一桥梁被炸坍塌 已致数十人伤亡 爆炸装置所致

5月31日,俄罗斯布良斯克州一座桥梁发生坍塌,导致一辆从莫斯科开往该州城市克利莫沃的列车脱轨。据初步统计,事故共造成31人伤亡,其中3人不幸遇难,28人被送往医疗机构救治。媒体报道称,不明身份者在桥梁上放置了4个爆炸装置并在列车经过时引爆。桥梁被自制爆炸装置破坏,导…

66条预警齐发!浙江将迎大风暴雨 警惕次生灾害

今天雨水继续,截至6:45分,浙江共有66条气象预警,其中暴雨预警43条,大家出门一定要提高警惕。昨天下午自浙西北地区先起雨,雨量最大时段为5月31日后半夜至6月2日上午,浙中北有大雨暴雨,杭嘉湖大部、宁绍北部、衢州西北部局部有大暴雨。强对流以短时暴雨为主,最大小时雨强…

球迷冲突!巴黎球迷朝警方投掷燃烧瓶,警方发射催泪弹驱散人群

直播吧6月1日讯 在巴黎圣日耳曼夺得欧冠冠军后,法国城市博韦(Beauvais)发生巴黎圣日耳曼球迷和警察的冲突。在欧冠决赛中,巴黎圣日耳曼5-0大胜国米,成功夺冠。巴黎圣日耳曼的球迷们在法国各地庆祝,但在博韦却发生了球迷骚乱。当时一群球迷先是欢呼夺冠,然后开始侮辱马赛…

香港演员方刚去世巨额遗产继承成谜 干儿子或将继承

5月30日,网络上爆出原香港TVB著名反派演员方刚因病去世,享年78岁。令人意外的是,这一消息并非由他的直系亲属公布,而是由他多年前在四川收养的六个干儿子之一,来自四川雅安芦山县的王翰祥发布的。方刚终身未娶,没有亲生子女,但他并不孤单。他有一个堪比亲生儿子的干儿子…

樊振东加盟德甲联赛 莫雷加德欢迎 新挑战开启

6月1日,萨尔布吕肯俱乐部宣布樊振东加盟德甲联赛。樊振东表示他非常期待在萨尔布吕肯和德甲的新挑战,希望能体验新的环境,并与球队一起赢得更多胜利。球队经理对这一消息感到惊讶,但确认这是现实,樊振东将为球队效力。这不仅是俱乐部的一个重要体育里程碑,也是德国和欧洲…

融智学内涵、数学定义和跨学科应用的四个核心公式

融智学内涵、数学定义和跨学科应用的四个核心公式 四个核心公式的可视化解析&#xff0c;结合融智学内涵、数学定义和跨学科应用的三维呈现&#xff1a; 图 码graph TB subgraph 公式全息解析 direction TB %% 道函数公式 subgraph F1["f_Tao(Ob,Mor,Γ)0"] dire…

reverse_ssh 建立反向 SSH 连接指南 混淆AV [好东西哟]

目录 &#x1f310; 工具简介 ⚙️ 前提条件 攻击主机 (Linux) 目标主机 (Windows) &#x1f4cb; 详细步骤 步骤 1&#xff1a;安装 Go 环境 步骤 2&#xff1a;安装必要依赖 步骤 3&#xff1a;下载并编译 reverse_ssh 步骤 4&#xff1a;配置密钥 步骤 5&#xff…

wavelib库 图像处理

1. Wavelib图像处理核心功能 Wavelib虽主要针对1D信号&#xff0c;但可通过分通道处理实现图像操作&#xff1a; 多级小波分解&#xff08;DWT&#xff09;&#xff1a;提取低频&#xff08;近似&#xff09;和高频&#xff08;细节&#xff09;成分 图像去噪&#xff1a;阈值…

江科大IIC读取MPU6050hal库实现

hal库相关函数 初始化结构体 typedef struct {uint32_t ClockSpeed; /*通讯速度*/uint32_t DutyCycle; /*快速模式下的占空比*/uint32_t OwnAddress1; /*设备地址1*/uint32_t AddressingMode; /*设备地址模式*/uint32_t DualAddressMode; /*双地址模式…

CTFHub-RCE 命令注入-过滤运算符

观察源代码 代码里面可以发现过滤了运算符&#xff0c;我们可以尝试分号&#xff1b; 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1;ls 打开flag文件 cat这个php文件 127.0.0.1;cat flag_257413168915334.php 可是发现 文本内容显示…

基带传输实验-码型变换

基带传输实验 码型变换 因图片过多且显示失败&#xff0c;故提供源文件共大家按需自行下载&#xff1a;我用夸克网盘分享了「实验报告1.docx」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看&#xff0c;支持多种文档格式转换。 链接&#xff1a;https://pan.quark.c…

中交四航局三公司被罚没7769万元 违规售石料受重罚

5月31日,中交四航局第三工程有限公司因在广连高速TJ02标从化段施工过程中与他人合谋私自出售合法施工产生的石料,被广州市规划和自然资源局处以两项行政处罚,合计罚没金额达77697872元。两项处罚决定日期均为2025年5月23日。根据行政处罚决定书文号穗规划资源从资罚﹝2025﹞…

不必到处扣“恒大”的帽子 无端指责需叫停

恒大或许没想到,多年后会以一种奇特的方式登上热搜。上周,某车企大佬的一番言论引发广泛关注。他提到“汽车产业里的恒大已经出现,只不过还没爆。”这句话在汽车消费市场和金融二级市场中引起巨大反响。这一言论之所以引起热议,一方面是因为恒大暴雷事件给人们留下了深刻印…

Ubuntu 22.04 安装 IsaacLab 2.1.0

安装流程参考 IsaacLab 官方文档 Quickstart Guide — Isaac Lab Documentation 1. 创建虚拟环境 conda create -n isaaclab python3.10 conda activate isaaclab 2. 安装 pytorch&#xff0c;按照官方说明&#xff0c;没什么特殊需求直接用 cuda 11.8 即可 pip install to…