zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4410063.html
Copyright © 2011-2022 走看看