zoukankan      html  css  js  c++  java
  • HDU 5612 Baby Ming and Matrix games

    暴力搜索,据说精度卡的紧。。。但我是double过了的。

    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<cmath>
    #include<queue>
    #include<list>
    #include<algorithm>
    using namespace std;
    
    const double eps=1e-8;
    int dir[4][2],t[4][2];
    double a[100][100];
    bool flag[100][100];
    char s[100][100];
    int n,m;
    double sum;
    bool ans;
    double path[1000];
    
    void init()
    {
        dir[0][0]=2; dir[0][1]=0;
        dir[1][0]=-2; dir[1][1]=0;
        dir[2][0]=0; dir[2][1]=2;
        dir[3][0]=0; dir[3][1]=-2;
    
        t[0][0]=1; t[0][1]=0;
        t[1][0]=-1; t[1][1]=0;
        t[2][0]=0; t[2][1]=1;
        t[3][0]=0; t[3][1]=-1;
    
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                a[i][j]=-1.0;
    
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
                if(s[i][j]>='0'&&s[i][j]<='9')
                    a[i][j]=1.0*(s[i][j]-'0');
    
        memset(flag,0,sizeof flag);
    }
    
    void dfs(double nowNum,int nowx,int nowy,int tot)
    {
        if(fabs(nowNum-sum)<eps)
        {
            ans=1;
            return;
        }
    
            for(int i=0; i<4; i++)
            {
                double newNum;
                int newX,newY;
                newX=nowx+dir[i][0];
                newY=nowy+dir[i][1];
                if(newX>=0&&newX<n)
                {
                    if(newY>=0&&newY<m)
                    {
                        if(flag[newX][newY]==0)
                        {
                            flag[newX][newY]=1;
                            if(s[nowx+t[i][0]][nowy+t[i][1]]=='+')
                            {
                                newNum=nowNum+a[newX][newY];
                                
                                dfs(newNum,newX,newY,tot+1);
                                if(ans) return;
    
                            }
                            else if(s[nowx+t[i][0]][nowy+t[i][1]]=='-')
                            {
                                newNum=nowNum-a[newX][newY];
                                
                                dfs(newNum,newX,newY,tot+1);
                                if(ans) return;
    
                            }
                            else if(s[nowx+t[i][0]][nowy+t[i][1]]=='*')
                            {
                                newNum=nowNum*a[newX][newY];
                                
                                dfs(newNum,newX,newY,tot+1);
                                if(ans) return;
    
                            }
                            else if(s[nowx+t[i][0]][nowy+t[i][1]]=='/')
                            {
                                if(fabs(a[newX][newY]-0.0)<eps) {
                                        flag[newX][newY]=0;continue;
                                }
                                newNum=nowNum/a[newX][newY];
                                
                                dfs(newNum,newX,newY,tot+1);
                                if(ans) return;
    
                            }
                            flag[newX][newY]=0;
                        }
                    }
                }
            }
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d%lf",&n,&m,&sum);
    
            for(int i=0; i<n; i++) scanf("%s",s[i]);
            init();
            
            ans=0;
            for(int i=0; i<n; i++)
                for(int j=0; j<m; j++)
                    if(a[i][j]>=0)
                    {
                        memset(flag,0,sizeof flag);
                        flag[i][j]=1;
                        dfs(a[i][j],i,j,1);
                        if(ans) break;
                    }
    
            if(ans) printf("Possible
    ");
            else printf("Impossible
    ");
        }
        return 0;
    }
  • 相关阅读:
    8.17 纯css画一个着重号图标
    8.16 val()和html()的问题
    8.14 git??sourceTree??
    7.27-8.10 Problems
    To be a better me
    【LeetCode刷题】Set and bitset
    【LeetCode刷题】求平方根
    【LeetCode刷题】爬楼梯问题
    大学四年就这样,么了~
    硬件综合实习——51单片机四则运算带括号计算器
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5157992.html
Copyright © 2011-2022 走看看