Submission #992017

#TimeUsernameProblemLanguageResultExecution timeMemory
992017browntoadNaan (JOI19_naan)C++14
29 / 100
1 ms604 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int ll #define FOR(i,a,b) for (int i = (a); i<(b); i++) #define REP(i,n) FOR(i,0,n) #define REP1(i,n) FOR(i,1,n+1) #define RREP(i,n) for (int i=(n)-1; i>=0; i--) #define RREP1(i,n) for (int i=(n); i>=1; i--) #define f first #define s second #define pb push_back #define ALL(x) x.begin(),x.end() #define SZ(x) (int)(x.size()) #define SQ(x) (x)*(x) #define pii pair<int, int> #define pip pair<int, pii> #define ppi pair<pii, int> #define pdd pair<double ,double> #define pcc pair<char, char> #define endl '\n' //#define TOAD #ifdef TOAD #define bug(x) cerr<<__LINE__<<": "<<#x<<" is "<<x<<endl #define IOS() #else #define bug(...) #define IOS() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) #endif const double PI=acos(-1); const ll maxn = 4e5+5; const ll maxm = 3e3+5; const ll inf = 1ll<<60; const ll mod = 998244353; ll pw(ll a, ll p){ ll ret = 1; while(p > 0){ if (p&1){ ret *= a; ret %= mod; } a *= a; a %= mod; p >>= 1; } return ret; } ll inv(ll a){ return pw(a, mod-2); } int n, L; struct frac{ int num, dem; }; frac operator +(frac &a, frac &b){ return {a.num*b.dem + a.dem*b.num, a.dem*b.dem}; } frac operator -(frac &a, frac &b){ return {a.num*b.dem - a.dem*b.num, a.dem*b.dem}; } frac operator *(frac &a, frac &b){ return {a.num*b.num, a.dem*b.dem}; } bool operator <(frac &a, frac &b){ assert(a.num <= 1e18 && b.num <= 1e18 && a.dem <= 1e18 && b.dem <= 1e18); return (__int128)a.num*b.dem < (__int128)a.dem*b.num; } signed main(){ IOS(); cin>>n>>L; vector<vector<frac>> vc(n); vector<vector<int>> in(n); vector<vector<frac>> pls(n); REP(i, n){ vc[i].resize(L); in[i].resize(L); pls[i].resize(n); int tot = 0; REP(j, L) { cin>>vc[i][j].num; in[i][j] = vc[i][j].num; tot += vc[i][j].num; vc[i][j].dem = 1; } int tt = 0; REP(j, n){ frac gl = {tot, n}; while(vc[i][tt] < gl){ gl = (gl-vc[i][tt]); vc[i][tt] = {0, 1}; tt++; } //cout<<gl.num<<"///"<<gl.dem<<endl; //cout<<vc[i][tt].num<<"///"<<vc[i][tt].dem<<' '<<tt<<endl; frac tmp = {tt+1, 1}; vc[i][tt] = (vc[i][tt] - gl); frac tmp2 = {vc[i][tt].num, vc[i][tt].dem*in[i][tt]}; pls[i][j] = (tmp - tmp2); //cout<<pls[i][j].num<<'/'<<pls[i][j].dem<<' '; if (vc[i][tt].num == 0){ // 0 //cout<<tt<<endl; tt++; } } } vector<int> perm; vector<bool> occ(n); REP(i, n){ pair<frac, int> mn = {{L+1, 1}, -1}; REP(j, n){ if (!occ[j] && pls[j][i] < mn.f) { mn.f = pls[j][i]; mn.s = j; } } if (i != n-1) cout<<mn.f.num<<' '<<mn.f.dem<<endl; perm.pb(mn.s+1); occ[mn.s] = 1; } REP(i, n) cout<<perm[i]<<' '; cout<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...