Submission #257990

#TimeUsernameProblemLanguageResultExecution timeMemory
257990super_j6Naan (JOI19_naan)C++14
29 / 100
64 ms63224 KiB
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define endl '\n' #define ll long long #define pi pair<ll, ll> #define f first #define s second struct fr{ ll x, y; fr(ll X = 0, ll Y = 1){ x = X, y = Y; ll g = __gcd(x, y); x /= g, y /= g; } friend fr operator+(fr a, fr b){ return fr(a.x * b.y + b.x * a.y, a.y * b.y); } friend fr operator-(fr a, fr b){ return fr(a.x * b.y - b.x * a.y, a.y * b.y); } friend fr operator*(fr a, fr b){ return fr(a.x * b.x, a.y * b.y); } friend fr operator/(fr a, fr b){ return fr(a.x * b.y, a.y * b.x); } friend bool operator<(fr a, fr b){ return a.x * b.y < b.x * a.y; } }; const int mxn = 2001; int n, m; fr a[mxn][mxn]; bool vis[mxn]; int vi[mxn]; fr vf[mxn]; fr f(int x, fr y){ int z = y.x / y.y; return a[x][z] + (y - fr(z)) * (a[x][z + 1] - a[x][z]); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){ cin >> a[i][j].x; a[i][j] = a[i][j] + a[i][j - 1]; } for(int i = 1; i <= n; i++){ vf[i] = fr(m + 1); for(int j = 1; j <= n; j++){ if(vis[j]) continue; fr x = a[j][m] / fr(n) + f(j, vf[i - 1]); if(a[j][m] < x){ cout << -1 << endl; return 0; } int it = lower_bound(a[j], a[j] + m, x) - a[j] - 1; fr y = fr(it) + (x - a[j][it]) / (a[j][it + 1] - a[j][it]); while(y.x > 2000000000000 || y.y > 1000000000) y = fr(y.x + (y.x & 1), y.y - (y.y & 1)); if(y < vf[i]) vi[i] = j, vf[i] = y; } vis[vi[i]] = 1; if(i < n) cout << vf[i].x << " " << vf[i].y << endl; } cout << vi[1]; for(int i = 2; i <= n; i++) cout << " " << vi[i]; cout << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...