• ZOJ Problem Set


    ZOJ Problem Set - 3829Known Notation(贪心)

    题目链接

    题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达式,问最少须要多少操作能够把这个表达式变成合法的。
    操作:
    1、在这个表达式的不论什么位置插入‘
    ’或者数字(一位数)。
    2、把这个表达式的不论什么两个位置的字符对换。

    解题思路:
    一開始想的好复杂,结果还是漏了某种情况,一直过不去;就是卡在了碰到‘’的时候,数字不够是插入好还是替换好。
    事实上仅仅要这么想:首先,数字的个数至少要是符号的个数 + 1.先求数字和符号的个数。数字不够插入自然更优,否则替换更好,而且插入数字在最越前面越好,替换‘
    ’替换在越后面越好。
    注意:所有是数字的情况。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 1005;
    char str[maxn];
    
    int main () {
    
        int T;
        scanf ("%d", &T);
        while (T--) {
    
            scanf ("%s", str);
            int num, op, ans;
            int len = strlen (str);
            ans = num = op = 0;
    
            for (int i = 0; i < len; i++)
                if (str[i] == '*')
                    op++;
            num = len - op;
            if (!op) {
                printf ("0
    ");
                continue;
            }
    
            if (str[len - 1] != '*') {
    
                ans++;
                for (int i = 0; i < len; i++)
                    if (str[i] == '*') {
                        swap(str[i], str[len - 1]);
                        break;
                    }
            }
    
            int cnt = 0;
            for (int i = 0; i < len; i++) {
    
                if (str[i] == '*') {
    
                    if (cnt > 1)
                        cnt--;
                    else {
    
                        if (num >= op + 1) {
    
                            for (int j = len - 1; j >= 0; j--)
                                if (str[j] != '*') {
                                    swap(str[j], str[i]);
                                    cnt++;
                                    ans++;
                                    break;
                                }
    
                        } else {
    
                            ans++;
                            num++;
                            if (!cnt) {
                                i--;
                                cnt = 1;
                            }
                        }
                    }
                } else
                    cnt++;
            }
    
            printf ("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    loj#2540. 「PKUWC2018」随机算法
    loj#2538. 「PKUWC2018」Slay the Spire
    loj#2537. 「PKUWC2018」Minimax
    CF662C Binary Table
    bzoj4589: Hard Nim
    【HDU5909】Tree Cutting(FWT)
    P3175 [HAOI2015]按位或
    P4389 付公主的背包
    P4233 射命丸文的笔记
    GFS分布式文件系统环境部署与管理
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4376191.html
Copyright © 2020-2023  润新知