제출 #1354300

#제출 시각아이디문제언어결과실행 시간메모리
1354300boss_zzNaan (JOI19_naan)C++20
100 / 100
194 ms94628 KiB
#include<bits/stdc++.h>
#pragma GCC optimize("Ofast,inline,unroll-loops") 
#define rep(a,b,c) for(ll a=b;a<=c;++a) 
#define per(a,b,c) for(ll a=b;a>=c;--a) 
#define ll long long 
#define ff first 
#define ss second 
#define mp make_pair 
using namespace std;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll N=2005,inf=1e18;
struct frac{
    ll x,y;
    frac(){}
    frac(ll x,ll y):x(x),y(y){}
    bool operator<(const frac &o){
        return (__int128)x*o.y<(__int128)o.x*y;
    }
}R[N][N];
ll n,L,V[N][N],P[N];
bitset<N> flag;
signed main(){
    ios::sync_with_stdio(0);cin.tie(0); 
    cin>>n>>L;
    rep(i,1,n) rep(j,1,L) cin>>V[i][j];
    rep(i,1,n){
        ll ptr=1,cur=0,tot=0;
        rep(j,1,L) tot+=V[i][j];
        rep(j,1,n-1){
            while(frac(cur+V[i][ptr],1)<frac(tot*j,n)) cur+=V[i][ptr],ptr++;
            R[i][j]=frac(tot*j-cur*n+(ptr-1)*n*V[i][ptr],n*V[i][ptr]);
        }
        R[i][n]=frac(L,1);
    }
    rep(i,1,n){
        ll mn=0;
        rep(j,1,n) if(!flag[j]) if(mn==0||R[j][i]<R[mn][i]) mn=j;
        flag[mn]=1;
        P[i]=mn;
    }
    rep(i,1,n-1) cout<<R[P[i]][i].x<<' '<<R[P[i]][i].y<<'\n';
    rep(i,1,n) cout<<P[i]<<' ';
    cout<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...