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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cefsharp修改html元素,CefSharp网页元素点击

    cefsharp修改html元素,CefSharp网页元素点击我正在尝试简单地点击某个页面元素(如btn或链接)。我编写了两个函数,分别用于通过xpath和CSS选择器单击。这两个功能在浏览器的开发人员控制台中都能很好地工作,但在CEF中部分不能工作。从开发人员控制台和Cef的简单链接中编写完美的click代码代码完美地点击了开发人员控制台上的确切按钮,但没有点击CEF。只是出于某种原因忽略了它。。。怎么会这样?Js代码完全一样!…publicvoid…

    2022年9月14日
    1
  • NLP学习路线总结

    NLP学习路线总结目录1、自然语言处理概述2、自然语言处理入门基础3、自然语言处理的主要技术范畴4、自然语言处理基本点5、特征处理6、模型选择7、NLP常用工具8、NLP语言模型9、快速入门NLP方法10、自然语言处理学习资料1、自然语言处理概述自然语言处理(NaturalLanguageProcessing,NLP)是计算机科学领域与人工智能领域中的一个重要方向…

    2022年9月28日
    0
  • 一个字节等于多少位?「建议收藏」

    一个字节等于多少位?「建议收藏」一个字节=一个byte=8位一个字=两个byte=16位,java中:byte=8位short=2byte=16位int=4byte=32位long=8byte=64位float=4byte=32位double=8byte=64位char=4byte=32位string=可占用Integer.MAX_VALUE个char=(32*Integer.MAX_VALUE)位…

    2022年9月27日
    0
  • windows磁盘阵列[通俗易懂]

    windows磁盘阵列[通俗易懂]磁盘阵列磁盘有两个参数:容量,速度。笔记本最高转速5400转每分台式机最高转速7200转每分1.什么是RAIDRAID全称:RemdundantArrayofinexpensivesDisks廉价冗余磁盘阵列,通过对块磁盘组成一种模式,来提高吞吐量和可靠性2.磁盘阵列功能整合闲置磁盘空间提高磁盘读取文件提高容错功能磁盘阵列的…

    2022年5月4日
    165
  • 浅析Java多态_JAVA多态

    浅析Java多态_JAVA多态Java多态今天来谈谈Java中的多态,作为面向对象的一大特性,它的重要性不必多说,相比其他两特性(继承、封装)从字面上看就有点不易读懂,多种态度还是有多变态?官解官方解释:多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。简单理解就是同一方法在不同类中有不同实现(继承关系上),在或者就是父类的引用指向子类对象;在这里我附上官方的图解:如图所示:一台打印机,都有着打印的功能,但是不同的打印机在不同的场景或者不同的需求上,可以打印出不同的

    2025年7月8日
    1
  • javaSwing的JTextField自动补全

    javaSwing的JTextField自动补全直接上代码:主代码:packagecom.test;importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.event.*;importorg.app.ticket.constants.StationConstant;i

    2022年7月24日
    11

发表回复

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

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