死磕了一题模拟 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
*********/
/*
*/
posted @ 2016-04-19 21:08  see_you_later  阅读(113)  评论(0编辑  收藏  举报