ZSC oj 1538(DFS||暴力)
2015-11-22 15:28
459 查看
1538: 【2014GFL】C
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 54 Solved: 14
[Submit][Status][Web
Board]
Description
这是一道简单的小学生算术题,问题是这样的:给你四个整型数A,B,C,D,问其中的某一个数字能 否通过其他三个数的加减乘除运算得到。每个数只能用一次。如果可以,则输出Yes,否则输出 No。比如四个数为1,2,3,6.而1 + 2 + 3 = 6。所以输出Yes。如果四个数为2,2,3,9,则任意的三个数的运算,都不可能让等式成立。所以输出No。 提示:在计算机的整型数相除中,5 / 2 = 2,而我们 问题中的算术,5 / 2 = 2.5。能帮你的只有这么多了。
Input
第一行输入一个整数t,表示有t组测试数据。 每组数据,输入四个整数,A,B,C,D。其中0 <= A,B,C,D <= 1000.
Output
对于每组测试数据,按题意输出Yes或者No。
Sample Input
21 2 3 6
2 2 3 9
Sample Output
YesNo
HINT
Source
题解:先用递归求出全排列,然后递归枚举所有情况,注意判断一下除以0的情况。#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 50
double a
;
int vis
;
double pai
;
int q;
int judge;
#define eps 1e-4
void dfs_pai(int step,int pos)
{
if(step>4)
{
q++;
return ;
}
for(int i=1;i<=4;i++)
{
if(vis[i])continue;
pai[q][pos]=a[i];
vis[i]=1;
dfs_pai(step+1,pos+1);
vis[i]=0;
}
}
void dfs(int posi,int step,double answer)
{
if(judge)
return ;
if(step>3)
{
if(answer==pai[posi][4])
{
judge=1;
}
return;
}
for(int i=1;i<=4;i++)
{
if(i==1)dfs(posi,step+1,answer+pai[posi][step]);
if(i==2)dfs(posi,step+1,answer-pai[posi][step]);
if(i==3)dfs(posi,step+1,answer*pai[posi][step]);
if(i==4&&(pai[posi][step]!=0))dfs(posi,step+1,answer/pai[posi][step]);
}
}
int main()
{
#ifdef CDZSC
freopen("i.txt","r",stdin);
#endif
int t;
scanf("%d",&t);
while(t--)
{
judge=0;
q=0;
memset(pai,-1,sizeof(pai));
memset(vis,0,sizeof(vis));
for(int i=1;i<=4;i++)
scanf("%lf",&a[i]);
dfs_pai(1,1);
for(int i=1;i<=4;i++)
{
int tt;
for(int j=0;j<q;j++)
{
if(pai[j][i]>=0)tt=pai[j][i];
else
pai[j][i]=tt;
}
}
memset(vis,0,sizeof(vis));
for(int i=0;i<q;i++)
{
dfs(i,2,pai[i][1]);
if(judge)
{
break;
}
}
puts(judge?"Yes":"No");
}
return 0;
}
相关文章推荐
- OC基础-内存管理
- NSURLSession/AFN框架知识点
- S折交叉验证 in Python
- gradle安装
- java 获取网页指定内容
- 网络配置百度地图
- inline-block默认间距的处理方法
- 欢迎使用CSDN-markdown编辑器
- eclipse配置scala 2.11插件
- c++虚函数逆向分析
- XML解析
- MVC中定时发布二维码邮件
- ASI和AFN的区别(面试题)
- sql server中高并发情况下 同时执行select和update语句死锁问题 (二)
- nginx+ffmpeg搭建流媒体服务器
- AFN框架须知笔记
- adb启动失败问题解决方法
- Upgrading Directly from MySQL 5.0 to 5.7 using an ‘In Place’ Upgrade
- nexus私服搭建
- linux支持并发的服务器回射程序实例