QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#249369#6395. Equation Discoveringreal_sigma_teamWA 76ms44708kbC++202.6kb2023-11-12 04:37:222023-11-12 04:37:22

Judging History

你现在查看的是最新测评结果

  • [2023-11-12 04:37:22]
  • 评测
  • 测评结果:WA
  • 用时:76ms
  • 内存:44708kb
  • [2023-11-12 04:37:22]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()

using ll = long long;
using ld = long double;

string ops[] = {"+", "*", "/", "-"};
string un[] = {"sin", "cos"};
const int N = 10;
vector<string>s[N];
const ld inf = 1e18;
const ld eps = 1e-2;

bool equal(ld x, ld y){
	return fabs(x - y) < eps;
}

bool ok;

ld Cos(ld x){
	return cos(x);
}

ld Sin(ld x){
	return sin(x);
}

ld Div(ld x, ld y){
	if(equal(y, 0.0)){
		ok = false;
		return inf;
	}
	return x / y;
}

ld Plu(ld x, ld y){
	return x + y;
}

ld Min(ld x, ld y){
	return x - y;
}

ld Mul(ld x, ld y){
	return x * y;
}

function<ld(ld)> Un[] = {Sin, Cos};
function<ld(ld, ld)> Ops[] = {Plu, Mul, Div, Min};
vector<ld> rem[N];
vector<vector<int>>Go[N];
void gen(int diff){
	vector<vector<int>>go;
	int Mid = sz(Go[diff - 1]);
	for(int s_ = 0; s_ < Mid; s_++)
		for(int u = 0; u < 2; u++)
			go.push_back({diff - 1, s_, -1, u});
	if(diff >= 2){
		for(int l = 0; l <= diff - 2; l++){
			int r = diff - 2 - l;
			if(r > l)
				continue;
			int L = sz(Go[l]);
			int R = sz(Go[r]);
			for(int l_ = 0; l_ < L; l_++)
				for(int r_ = 0; r_ < R; r_++){
					for(int u = 0; u < 4; u++){
						go.push_back({l, l_, r_, u});
					}
					for(int u = 2; u < 4; u++){
						go.push_back({r, r_, l_, u});
					}
				}
		}
	}
	Go[diff] = go;
	return;
}

ld x[20], y[20];

ld getvl(int diff, int ind, ld curX){
	if(diff == 0)
		return curX;
	vector<int> g = Go[diff][ind]; 

	int l = g[0];
	if(l == diff - 1)
		return Un[g[3]](getvl(l, g[1], curX));
	int r = diff - 2 - l;
	return Ops[g[3]](getvl(l, g[1], curX), getvl(r, g[2], curX));
}

string genStr(int diff, int ind){
	if(diff == 0)
		return "x";
	vector<int> g = Go[diff][ind]; 
	int l = g[0];
	if(l == diff - 1)
		return un[g[3]] + "(" + genStr(l, g[1]) + ")";
	int r = diff - 2 - l;
	return "(" + genStr(l, g[1]) + ")" + ops[g[3]] + "(" + genStr(r, g[2]) + ")";
}


void solve(){
	int n;
	cin >> n;
	for(int i = 0 ; i < n; i++){
		cin >> x[i] >> y[i];
	}
	Go[0] = vector<vector<int>>(1, vector<int>());
	for(int i = 1; i < N; i++)
		gen(i);
	for(int Sz = 0; Sz < N; Sz++){
		for(int seq = 0; seq < Go[Sz].size(); seq++){
			bool eq = true;
			for(int i = 0; i < n; i++){
				ok = true;
				ld res = getvl(Sz, seq, x[i]);
				if(!ok || !equal(res, y[i])){
					eq = false;
					break;
				}
			}
			if(eq){
				cout << genStr(Sz, seq);
				return;
			}
		}
	}
}

int main() {
	cin.tie(nullptr) -> sync_with_stdio(false);
	solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 28ms
memory: 44444kb

input:

3
1.000000 1.000000
2.000000 4.000000
3.000000 9.000000

output:

(x)*(x)

result:

ok great!!

Test #2:

score: 0
Accepted
time: 19ms
memory: 44352kb

input:

3
0.618000 1.517072
0.314000 3.132637
1.414000 0.494016

output:

(sin(x))/((x)*(x))

result:

ok great!!

Test #3:

score: 0
Accepted
time: 28ms
memory: 43180kb

input:

5
77.685777 233.057331
-66.445083 -199.335249
79.966717 239.900151
84.982130 254.946390
-31.528900 -94.586700

output:

((x)+(x))+(x)

result:

ok great!!

Test #4:

score: 0
Accepted
time: 32ms
memory: 43240kb

input:

5
25.032427 -0.100652
38.727324 1.658518
27.684334 -0.669555
64.282391 8.275303
52.640700 -0.962660

output:

(sin(x))/(cos(x))

result:

ok great!!

Test #5:

score: 0
Accepted
time: 32ms
memory: 44708kb

input:

5
78.611917 -0.992212
-29.857271 1.011993
-75.513655 1.006611
68.512394 1.145128
7.961096 0.881661

output:

((sin(x))*(sin(x)))+(cos(x))

result:

ok great!!

Test #6:

score: 0
Accepted
time: 36ms
memory: 44460kb

input:

5
-78.733375 0.503570
-20.187183 0.735779
-38.984992 0.730890
47.859232 0.622831
-19.657164 0.641512

output:

sin(sin(cos(cos(x))))

result:

ok great!!

Test #7:

score: 0
Accepted
time: 16ms
memory: 44148kb

input:

5
3.241091 -32.628130
-83.514144 86.463432
33.586619 40.691607
41.123543 -147.352644
26.896326 27.404018

output:

(x)/(sin(x))

result:

ok great!!

Test #8:

score: 0
Accepted
time: 76ms
memory: 43396kb

input:

20
-4.908422 -0.693287
3.569189 0.328182
1.946572 -0.667466
6.515336 -0.829948
-1.394076 0.752980
6.722989 0.831881
1.241795 0.835231
-2.443177 -0.143098
-4.180762 -0.803482
1.511247 0.589509
0.627755 0.554244
-1.865604 -0.470029
-4.756347 -0.656984
1.850611 -0.426016
6.580133 -0.474416
6.861815 -0....

output:

sin(sin((x)/(sin((x)/((x)*(x))))))

result:

ok great!!

Test #9:

score: -100
Wrong Answer
time: 16ms
memory: 44216kb

input:

20
76.797930 0.000002
-76.263778 -0.000002
55.449039 0.000006
10.462093 0.000873
-78.051671 -0.000002
-52.781249 -0.000007
47.053973 0.000010
96.629212 0.000001
-40.697847 -0.000015
31.141805 0.000033
-87.087384 -0.000002
-54.709885 -0.000006
-65.741847 -0.000004
-87.430820 -0.000001
9.420126 0.0011...

output:

(sin((x)*(x)))/((x)*(x))

result:

wrong answer fail to discover