Pink_Cut_Tree @ 2024-08-03 20:55:18
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=2e5+5;
int n,m;
string s,t;
int num; //t 中 # 的数量
int now;
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
cin>>s>>t;
for(int i=0;i<n;i++){
if(t[i]=='#'){
num++;
}
}
if(num==0){ //若 t 中不含 #
for(int i=0;i<n;i++){
if(s[i]=='#'){
cout<<char(now+'a');
now++; now%=26;
}
else{
cout<<s[i];
}
}
return 0;
}
if(num==m){
cout<<s; return 0;
}
for(int i=0;i<n;i++){
if(s[i]=='#'){
if(num>=25){
num-=25;
cout<<"a";
}
else{
cout<<char(now+'a');
now++; now%=26;
}
}
else{
cout<<s[i];
}
}
return 0;
}
by yzm0325 @ 2024-08-03 20:58:23
@Present_Coming_Time 给组 hack 数据:
20 36
####################
################abcd
by yzm0325 @ 2024-08-03 21:00:14
@Present_Coming_Time 你的输出是:
abcdefghijklmnopqrst
而正确输出是:
abcdefghiabcdefghijk
by yzm0325 @ 2024-08-03 21:01:11
额,多打了个 k
by liaocr @ 2024-08-03 21:24:10
神奇 我刚帮人调完这道 既然碰到了 我也说一下吧
第一 你这有点问题 如果now是0 而num>=25他会扣你25 完全没必要 所以要加个条件now!=0
第二 不能只看num, 看的是num+now 要的是num+now>=26
第三 num每次不是都减25 是看now的值减 所以num-=(26-now) 后面再加一个now=1
这样就能AC了
给上AC代码
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=2e5+5;
int n,m;
string s,t;
int num; //t 中 # 的数量
int now;
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
cin>>s>>t;
for(int i=0;i<n;i++){
if(t[i]=='#'){
num++;
}
}
if(num==0){ //若 t 中不含 #
for(int i=0;i<n;i++){
if(s[i]=='#'){
cout<<char(now+'a');
now++; now%=26;
}
else{
cout<<s[i];
}
}
return 0;
}
if(num==m){
cout<<s; return 0;
}
for(int i=0;i<n;i++){
if(s[i]=='#'){
if(num+now>=26&&now!=0){
num-=(26-now);
now = 1;
cout<<"a";
}
else{
cout<<char(now+'a');
now++;
now%=26;
}
}
else{
cout<<s[i];
}
}
return 0;
}
by liaocr @ 2024-08-03 21:24:50
@Present_Coming_Time AC了@我一下