QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#249369 | #6395. Equation Discovering | real_sigma_team | WA | 76ms | 44708kb | C++20 | 2.6kb | 2023-11-12 04:37:22 | 2023-11-12 04:37:22 |
Judging History
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;
}
详细
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