自己在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;
}