80 分求调

P10836 『FLA - I』歌静河

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了@我一下


|