QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#177260 | #6395. Equation Discovering | mendicillin2 | TL | 37ms | 49564kb | C++17 | 3.6kb | 2023-09-12 19:24:05 | 2023-09-12 19:24:06 |
Judging History
answer
#pragma GCC optimize ("Ofast")
#include <bits/stdc++.h>
using namespace std;
template <class T> int sz(T&& a) { return int(size(forward<T>(a))); }
template <class T> using vc = vector<T>;
template <class T> using vvc = vc<vc<T>>;
using ll = int64_t;
using vi = vc<int>;
template <class F>
struct ycr {
F f;
template <class T>
explicit ycr(T&& f_) : f(forward<T>(f_)) {}
template <class... Args>
decltype(auto) operator()(Args&&... args) {
return f(ref(*this), forward<Args>(args)...);
}
};
template <class F>
decltype(auto) yc(F&& f) {
return ycr<decay_t<F>>(forward<F>(f));
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr);
cout << fixed << setprecision(20);
int N; cin >> N;
using D = double;
vector<D> xs(N), ys(N);
for (int i = 0; i < N; i++) {
cin >> xs[i] >> ys[i];
}
auto check = [&](string expr, vector<D> cur) -> void {
for (int i = 0; i < N; i++) {
if (abs(cur[i] - ys[i]) / max<D>(1, abs(ys[i])) > 1e-3) return;
}
cout << expr << '\n';
exit(0);
};
const int L = 10;
vector<vector<pair<string, vector<D>>>> vals(L);
vals[0].push_back({"x", xs});
vector<D> t(N);
for (int c = 1; c < L; c++) {
// sin/cos
for (const auto& [expr, s] : vals[c-1]) {
{
for (int i = 0; i < N; i++) {
t[i] = sin(s[i]);
}
auto new_expr = "sin(" + expr + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
{
for (int i = 0; i < N; i++) {
t[i] = cos(s[i]);
}
auto new_expr = "cos(" + expr + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (int c0 = 0; c0 <= c-1-c0; c0++) {
int c1 = c-1-c0;
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
for (int i = 0; i < N; i++) {
t[i] = s0[i] + s1[i];
}
auto new_expr = "(" + expr0 + ")+(" + expr1 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
for (int i = 0; i < N; i++) {
t[i] = s0[i] - s1[i];
}
auto new_expr = "(" + expr0 + ")-(" + expr1 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
for (int i = 0; i < N; i++) {
t[i] = s1[i] - s0[i];
}
auto new_expr = "(" + expr1 + ")-(" + expr0 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
for (int i = 0; i < N; i++) {
t[i] = s0[i] * s1[i];
}
auto new_expr = "(" + expr0 + ")*(" + expr1 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
bool works = true;
for (int i = 0; i < N; i++) {
if (abs(s1[i]) < 1e-2) {
works = false;
break;
}
t[i] = s0[i] / s1[i];
}
if (!works) continue;
auto new_expr = "(" + expr0 + ")/(" + expr1 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
for (const auto& [expr0, s0] : vals[c0]) {
for (const auto& [expr1, s1] : vals[c1]) {
bool works = true;
for (int i = 0; i < N; i++) {
if (abs(s0[i]) < 1e-2) {
works = false;
break;
}
t[i] = s1[i] / s0[i];
}
if (!works) continue;
auto new_expr = "(" + expr1 + ")/(" + expr0 + ")";
check(new_expr, t);
vals[c].push_back({new_expr, t});
}
}
}
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 4352kb
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: 1ms
memory: 4496kb
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: 0ms
memory: 4364kb
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: 0ms
memory: 4380kb
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: 7ms
memory: 19280kb
input:
5 78.611917 -0.992212 -29.857271 1.011993 -75.513655 1.006611 68.512394 1.145128 7.961096 0.881661
output:
(cos(x))+((sin(x))*(sin(x)))
result:
ok great!!
Test #6:
score: 0
Accepted
time: 1ms
memory: 4532kb
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: 0ms
memory: 4364kb
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: 37ms
memory: 49564kb
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: 0
Accepted
time: 2ms
memory: 5928kb
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:
(x)/((x)*((x)*((x)*(x))))
result:
ok great!!
Test #10:
score: 0
Accepted
time: 0ms
memory: 3924kb
input:
20 24.490647 23.891773 17.327799 16.329001 21.204241 21.912414 83.489542 84.461510 -55.546573 -54.703972 -7.608368 -8.578356 -3.286697 -3.142101 -66.606831 -66.014954 -44.896454 -45.688502 97.541741 97.389961 -59.986043 -59.694554 57.723989 58.646803 -99.857351 -99.233536 29.134673 28.376609 -98.668...
output:
(x)+(sin(x))
result:
ok great!!
Test #11:
score: 0
Accepted
time: 0ms
memory: 3996kb
input:
20 89.594917 88.596688 -45.187625 -44.253669 97.451471 97.513530 35.078537 35.576300 82.504351 81.771201 -49.755211 -50.243625 -23.019693 -23.876242 -45.247155 -44.293590 75.324114 75.398156 78.533049 78.526282 99.112156 100.100628 31.983437 31.445903 71.251578 70.407388 -44.178279 -43.983549 -25.28...
output:
(x)-(sin(x))
result:
ok great!!
Test #12:
score: 0
Accepted
time: 2ms
memory: 5856kb
input:
20 16.664144 7.850741 44.708237 22.196248 -10.852343 1.533223 -42.713221 -12.119419 -27.815914 -11.038511 31.908696 13.299065 -82.394044 40.761558 -37.317157 -12.907073 -35.369997 17.659068 93.569121 -45.722539 -30.589159 -15.242258 16.180069 6.553209 56.572831 1.366451 99.591187 -47.440823 12.73229...
output:
(x)*((sin(x))*(cos(x)))
result:
ok great!!
Test #13:
score: 0
Accepted
time: 0ms
memory: 3980kb
input:
20 -583.519562 0.000000 -169.653469 0.000000 372.798856 0.000000 180.084282 0.000000 139.388742 0.000000 -648.300263 0.000000 -859.523046 0.000000 -267.278551 0.000000 635.554372 0.000000 299.925737 0.000000 -628.299469 0.000000 169.393099 0.000000 556.144161 0.000000 -881.876627 0.000000 328.692044...
output:
(x)-(x)
result:
ok great!!
Test #14:
score: 0
Accepted
time: 0ms
memory: 3988kb
input:
20 746.491049 746.491049 414.031997 414.031997 -975.051138 -975.051138 45.313068 45.313068 -181.090458 -181.090458 119.607074 119.607074 245.794647 245.794647 -794.156219 -794.156219 461.647608 461.647608 -392.604379 -392.604379 384.522118 384.522118 -461.749513 -461.749513 766.462890 766.462890 244...
output:
(x)+((x)-(x))
result:
ok great!!
Test #15:
score: 0
Accepted
time: 1ms
memory: 4512kb
input:
20 4.278335 0.092599 3.559350 0.559919 -2.517239 0.403581 -0.955317 0.182475 3.048015 0.888213 -0.638367 0.393205 -2.188885 0.183959 -0.367275 0.597938 1.106453 0.948186 0.339096 0.971773 -0.678258 0.364003 4.364111 0.060002 -0.671364 0.369012 -2.777257 0.600136 1.617698 0.909755 -3.400784 0.950952 ...
output:
sin((sin(x))+((x)/(x)))
result:
ok great!!
Test #16:
score: -100
Time Limit Exceeded
input:
20 3.692126 -0.260752 0.663419 1.200876 1.167172 0.874743 4.852602 0.631308 3.373109 -0.334749 4.749943 0.529545 -2.549440 -0.245748 -1.158832 0.881804 4.115764 -0.040747 -3.401216 -0.330886 -4.320685 0.119451 -0.070540 1.332133 -4.666465 0.446117 -4.720184 0.499803 -1.731319 0.332854 4.232513 0.046...