2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation

2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。


Known Notation



Time Limit: 2 Seconds      
Memory Limit: 65536 KB


Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathematics and computer science. It is also known as postfix notation since every operator in an expression follows all of its operands. Bob is a student in Marjar University. He is learning RPN recent days.

To clarify the syntax of RPN for those who haven’t learnt it before, we will offer some examples here. For instance, to add 3 and 4, one would write “3 4 +” rather than “3 + 4”. If there are multiple operations, the operator is given immediately after its second operand. The arithmetic expression written “3 – 4 + 5” in conventional notation would be written “3 4 – 5 +” in RPN: 4 is first subtracted from 3, and then 5 added to it. Another infix expression “5 + ((1 + 2) × 4) – 3” can be written down like this in RPN: “5 1 2 + 4 × + 3 -“. An advantage of RPN is that it obviates the need for parentheses that are required by infix.

In this problem, we will use the asterisk “*” as the only operator and digits from “1” to “9” (without “0”) as components of operands.

You are given an expression in reverse Polish notation. Unfortunately, all space characters are missing. That means the expression are concatenated into several long numeric sequence which are separated by asterisks. So you cannot distinguish the numbers from the given string.

You task is to check whether the given string can represent a valid RPN expression. If the given string cannot represent any valid RPN, please find out the minimal number of operations to make it valid. There are two types of operation to adjust the given string:

  1. Insert. You can insert a non-zero digit or an asterisk anywhere. For example, if you insert a “1” at the beginning of “2*3*4”, the string becomes “12*3*4”.
  2. Swap. You can swap any two characters in the string. For example, if you swap the last two characters of “12*3*4”, the string becomes “12*34*”.

The strings “2*3*4” and “12*3*4” cannot represent any valid RPN, but the string “12*34*” can represent a valid RPN which is “1 2 * 34 *”.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

There is a non-empty string consists of asterisks and non-zero digits. The length of the string will not exceed 1000.

Output

For each test case, output the minimal number of operations to make the given string able to represent a valid RPN.

Sample Input

3
1*1
11*234**
*

Sample Output

1
0
2

Author: 
CHEN, Cong


Source: 
The 2014 ACM-ICPC Asia Mudanjiang Regional Contest

题目链接:Known Notation

解题思路:贪心。假设num < star 时,则必须在前面补充  star – num + 1  个数字,由于star个星星,须要star+1个数字,才符合要求。接下来,尽量把数字放到前面,把星星放到后面,两个数字能够消掉一个星星,由于这时候 a*b 相当于一个数字了。假设前面的数字不够用,就用前面的星星和后面的数字交换,由于交换比插入的结果要好。不断贪心下去,就可以。

AC代码:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define INF 0x7fffffff

int main()
{
    #ifdef sxk
        freopen("in.txt","r",stdin);
    #endif
    int n;
    string s;
    scanf("%d",&n);
    while(n--)
    {
        int num = 0, star = 0;
        cin>>s;
        int len = s.size();
        for(int i=0; i<len; i++){
            if(s[i] == '*') star ++;
            else num ++;
        }

        int left_num = 0, ans = 0;
        if(num <= star){
            left_num += star - num + 1;
            ans += left_num;
        }

        for(int i=0, p = len-1; i<len; i++){
            while(i < p && s[p] == '*') p --;
            if(s[i] == '*'){
                left_num --;
                if(left_num < 1){
                    swap(s[i], s[p]);     //前面的数字不够,用前面的星星和后面的数字交换
                    ans ++;
                    p --;
                    left_num += 2;
                }
            }
            else left_num ++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117966.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java mencoder_mencoder java linux[通俗易懂]

    java mencoder_mencoder java linux[通俗易懂]在执行转化的时候只能转化1分钟的影片超过1分钟影片的都不能转化。可是直接输入命令行又能全部转化。高分求解try{Runtimert=Runtime.getRuntime();Processproc=rt.exec(“mencoder”+ol…在执行转化的时候只能转化1分钟的影片超过1分钟影片的都不能转化。可是直接输入命令行又能全部转化。高分求解try{Runtimert=Runtime….

    2025年6月11日
    3
  • modelsim uvm(大数据开发环境搭建)

    1.下载modelsim软件下载modelsim,这里用的是modelsim10.4版本。下载地址:https://pan.baidu.com/s/1wnCwlQ2EblCkKHFOM6gEyw提取码:772l。完成下载和安装,在安装文件夹中可以看到uvm-1.1d,这是我们使用的uvm版本。在uvm-1.1d/win64下有uvm_dpi.dll文件,这是已经编译过的uvm库。…

    2022年4月13日
    174
  • 蓝鲸自动化运维平台

    蓝鲸自动化运维平台蓝鲸自动化运维平台1.蓝鲸简介官网:https://bk.tencent.com/docs/腾讯蓝鲸智云,简称蓝鲸,是腾讯互动娱乐事业群(InteractiveEntertainmentGroup,简称IEG)自研自用的一套用于构建企业研发运营一体化体系的PaaS开发框架,提供了aPaaS(DevOps流水线、运行环境托管、前后台框架)和iPaaS(持续集成、CMDB、作业平台、容器管理、数据平台、AI等原子平台)等模块,帮助企业技术人员快速构建基础运营PaaS。2.蓝鲸部署2

    2022年5月17日
    46
  • linux命令行修改用户名_linux 更改用户密码

    linux命令行修改用户名_linux 更改用户密码一、《Linux的chmod命令》。在shell中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。另外,在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限。二、使用chown命令更改文件拥有…

    2022年9月17日
    2
  • matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]

    matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]Copyright2008说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。目录内容第一部分:矩阵基本知识(只作基本介绍,详细说明请参考Matlab帮助文档)矩阵是进行数据处理和运算的基本元素。在M…

    2022年6月25日
    46
  • Java中将xml文件转化为json的两种方式

    Java中将xml文件转化为json的两种方式最近一直没有时间写博客,忙着找房子,天天来回折腾,光地铁费就花了不少,最后综合各种因素考虑,决定沙河高教园,哈哈,没错,别人都是越搬离公司越近,我是越搬越远,但是直觉告诉我应该没有错,昨天晚上刚搬完家,收拾收拾终于安定了,坑爹的二房东再见,以后如果不出什么特殊情况的话应该是有时间写博客了。。。。    好了废话不多说,进入正题,最近有个需求,要将xml转json之后存储在redi

    2022年7月21日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号