题意太不清了,判重什么鬼(震声)
初看以为水绿,然而从8:30pm到11:00pm全在调这个若只题(作业都没写)。。。
所以这题两个表达式不同的定义是?
丑陋的代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<set>
#define ll long long
using namespace std;
const double eps=1e-10;
ll a[6],m[20];
set<ll>ans;
double f(double x,int op,double y){
if(op==1)return x+y;
if(op==2)return x-y;
if(op==3)return x*y;
if(op==4&&y)return x/y;
return -114.514;
}
bool g(double x){return fabs(x-24.0)<=eps;}
ll h(ll i,ll j,ll k,ll l,ll o,ll p,ll q){return i*m[18]+j*m[15]+k*m[12]+l*m[9]+o*m[6]+p*m[3]+q;}
int main(){
m[0]=1;
for(int i=1;i<=18;i++)m[i]=m[i-1]*10ll;
cin>>a[1]>>a[2]>>a[3]>>a[4];
sort(a+1,a+5);
do{
for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)for(int k=1;k<=4;k++){
if(g(f(f(f(a[1],i,a[2]),j,a[3]),k,a[4])))ans.insert(h(a[1],a[2],a[3],a[4],i,j,k));// ((AB)C)D
if(g(f(f(a[1],i,a[2]),j,f(a[3],k,a[4]))))ans.insert(h(a[1],a[2],a[3],a[4],i,j,k));// (AB)(CD)
if(g(f(f(a[1],i,f(a[2],j,a[3])),k,a[4])))ans.insert(h(a[1],a[2],a[3],a[4],i,j,k));// (A(BC))D
if(g(f(a[1],i,f(f(a[2],j,a[3]),k,a[4]))))ans.insert(h(a[1],a[2],a[3],a[4],i,j,k));// A((BC)D)
if(g(f(a[1],i,f(a[2],j,f(a[3],k,a[4])))))ans.insert(h(a[1],a[2],a[3],a[4],i,j,k));// A(B(CD))
}
}while(next_permutation(a+1,a+5));
cout<<ans.size();
return 0;
}