1. 首页
  2. 水题

HDU 5612 Baby Ming and Matrix games (暴力)

由于数字比较少,直接暴力就可以了,还有就是要注意精度问题,好气啊啊啊~!#~·~~

#include<iostream>
#include<cstdio>
#include<string>
#include<string.h>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<iomanip>
#include<map>
#include<vector>
#include<queue>
#include<stack>
//#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int N = 1050;
const double eps =1e-9;

int dir[][2]={1,0,-1,0,0,1,0,-1};
char mp[50][50];
bool vis[50][50];
bool flag;
LL sum;
int n,m;
char fh;

void jd(int x,int y,double tmp)
{
    if(fabs(tmp-sum)<=eps)
    {
        flag=1;
        return;
    }
    if(flag==1)
        return;

    for(int i=0;i<4;++i)
    {
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(vis[xx][yy]|| xx<0 ||xx>=n || yy<0 || yy>=m )
        {
            continue;
        }
        if(mp[xx][yy]!='#')
        {
            if(mp[xx][yy]=='+' || mp[xx][yy]=='-'|| mp[xx][yy]=='*'|| mp[xx][yy]=='/')
            {
                fh=mp[xx][yy];
                vis[xx][yy]=1;
                jd(xx,yy,tmp);
                vis[xx][yy]=0;
            }

            else if(mp[xx][yy]>='0' || mp[xx][yy]<='9')
            {
                int ss=mp[xx][yy]-'0';
                if(fh=='+')
                {
                    vis[xx][yy]=1;
                    jd(xx,yy,tmp+ss);
                    vis[xx][yy]=0;
                }
                else if(fh=='-')
                {
                    vis[xx][yy]=1;
                    jd(xx,yy,tmp-ss);
                    vis[xx][yy]=0;
                }
                else if(fh=='*')
                {
                    vis[xx][yy]=1;
                    jd(xx,yy,tmp*ss);
                    vis[xx][yy]=0;
                }
                else if(fh=='/')
                {
                    if(ss!=0)
                    {
                        vis[xx][yy]=1;
                        jd(xx,yy,tmp/ss);
                        vis[xx][yy]=0;
                    }

                }

            }
        }

    }
    return ;

}



int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        scanf("%d%d%I64d",&n,&m,&sum);
        for(int i=0;i<n;++i)
        {
            cin>>mp[i];
        }

        flag=0;
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<m;++j)
            {
                if(mp[i][j]<='9' && mp[i][j]>='0')
                {
                    memset(vis,0,sizeof(vis));
                    vis[i][j]=1;
                    jd(i,j,mp[i][j]-'0');
                    if(flag==1)
                        break;
                }

            }

        }
        if(flag)
        {
            cout<<"Possible"<<endl;
        }
        else
        {
            cout<<"Impossible"<<endl;
        }


    }


    return 0;
}

 

评分 0, 满分 5 星
0
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.carlstedt.cn/archives/81 (转载时请注明本文出处及文章链接)
上一篇:
:下一篇

发表评论

gravatar

快来吐槽一下吧!

  1. .01 4:06
  2. .02 1:47
  3. .03 3:39
  4. .04 1:40