CSP-J模拟赛2—总结
CSP-J模拟赛2—总结
2025.10.2
王语曦
个人感受:
T1:这道题是 AC 了的,去看了题解的思路,发现和我的差不多,也就没啥事了。
T2:这道题拿了 long long。
T3:这道题没有拿分其中有一个问题是老师的评测机出了问题我的想法是只要把原来的字符串与单词比对过后是一样的,就给开头加一个 虽然应该可以得到 。
T4:树很久之前学过,但是太久没有复习了,就差不多忘完了,在听了老师的讲解之后,差不多有了一点想法,不过还是需要下去再消化消化。
T1 letter 字母简记
题意:
给出一个字符串,包含小写字母和数字,数字代表把前面的字符串给复读若干次,最后然我我们输出需要复读的字符串。
思路:
用一个字符串
Code:
if(!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:
vector<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:
s=" "+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 处理出各个结点的深度,然后将操作进行记录,在
操作一和操作二累积的权值,再根据操作按深度从小到大或从大到小进行传递,最后将