求助:自己测试对的,oj判错
查看原帖
求助:自己测试对的,oj判错
1299571
lg128楼主2024/7/28 14:30

自己在vscode上的输出与测试点输出一样,放到oj上就十个测试点全WA,这是怎么回事啊

代码如下
/*
Z表示展开
D表示删去
R表示保留
*/
#include <iostream>
#include <ctype.h>
#include <vector>
#include <cstring>
#include <algorithm>
bool is[110];
using namespace std;
int main(){
    memset(is,0,sizeof is);
    int p1,p2,p3;
    cin>>p1>>p2>>p3;
    string str;
    cin.ignore();
    getline(cin,str);
    vector<pair<int,char>> v;
    int pos=str.find('-');
    if(pos==string::npos) {cout<<str;return 0;}
    while(pos!=string::npos){
        if(pos==0||pos==str.size()-1) {pos=str.find('-',pos+1);continue;}
        if((isdigit(str[pos-1])&&isdigit(str[pos+1]))||(isalpha(str[pos-1])&&isalpha(str[pos+1]))){
            int c=(str[pos+1]-str[pos-1]);
            if(c>=2){
                v.push_back({pos,'Z'});
            }
            else if(c==1){
                v.push_back({pos,'D'});
            }
            else{
                v.push_back({pos,'R'});
            }
        }
        else{
            v.push_back({pos,'R'});
        }
        is[pos]=1;
        pos=str.find('-',pos+1);
    }
    vector<string> vs;
    for(auto p:v){
        if(p.second=='Z'){
            string s;char st=str[p.first-1]+1,ed=str[p.first+1]-1;
            if(p1==1) st=tolower(st),ed=tolower(ed);
            else if(p1==2) st=toupper(st),ed=toupper(ed);
            //cout<<"st:"<<st<<"ed:"<<ed<<endl;
            for(char c=st;c<=ed;c++){
                for(int i=0;i<p2;i++){
                    if(p1==3) s+='*';
                    else s+=c;
                }
            }
            if(p3==2) reverse(s.begin(),s.end());
            vs.push_back(s);
        }
    }
    int idx=0;
    for(int i=0;str[i];i++){
        if(is[i]){
            if(v[idx].second=='Z') cout<<vs[idx++];
            else if(v[idx].second=='D') continue;
            else if(v[idx].second=='R') cout<<'-';
        }
        else cout<<str[i];
    }
    return 0;
}
2024/7/28 14:30
加载中...