zoukankan      html  css  js  c++  java
  • UVA10700:Camel trading(栈和队列)

    题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/J

    题目大意:

    给一个没有加上括号的表达式且只有+ ,*两种操作符,然后要求随便怎样添加括号,求出这个表达式的最大值和最小值.

    题目解析:

    要求最大值,就让+的优先级大于*,要求最小值,就让*的优先级大于+。

    我做的有点麻烦,有点模拟的意思,反正是水题。注意这题需要用long long,别的就没有什么需要注意了。

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    #include <queue>
    #define eps 1e-9
    typedef long long ll;
    using namespace std;
    char a[110000];
    ll l,t,Z,sum,su2,M;
    bool f;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            queue<ll>q;
            queue<ll>q2;
            while(!q.empty()) q.pop();
            while(!q2.empty()) q2.pop();
            scanf("%s",a);
            l=strlen(a);
            a[l]='T';
            a[++l]='';
            sum=1;
            su2=0;
            t=0;
            f=false;
            Z=0;
            M=1;
            for(ll i=0; i<l; i++)
            {
                if(a[i]>='0'&&a[i]<='9')
                {
                    if(f)
                        t=t*10+(a[i]-'0');
                    else
                    {
                        t+=a[i]-'0';
                        f=true;
                    }
                }
                else if(a[i]=='*')
                {
                    q.push(Z+t);
                    M*=t;
                    Z=0;
                    f=false;
                    t=0;
                }
                else if(a[i]=='+')
                {
                    Z+=t;
                    q2.push(M*t);
                    M=1;
                    f=false;
                    t=0;
                }
                else
                {
                    q.push(Z+t);
                    q2.push(M*t);
                    break;
                }
            }
            while(!q.empty())
            {
                ll tem=q.front();
                q.pop();
                sum*=tem;
            }
            while(!q2.empty())
            {
                ll S=q2.front();
                q2.pop();
                su2+=S;
            }
            printf("The maximum and minimum are %lld and %lld.
    ",sum,su2);
        }
        return 0;
    }
  • 相关阅读:
    java解析xml实例——获取天气信息
    Wordpress可以用来做什么?
    Unity3D 快捷键
    Unity3D 快捷键
    OAuth和OpenID的区别
    OAuth和OpenID的区别
    PHP中require和include的区别
    PHP中require和include的区别
    iOS检测QQ是否安装
    iOS检测QQ是否安装
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/4270297.html
Copyright © 2011-2022 走看看