【玄关】60pts代码求调
查看原帖
【玄关】60pts代码求调
556072
wang1h楼主2024/9/8 23:09

题意太不清了,判重什么鬼(震声)

初看以为水绿,然而从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;
}
2024/9/8 23:09
加载中...