死磕了一题模拟 A掉的时候我是爽的
ZOJ 3490
没有题解。
一句话,要么贴代码,要么自己打。
#include<cstdio>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<math.h>
#include<queue>
#include<stdlib.h>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
using namespace std;
#define INF 0x3f3f3f3f
#define N 10000000
char s[110];
int ans[3][110];
int p1;
int p2;
int n;
int JUDGE(int x)
{
if(x>='a'&&x<='z')
return 1;
if(x>='A'&&x<='Z')
return 2;
if(x>='0'&&x<='9')
return 3;
return 0;
}
int num;
int j_1,j_2,k;
void sk(char h)
{
int flag=0;
for(int i=j_1+1; i<num; i++)
{
if(JUDGE(ans[1-k][i]))
{
flag=1;
break;
}
}
if(flag==0)
{
if(h=='0')
ans[k][j_2++]='1';
else if(h=='a')
ans[k][j_2++]='a';
else
ans[k][j_2++]='A';
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s%d",s,&n);
int len;
len=strlen(s);
num=0;
k=0;
for(int i=len-1; i>=0; i--)
{
ans[0][num++]=s[i];
}
int t=-1;
for(int i=0; i<num; i++)
{
if(JUDGE(ans[0][i]))
{
t=i;
break;
}
}
int x;
int bb;
bb=1;
if(t==-1)
{
for(int i=1; i<=n; i++)
{
k=1-k;
j_1=j_2=0;
x=ans[1-k][j_1]+1;
ans[k][j_2++]=x;
j_1++;
while(j_1<num)
{
ans[k][j_2++]=ans[1-k][j_1];
j_1++;
}
num=j_2;
for(int j=j_2-1; j>=0; j--)
printf("%c",ans[k][j]);
printf("\n");
bb=i+1;
if(x=='0'||x=='a'||x=='A')
{
t=0;
break;
}
}
}
int flat;
for(int i=bb; i<=n; i++)
{
k=1-k;
j_1=j_2=0;
flat=0;
while(j_1<num)
{
x=ans[1-k][j_1];
if(j_1<t)
ans[k][j_2++]=x;
else if(j_1==t)
{
x+=1;
if(x==('z'+1))
{
ans[k][j_2++]='a';
flat=1;
sk('a');
}
else if(x==('Z'+1))
{
ans[k][j_2++]='A';
flat=1;
sk('A');
}
else if(x==('9'+1))
{
ans[k][j_2++]='0';
flat=1;
sk('0');
}
else
ans[k][j_2++]=x;
}
else
{
if(JUDGE(x))
{
if(flat)
{
x+=1;
if(x==('z'+1))
{
ans[k][j_2++]='a';
sk('a');
}
else if(x==('Z'+1))
{
ans[k][j_2++]='A';
sk('A');
}
else if(x==(1+'9'))
{
ans[k][j_2++]='0';
sk('0');
}
else
{
ans[k][j_2++]=x;
flat=0;
}
}
else
{
ans[k][j_2++]=x;
}
}
else
{
ans[k][j_2++]=x;
}
}
j_1++;
}
for(int j=j_2-1; j>=0; j--)
{
printf("%c",ans[k][j]);
}
printf("\n");
num=j_2;
}
printf("\n");
}
return 0;
}
/*
100 5
1 12
**9**9 10
:-( 1
cirno=8 2
X 3
*********/
/*
*/