QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#815805 | #9804. Guess the Polygon | ucup-team1769# | Compile Error | / | / | C++14 | 3.2kb | 2024-12-15 17:18:19 | 2024-12-15 17:18:25 |
Judging History
This is the latest submission verdict.
- [2024-12-15 17:18:25]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-12-15 17:18:19]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
#define max_len 1200
struct frac_num
{
int fz, fm;
frac_num() = default;
frac_num(int zz, int mm)
{
int g = gcd(zz, mm);
fz = zz / g, fm = mm / g;
}
frac_num(int zz)
{
fz = zz, fm = 1;
}
frac_num operator+(const frac_num&r) const
{
return frac_num(fz * r.fm + fm * r.fz, fm * r.fm);
}
frac_num operator+(const int&r) const
{
return frac_num(fz + fm * r, fm);
}
frac_num operator*(const frac_num&r) const
{
return frac_num(fz * r.fz, fm * r.fm);
}
frac_num operator*(const int r) const
{
return frac_num(fz * r, fm);
}
bool operator==(const int r) const
{
return fm == 1 && fz == r;
}
bool operator<(const int r) const
{
return 1.0 * fz / fm < r;
}
bool operator<(const frac_num&r) const
{
return fz * r.fm < fm * r.fz;
}
};
frac_num print_ques(int fz, int fm)
{
cout << "? " << fz << " " << fm << endl;
int zz, mm;
cin >> zz >> mm;
return frac_num(zz, mm);
}
void print_ans(frac_num fn)
{
cout << "! " << fn.fz << " " << fn.fm << endl;
}
int N;
map<int, set<int>> poi_map;
void input()
{
poi_map.clear();
cin >> N;
for (int i = 0; i < N; i++)
{
int x, y;
cin >> x >> y;
poi_map[x].insert(y);
}
}
int vec_ji_cha(vector<int> vec)
{
return vec.back() - vec.front();
}
void sol()
{
input();
// x, [y]
vector<pair<int, vector<int>>> poi_vec;
for(auto [pir_x, pirs] : poi_map)
{
poi_vec.push_back({pir_x, vector<int>()});
for(auto yy : pirs)
{
poi_vec.back().second.push_back(yy);
}
}
int poi_su = poi_vec.size();
frac_num ans_m2 = 0;
frac_num last_bian_len = frac_num(0, 1);
int last_x = poi_vec[0].first;
if(poi_vec[0].second.size() != 1)
{
last_bian_len = vec_ji_cha(poi_vec[0].second);
}
for (int i = 1; i < poi_su - 1; i++)
{
auto [now_x, y_vec] = poi_vec[i];
auto y_diff_th = print_ques(now_x, 1);
if(y_diff_th == vec_ji_cha(y_vec))
{
ans_m2 = ans_m2 + (y_diff_th + last_bian_len) * (now_x - last_x);
last_x = now_x;
last_bian_len = y_diff_th.fz;
}
else if(y_diff_th < vec_ji_cha(y_vec))
{
ans_m2 = ans_m2 + (last_bian_len + vec_ji_cha(y_vec)) * (now_x - last_x);
last_x = now_x;
last_bian_len = y_diff_th;
}
else // vec_ji_cha(y_vec) < y_diff_th
{
ans_m2 = ans_m2 + (y_diff_th + last_bian_len) * (now_x - last_x);
last_x = now_x;
last_bian_len = y_diff_th + (-vec_ji_cha(y_vec));
}
}
{
auto [now_x, y_vec] = poi_vec.back();
{
ans_m2 = ans_m2 + (last_bian_len + vec_ji_cha(y_vec)) * (now_x - last_x);
}
}
ans_m2.fm *= 2;
print_ans(ans_m2);
}
int main()
{
int T;
cin >> T;
while (T--)
{
sol();
}
}
Details
answer.code: In constructor ‘frac_num::frac_num(int, int)’: answer.code:12:17: error: ‘gcd’ was not declared in this scope 12 | int g = gcd(zz, mm); | ^~~ answer.code: In function ‘void sol()’: answer.code:87:14: warning: structured bindings only available with ‘-std=c++17’ or ‘-std=gnu++17’ [-Wc++17-extensions] 87 | for(auto [pir_x, pirs] : poi_map) | ^ answer.code:106:14: warning: structured bindings only available with ‘-std=c++17’ or ‘-std=gnu++17’ [-Wc++17-extensions] 106 | auto [now_x, y_vec] = poi_vec[i]; | ^ answer.code:128:14: warning: structured bindings only available with ‘-std=c++17’ or ‘-std=gnu++17’ [-Wc++17-extensions] 128 | auto [now_x, y_vec] = poi_vec.back(); | ^