记录编号 |
84208 |
评测结果 |
AAAAAAAAAA |
题目名称 |
算24点 |
最终得分 |
100 |
用户昵称 |
Dijkstra |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2013-12-10 18:17:11 |
内存使用 |
0.28 MiB |
显示代码纯文本
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("point24.in");
ofstream fout("point24.out");
int n[4]={0},ch[4]={0},S[4]={0},path[4]={0};
bool F[4]={0},flag=1;
void INPUT(){int i;for(i=0;i<4;i++)fin>>n[i];}
void OUTPUT()
{
int i;
for(i=0;i<3;i++)
{
if(ch[i+1]==5)
{
fout<<n[path[i+1]]<<"/"<<S[i]<<"="<<S[i+1]<<endl;
continue;
}
if(ch[i+1]==6)
{
fout<<n[path[i+1]]<<"-"<<S[i]<<"="<<S[i+1]<<endl;
continue;
}
if(ch[i+1]==1||ch[i+1]==3) fout<<max(S[i],n[path[i+1]]);
else fout<<S[i];
if(ch[i+1]==1) fout<<"+";
if(ch[i+1]==2) fout<<"-";
if(ch[i+1]==3) fout<<"*";
if(ch[i+1]==4) fout<<"/";
if(ch[i+1]==1||ch[i+1]==3) fout<<min(S[i],n[path[i+1]]);
else fout<<n[path[i+1]];
fout<<"="<<S[i+1]<<endl;
}
}
void PLUS(int pos,int i)
{
void SEARCH(int pos);
S[pos]=S[pos-1]+n[i];F[i]=1;path[pos]=i;ch[pos]=1;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
void MIN(int pos,int i)
{
void SEARCH(int pos);
if(S[pos-1]-n[i]>0)
{
S[pos]=S[pos-1]-n[i];F[i]=1;path[pos]=i;ch[pos]=2;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
}
void MINED(int pos,int i)
{
void SEARCH(int pos);
if(S[pos-1]-n[i]<0)
{
S[pos]=n[i]-S[pos-1];F[i]=1;path[pos]=i;ch[pos]=6;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
}
void TIME(int pos,int i)
{
void SEARCH(int pos);
S[pos]=S[pos-1]*n[i];F[i]=1;path[pos]=i;ch[pos]=3;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
void DIV(int pos,int i)
{
void SEARCH(int pos);
if(S[pos-1]%n[i]==0)
{
S[pos]=S[pos-1]/n[i];F[i]=1;path[pos]=i;ch[pos]=4;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
}
void DIVED(int pos,int i)
{
void SEARCH(int pos);
if(n[i]%S[pos-1]==0)
{
S[pos]=n[i]/S[pos-1];F[i]=1;path[pos]=i;ch[pos]=5;
SEARCH(pos+1);
S[pos]=0;F[i]=0;path[pos]=0;ch[pos]=0;
}
}
void SEARCH(int pos)
{
if(pos==4)
{
if(flag&&S[pos-1]==24)
{
OUTPUT();
flag=0;
}
return;
}
int i;
for(i=0;i<4;i++)
{
if(!F[i])
{
PLUS(pos,i);
MIN(pos,i);
MINED(pos,i);
TIME(pos,i);
DIV(pos,i);
DIVED(pos,i);
}
}
}
int main()
{
int i;
INPUT();
for(i=0;i<4;i++)
{
F[i]=1;path[0]=i;S[0]=n[i];
SEARCH(1);
F[i]=0;path[0]=0;S[0]=0;
}
if(flag) fout<<"No answer!"<<endl;
return 0;
}