做法
按类模拟即可。
代码
#include<bits/stdc++.h>
using namespace std;
char f[120],ch[10000],st[10000];
int p1,p2,p3;
int len1,len2;
int main()
{
scanf("%d%d%d",&p1,&p2,&p3);
scanf("%s",f+1);
int len=strlen(f+1);
if(p3==1)//zhengxu
{
if(p1==1)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') st[++len1]=f[i];
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&(int)f[i]-(int)st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) st[++len1]=(char) (j+'0');
st[++len1]=f[i];
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&(int)f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;++j) for(int t=1;t<=p2;++t) st[++len1]=(char) (j+'a');
st[++len1]=f[i];
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
if(p1==2)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') st[++len1]=f[i];
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&f[i]-st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) st[++len1]=(char) (j+'0');
st[++len1]=f[i];
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;++j) for(int t=1;t<=p2;++t) st[++len1]=(char) (j+'A');
st[++len1]=f[i];
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
if(p1==3)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') st[++len1]=f[i];
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&f[i]-st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) st[++len1]='*';
st[++len1]=f[i];
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;++j) for(int t=1;t<=p2;++t) st[++len1]='*';
st[++len1]=f[i];
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
}
if(p3==2)//nixu
{
if(p1==1)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') {st[++len1]=f[i]; continue;}
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&f[i]-st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) ch[++len2]=(char) (j+'0');
for(int j=len2;j>=1;--j) st[++len1]=ch[j];
st[++len1]=f[i],len2=0;
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) ch[++len2]=(char) (j+'a');
for(int j=len2;j>=1;--j) st[++len1]=ch[j];
st[++len1]=f[i],len2=0;
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
if(p1==2)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') st[++len1]=f[i];
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&(int)f[i]-st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) ch[++len2]=(char) (j+'0');
for(int j=len2;j>=1;--j) st[++len1]=ch[j];
st[++len1]=f[i],len2=0;
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&(int)f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) ch[++len2]=(char) (j+'A');
for(int j=len2;j>=1;--j) st[++len1]=ch[j];
st[++len1]=f[i],len2=0;
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
if(p1==3)
{
for(int i=1;i<=len;i++)
{
if(f[i]!='-') st[++len1]=f[i];
if(f[i]=='-')
{
if(i==1||i==len||f[i-1]=='-') {st[++len1]='-';continue; }
i++;
if(f[i]-'a'<0&&st[len1]-'a'<0&&f[i]-st[len1]>0)//shuzi
{
int b=f[i]-'0',a=st[len1]-'0';
for(int j=a+1;j<=b-1;j++) for(int t=1;t<=p2;++t) st[++len1]='*';
st[++len1]=f[i];
}
else if(f[i]-'a'>=0&&st[len1]-'a'>=0&&f[i]-st[len1]>0)//zimu
{
int b=f[i]-'a',a=st[len1]-'a';
for(int j=a+1;j<=b-1;++j) for(int t=1;t<=p2;++t) st[++len1]='*';
st[++len1]=f[i];
}
else st[++len1]=f[i-1],st[++len1]=f[i];
}
}
}
}
for(int i=1;i<=len1;i++) cout<<st[i];
return 0;
}