• 枚举+计算器模拟——hdu 4192


    http://acm.hdu.edu.cn/showproblem.php?pid=4192

    这道题A的好辛苦啊!!!

    易错点:开始时 a,b当做个位数在考虑

    2 42 93 11
    (a-b)

    就会错,哎思维不严密啊!!!

    View Code
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<map>
    using namespace std;

    #define MAX 3005
    #define CLR(arr) memset(arr,0,sizeof(arr))

    char str[MAX];

    double creat(int b,int e)
    {
    if(b > e) return 0;
    int p = -1,cnt = 0,flag = 0;
    for(int i = b;i <= e;++i)
    {
    if(str[i] == '(') cnt++;
    else if(str[i] == ')') cnt--;
    else if((str[i] == '+' || str[i] == '-') && !cnt){flag = 1; p = i;}
    else if((str[i] == '*' || str[i] == '/') && !cnt && !flag) p = i;
    }
    if(p == -1)
    {
    if(str[b] <= '9' && str[b] >= '0')
    {
    int res = 0; int n = 0;
    sscanf(&str[b],"%d%n",&res,&n);
    return res;
    }
    return creat(b+1,e-1);
    }
    else
    {
    switch(str[p])
    {
    case '+':return creat(b,p - 1) + creat(p + 1,e);
    case '-':return creat(b,p - 1) - creat(p + 1,e);
    case '*':return creat(b,p - 1) * creat(p + 1,e);
    case '/':return creat(b,p - 1)*1.0 / creat(p + 1,e);
    default: break;
    }
    }
    }

    double EXP(char st[])
    {
    strcpy(str,st);
    return creat(0,strlen(str)-1);
    }

    char ss[2223];
    char temp[2223];
    void init()
    {
    //strcpy(temp,ss);
    int i;
    int add=0;
    for(i=0;ss[i];i++)
    {
    if(ss[i]!=' ')
    {
    temp[add]=ss[i];add++;
    }
    }
    temp[add]=0;
    }

    int cmp(int a,int b)
    {
    return a<b;
    }

    int a[99];
    int main()
    {
    int n,m;
    double point;
    while(scanf("%d",&n)!=EOF)
    {
    //init();
    int i,j;
    for(i=1;i<=n;i++){
    scanf("%d",&a[i]);
    }
    scanf("%lf",&point);
    if(n==0&&point==0)return 0;

    sort(&a[1],&a[n+1],cmp);
    scanf("%s",ss);

    int ok=0;
    do{
    int add=1;
    int j=0;
    for(i=0;ss[i];i++)
    {
    if(ss[i]>='a'&&ss[i]<='z'){
    if(a[add]>=10)
    {
    temp[j]=a[add]/10+'0';j++;
    temp[j]=a[add]%10+'0';j++;
    }else
    {
    temp[j]=a[add]+'0';j++;
    }
    add++;
    }
    else
    {
    temp[j]=ss[i];j++;
    }
    }
    temp[j]=0;

    //printf("%.2lf\n",EXP(temp));
    if(point==EXP(temp)){
    ok=1;break;
    }
    }while(next_permutation(&a[1],&a[n+1]));

    if(ok==0)
    printf("NO\n");
    else
    printf("YES\n");
    //printf("%.2lf\n",EXP(temp));
    }

    return 0;
    }



  • 相关阅读:
    JQuery学习之(一)概述
    Ajax:拥抱JSON,让XML走开(转)
    .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)
    Nunit使用手记
    ajax常见问题总结
    单例模式代码
    asp.net网站url伪静态重写技术的实现
    WCF 基础加开发简介
    ExtJS调用WCF实现JSON传递
    lock 语句(C# 参考)
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2435233.html
Copyright © 2020-2023  润新知