• 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;
    }
  • 相关阅读:

    修改 linux 时区时间和 php 时区
    夺命雷公狗—玩转SEO---21---域名购买技巧
    夺命雷公狗—玩转SEO---20---K站
    夺命雷公狗—玩转SEO---19---降权
    夺命雷公狗—玩转SEO---18---索引
    夺命雷公狗—玩转SEO---17---收录
    夺命雷公狗—玩转SEO---16---关键词词性和定位关键词
    夺命雷公狗—玩转SEO---15---域名
    夺命雷公狗—玩转SEO---14---空间和服务器的区别
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4376191.html
Copyright © 2020-2023  润新知