2024.9.23 cj 训练总结
1.2024.9.23 cj 训练总结
T1
这道题目仔细观察就会发现:
- 异或
- k=1
这就很好办,考虑 k=1 怎么解 3 1 2 4 5 6 7.......... 即可。
异或,找规律发现有很多数字的异或值为0的。最后的答案是有规律的。
不知道什么问题,场上就70分。
T2
这道题目基本上没啥思路,就是弄了个桶10分。
正解:
由于这个题目的字符集大小只有
然后关于离散,我们显然可以用 vector
把每中字符的出现位置记录下来。然后用类似归并的方法求解即可。
关于强制选取至少一个
由于每种字符作为最大与最小总共被枚举
所以时间复杂度为
空间复杂度
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int n;
vector<int> tong[30];
char s[1000005];
int ans;
int main(){
cin>>n>>s;
for(int i=1;i<=n;++i){
tong[s[i-1]-'a'].push_back(i);
}
for(int i=0;i<26;++i){
if(!tong[i].size()){
continue;
}
for(int j=0;j<26;++j){
if(!tong[j].size() || i==j){
continue;
}
int num1=0;int num2=0;
bool f=0;
int cnt=-1;
while(num1<tong[i].size() || num2<tong[j].size()){
int a1,a2;
if(num1==tong[i].size()){
a1=1e9;
}else{
a1=tong[i][num1];
}
if(num2==tong[j].size()){
a2=1e9;
}else{
a2=tong[j][num2];
}
if(a1<a2){
num1++;
cnt++;
}
if(a1>a2){
if(f==1){
cnt--;
}
num2++;
f=1;
}
if(cnt<0){
f=0;
cnt=-1;
}
ans=max(ans,cnt);
}
}
}
cout<<ans<<'\n';
return 0;
}
T3
这道题目我就是对于 sub1的分就是 st表 维护一下。
对于 sub2 的分数就是纯暴力。
正解:
这道题目乍一看并没有什么思路,然后会很沮丧地发现其实两条边根本就是个乘法,根本贪心不了。
当时对这种玄学的东西一看就是 dp,然后又觉得是个斜率优化,因为有值相乘,但是dp根本设计不出来
真正的正解:
然后原题在 这里 ,但是题解并没有看懂。
单调站维护还可以,但是后面的树状数组维护真的很迷糊。
T4
完全不会。
tj:
原题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)