ZOJ 3490 String Successor 字符串处理

一道模拟题,来模拟进位

暴力的从右往左扫描,按规则求后继就好了。除了Sample已给出的,还有一些需要注意的地方:

  • 9的后继是10,而不是00;
  • (z)的后继是(aa),而不是a(a);
  • 输入虽然最长只有100,但输出最长可能有102。

事实上题目中给的字符串后继规则,也是Ruby中String#succ或String#next所用的规则

 

http://blog.watashi.ws/1944/the-8th-zjpcpc/

标程也写的非常好

 

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler

#include <stdio.h>

#include <iostream>

#include <fstream>

#include <cstring>

#include <cmath>

#include <stack>

#include <string>

#include <map>

#include <set>

#include <list>

#include <queue>

#include <vector>

#include <algorithm>

#define Max(a,b) (((a) > (b)) ? (a) : (b))

#define Min(a,b) (((a) < (b)) ? (a) : (b))

#define Abs(x) (((x) > 0) ? (x) : (-(x)))

#define MOD 1000000007

#define pi acos(-1.0)



using namespace std;



typedef long long           ll      ;

typedef unsigned long long  ull     ;

typedef unsigned int        uint    ;

typedef unsigned char       uchar   ;



template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}

template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}



const double eps = 1e-7      ;

const int N = 210            ;

const int M = 1100011*2      ;

const ll P = 10000000097ll   ;

const int MAXN = 10900000    ;



string str;

int n;



bool exist () {

    for (int i = 0; i < str.size(); ++i) {

        if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z' || str[i] >='0' && str[i] <= '9')    return true;

    }

    return false;

}



bool exist (char ch) {

    return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <='9';

}



int main(){

    std::ios::sync_with_stdio(false);

    int i, j, t, k, u, v, numCase = 0;

    int flag;



    cin >> t;

    while (t--) {

        cin >> str >> n;

        while (n--) {

            if (exist ()) {

                flag = 0;

                for (i = str.size () - 1; i >= 0; --i) {

                    if (exist (str[i])) {

                        if (str[i] == '9' || str[i] == 'Z' || str[i] == 'z') {

                            for (j = 0; j < i; ++j) {

                                if (exist (str[j])) break;

                            }

                            if (j == i && j != 0) {



                                if (str[i] == '9')  {

                                    flag  = 1;

                                    str[i] = '0';

                                } else if (str[i] == 'Z') {

                                    flag  = 2;

                                    str[i] = 'A';

                                } else if (str[i] == 'z') {

                                    flag  = 3;

                                    str[i] = 'a';

                                }



                                if (flag) {

                                    if (1 == flag) {

                                        string tmp;

                                        for (k = 0; k < i; ++k) tmp.push_back(str[k]);

                                        tmp.push_back('1');

                                        for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);

                                        str = tmp;

                                    }

                                    if (2 == flag) {

                                        string tmp;

                                        for (k = 0; k < i; ++k) tmp.push_back(str[k]);

                                        tmp.push_back('A');

                                        for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);

                                        str = tmp;

                                    }

                                    if (3 == flag) {

                                        string tmp;

                                        for (k = 0; k < i; ++k) tmp.push_back(str[k]);

                                        tmp.push_back('a');

                                        for (k = i; k < str.size(); ++k) tmp.push_back(str[k]);

                                        str = tmp;

                                    }

                                }

                                flag = 0;



                                break;

                            }



                            else {

                                if (str[i] == '9')  {

                                    flag  = 1;

                                    str[i] = '0';

                                } else if (str[i] == 'Z') {

                                    flag  = 2;

                                    str[i] = 'A';

                                } else if (str[i] == 'z') {

                                    flag  = 3;

                                    str[i] = 'a';

                                }

                            }

                        }



                        else {

                            flag = 0;

                            ++str[i];



                            break;

                        }

                    }

                }



                if (flag) {

                    if (1 == flag) {

                        string tmp;

                        tmp.push_back('1');

                        for (i = 0; i < str.size(); ++i) tmp.push_back(str[i]);

                        str = tmp;

                    }

                    if (2 == flag) {

                        string tmp;

                        tmp.push_back('A');

                        for (i = 0; i < str.size(); ++i) tmp.push_back(str[i]);

                        str = tmp;

                    }

                    if (3 == flag) {

                        string tmp;

                        tmp.push_back('a');

                        for (i = 0; i < str.size(); ++i) tmp.push_back(str[i]);

                        str = tmp;

                    }

                }



                cout << str << endl;

            } else {

                ++str[str.size () - 1];

                cout << str << endl;

            }

        }



        cout << endl;

    }



    return 0;

}

 

你可能感兴趣的:(String)