• 浙江工商大学15年校赛C题 我删我删,删删删 【简单模拟】


    Description:
    有一个大整数.不超过1000位.假设有N位.我想删掉其中的任意S个数字.使得删除S位后,剩下位组成的数是最小的.
    
    Input:
    有多组数据数据,每组数据为两行.第一行是一个大整数.第二行是个整数S,其中S小于大整数的位数. 输入以EOF结束。
    
    Output:
    对于每组输入数据,请输出其删除后的最小数.
    
    Sample Input:
    178543
    4
    100002
    1
    Sample Output:
    13
    2
    

    解题思路:

    删除比它下一位大的数字,删除S次即可

    注意的是要对答案取出前导0

    Source Code:

    //#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    ;
    const int INF = 0x3f3f3f3f   ;
    const int offset = 100       ;
    
    string ch;
    char Min;
    int n, m;
    
    int main() {
        std::ios::sync_with_stdio(false);
        int i, j, t, k, u, c, v, p, numCase = 0;
    
        while (cin >> ch) {
            n = ch.size();
            cin >> m;
            while (m--) {
                bool flag = true;//ADD
                Min = ch[0];
                for (i = 1; i < n; ++i) {
                    if (Min > ch[i]) {
                        for (j = i; j <= n; ++j) {
                            ch[j - 1] = ch[j];
                        }
                        flag = false;//ADD
                        --n;
                        break;
                    } else {
                        Min = ch[i];
                    }
                }
                if (flag) { //ADD
                    --n;    //ADD
                }           //ADD
            }
            i = 0;
            for (;;) {
                if (ch[i] == '0') {
                    ++i;
                    continue;
                }
                break;
            }
            if (i == n) {
                cout << 0 << endl;
            } else {
                for (; i < n; ++i) {
                    cout << ch[i];
                }
                cout << endl;
            }
        }
    
        return 0;
    }
  • 相关阅读:
    数据中台
    mlog$_
    Vue.js_判断与循环
    Vue.js_数据绑定
    Javascript-构造函数
    Javascript-Canvas实现三角函数曲线动画图
    Javascript-Canvas图片填充之预加载
    同步和异步的理解
    JavaScript-rem字体自适应
    JavaScript-获取屏窗与视窗、文档宽高
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4362099.html
Copyright © 2020-2023  润新知