专栏文章
CSP-J模拟赛2—总结
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minq5nd6
- 此快照首次捕获于
- 2025/12/02 06:32 3 个月前
- 此快照最后确认于
- 2025/12/02 06:32 3 个月前
CSP-J模拟赛2—总结
2025.10.2
王语曦
个人感受:
T1:这道题是 AC 了的,去看了题解的思路,发现和我的差不多,也就没啥事了。
T2:这道题拿了 ,我在看了题解的思路后,认为我主要问题在于他的边界应该是从 开始往后枚举,而且我没开
long long。T3:这道题没有拿分其中有一个问题是老师的评测机出了问题我的想法是只要把原来的字符串与单词比对过后是一样的,就给开头加一个 ,但是这样的话无法做到最优解,虽然应该可以得到 。
T4:树很久之前学过,但是太久没有复习了,就差不多忘完了,在听了老师的讲解之后,差不多有了一点想法,不过还是需要下去再消化消化。
T1 letter 字母简记
题意:
给出一个字符串,包含小写字母和数字,数字代表把前面的字符串给复读若干次,最后然我我们输出需要复读的字符串。
思路:
用一个字符串 去存需要复读的东西,将输入字符串 遍历一遍,如果 ,就把 存进字符串 中;如果遇到数字,就用 while,直到 不是数字,用 去记需要重复执行的次数,先用字符串 保存一下原始的 ,再用一个 for 循环,重复执行 次,用 去加上 ,最后再输出即可。
Code:
CPPif(!isdigit(ch)) ans=ans+ch;
while(isdigit(s[w])){
k=k*10+(s[w]-'0');
w++;
flag=1;
}
if(flag==1) i=w-1;
string m=ans;
for(int j=1;j<k;j++) ans=ans+m;
T2 soldier 攻与防
题意:
给一个字符串 ,有一个点 ,令 为 中字符
0 的地址之和, 为 中字符 1 的地址之和,现要求点 在某个位置时, 的最小值。思路:
可以用暴力枚举,两方边界从 开始,慢慢往后推,去更新两个数组中的值,最后再去求 。
Code:
CPPvector<int> p1(n+5,0),p0(n+5,0); //分数初始化 0
for(int i=1;i<s.size();i++){
p1[i]=p1[i-1]+(s[i]=='1')*i; //等于 1 就加
p0[i]=p0[i-1]+(s[i]=='0')*i; //等于 0 就加
}
for(int i=1;i<=n;i++)
ans=min(ans,abs(p0[i-1]-p1[n]+p1[i-1])); //计算最小值
T3 lie 谎言
题意:
给一些单词和一个字符串,求最少模糊掉多少个字符,使得字符串中不再出现完整的单词。
思路:
可以用二维数组去把单词存进去,然后给需要修改的字符串前面加上一个空格(这样就可以从 开始遍历),接着判断如果有这个单词的话去模糊掉中间的字母,然后输出
s.substr(1,n);。Code:
CPPs=" "+s; //i 可以从 1 开始遍历
for(int i=1;i<=n;i++){
for(auto &j:lie){
if(i-int(j.size())<0) continue;
if(s.substr(i-j.size()+1,j.size())==j) s[i]='*';
}
}
cout<<s.substr(1,n)<<'\n'; //减去 " "
T4 kedori 珂朵莉树
题意:
操作树。
思路:
我们只需要先 dfs 处理出各个结点的深度,然后将操作进行记录,在 和 数组中记录。
操作一和操作二累积的权值,再根据操作按深度从小到大或从大到小进行传递,最后将 、 数组
与原本的权值数组进行求和输出即可。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...