Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
121908 林扬泉 字符串的展开 C++ 通过 100 18 MS 396 KB 2507 2024-01-22 10:34:56

Tests(10/10):


//顺序枚举每一个字符且对于每一个 ' - ' 进行判断: //假设此'-'位置为i,其字符串为s //如果前后都为字母:(题目明说是小写) // (1).若s[i-1]>=s[i+1]:continue // (2).按照题目要求进行模拟 //如果前后都为数字: // (1).若s[i-1]>=s[i+1]:continue // (2).按照题目要求进行模拟 // (3).其他:continue //设 S=abc-fg //当我们扫描到'-'时可见其分为: // A=abc(其中A=Get(1,i-1)) // B=""(其中B要清零) // C=fg(其中C=Get(i+1,r))然后再对B进行处理 // 要记得i+=NUM(NUM为加入元素的个数) #include<bits/stdc++.h> using namespace std; int p1,p2,p3; string s; string Get(int l,int r){ string k=""; for(int i=l;i<=r;i++){ k=k+s[i]; } return k; } int main(){ int num=0; string a,b,c; scanf("%d%d%d",&p1,&p2,&p3); cin>>s; for(int i=0;i<=s.length()-1;i++){ num=0;a="",b="",c=""; if(s[i]=='-'){ if(s[i-1]>='a'&&s[i-1]<='z'&&s[i+1>='a']&&s[i+1]<='z'){ a=Get(0,i-1); c=Get(i+1,s.length()-1); if(s[i-1]>=s[i+1]){ continue; } if(p3==1){ for(int j=s[i-1]+1;j<s[i+1];j++){ for(int k=1;k<=p2;k++){ num++; if(p1==1){ b=b+(char)(j); } if(p1==2){ b=b+(char)(j-'a'+'A'); } if(p1==3){ b=b+'*'; } } } } if(p3==2){ for(int j=s[i+1]-1;j>s[i-1];j--){ for(int k=1;k<=p2;k++){ num++; if(p1==1){ b=b+(char)(j); } if(p1==2){ b=b+(char)(j-'a'+'A'); } if(p1==3){ b=b+'*'; } } } } s=a+b+c; i+=num; } if(s[i-1]>='0'&&s[i-1]<='9'&&s[i+1]>='0'&&s[i+1]<='9'){ a=Get(0,i-1); c=Get(i+1,s.length()-1); if(s[i-1]>=s[i+1]){ continue; } if(p3==1){ for(int j=s[i-1]+1;j<s[i+1];j++){ for(int k=1;k<=p2;k++){ num++; if(p1==1){ b=b+(char)(j); } if(p1==2){ b=b+(char)(j); } if(p1==3){ b=b+'*'; } } } } if(p3==2){ for(int j=s[i+1]-1;j>s[i-1];j--){ for(int k=1;k<=p2;k++){ num++; if(p1==1){ b=b+(char)(j); } if(p1==2){ b=b+(char)(j); } if(p1==3){ b=b+'*'; } } } } s=a+b+c; i+=num; } } else{ continue; } } cout<<s<<'\n'; return 0; }


测评信息: