| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
话说这题有没有什么犀利的数据啊= = 和别人的AC代码拍了几百组都是对的,但就是不给过。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int INF = 99999999;
const int MAXN = 100005;
const double EPS = 1.0e-12;
int a[6];
bool flag,vis[10];
double f(double a,double b,int op)
{
switch(op)
{
case 1 :
return a + b;
break;
case 2 :
return a - b;
break;
case 3 :
return a * b;
break;
case 4 :
return a / b;
break;
default :
break;
}
}
void dfs(double res,int cnt,int op)
{
if (cnt == 7)
{
if (fabs(res-a[5]) <= EPS)flag = 1;
return ;
}
if (!flag)
{
if (cnt % 2)
{
for (int i = 1;i <= 4 && !flag;i++)
{
dfs(res,cnt+1,i);
}
}
else
{
for (int i = 1;i <= 4 && !flag;i++)if (vis[i] == 0)
{
if (op == 4 && a[i] == 0)continue;
double temp = f(res,(double)a[i],op);
vis[i] = 1;
dfs(temp,cnt+1,op);
vis[i] = 0;
}
for (int i = 1;i <= 4 && !flag;i++)if (vis[i] == 0)
{
if (op == 4 && fabs(res) <= EPS)continue;
double temp = f((double)a[i],res,op);
vis[i] = 1;
dfs(temp,cnt+1,op);
vis[i] = 0;
}
}
}
}
bool isok()
{
memset(vis,0,sizeof(vis));
flag = 0;
for (int i = 1;i <= 4 && !flag;i++)
{
vis[i] = 1;
dfs(a[i]*1.0,1,0);
vis[i] = 0;
}
return flag;
}
int main()
{
int cas = 1;
while (scanf("%d",&a[1]) && a[1] != -1)
{
for (int i = 2;i <= 5;i++)scanf("%d",&a[i]);
for (int i = 1;i <= 5;i++)printf("%d ",a[i]);
if (isok())printf("OK!\n");
else printf("NO!\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator