zoukankan      html  css  js  c++  java
  • ZOJ 3829 模拟贪心

    2014牡丹江现场赛水题


    给出波兰式,推断其是否合法。假设不合法有两种操作:

    1:任何位置加一个数字或者操作符

    2:随意两个位置的元素对调


    贪心模拟就可以

    先推断数字数是否大于操作符数,若不大于 ans+=sum2-sum1+1;新增加的数字所有放到左端。

    然后从左到右遍历一遍。存储到当前位置为止,数字数和sum1。和操作数和sum2

    若sum2>=1sum1。优先与队尾的数字对调,若没有则sum1++,表示在最左端加一个数字


    #include "stdio.h"
    #include "string.h"
    int main()
    {
        int n,sum1,sum2,i,len,ans,j,ok;
        char str[1010];
        scanf("%d",&n);
        while (n--)
        {
            scanf("%s",str);
            sum1=sum2=0;
            len=strlen(str);
            for (i=0;str[i];i++)
                if (str[i]=='*') sum2++;
                else sum1++;
    
            if (sum2==0)
            {
                printf("0
    ");
                continue;
            }
            if (sum1==0)
            {
                printf("%d
    ",sum2+1);
                continue;
            }
    
            ans=0;
            if (sum1<=sum2)
            {
                ans+=sum2-sum1+1;
                sum2=0;
                sum1=ans;
            }
            else sum1=sum2=0;
    
            for (i=0;str[i];i++)
            {
                if (str[i]<='9' && str[i]>='1') {sum1++; continue;}
                if (str[i]=='*') sum2++;
    
                if (sum1>sum2) continue;
                else
                {
                    ok=0;
                    for (j=len-1;j>i;j--)
                        if(str[j]<='9' && str[j]>='1')
                        {
                            ans++;
                            sum1++;
                            sum2--;
                            str[j]='*';
                            ok=1;
                            break;
                        }
                    if (ok==0)
                    {
                        if (i==0)
                        {
                            ans+=2;
                            sum1+=2;
                        }
                        else
                        {
                            ans++;
                            sum1++;
                        }
                    }
                }
            }
            if (str[len-1]!='*') ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    2017第5周五随想录~改变活法
    2017第5周四
    《高绩效教练》笔记
    2017第5周二杭州印象
    2017第5周一
    代码自动生成工具_java版
    20个代码生成框架
    通过数据库表自动生成POJO(JavaBean)对象
    java工具类–自动将数据库表生成javabean
    Nginx+Tomcat+Memcached负载均衡集群服务搭建
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6943672.html
Copyright © 2011-2022 走看看