제출 #1072791

#제출 시각아이디문제언어결과실행 시간메모리
1072791phongNaan (JOI19_naan)C++17
29 / 100
330 ms17500 KiB
#include<bits/stdc++.h> #define ll long long #define int long long const int nmax = 2e3 + 5, N = 1e5; const ll oo = 1e18 + 1, base = 311; const int lg = 19, M = 10; const ll mod = 998244353, mod2 = 1e9 + 5277; #define pii pair<int, int> #define fi first #define se second #define endl "\n" #define debug(a, n) for(int i = 1; i <= n; ++i) cout << a[i] << ' '; cout << "\n"; using namespace std; int n, L; int a[nmax][nmax]; ll s[nmax][nmax]; struct node{ int x, y, id; }; ll sum[nmax]; bool vis[nmax]; bool check(pii t1, pii t2){ return t1.fi * t2.se <= t1.se * t2.fi; } ll calc(int l, int r, int i){ if(l > r) return 0; return s[i][r] - s[i][l - 1]; } pii get(pii t1, pii t2, int idx){ if(t1.fi == 0) return t2; if(t2.fi == 0) return t1; pii tx ={t1.fi * t2.se + (t1.se * t2.fi * idx), t1.se * t2.se}; int lc = __gcd(tx.fi, tx.se); return {tx.fi / lc, tx.se / lc}; } main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); // freopen("code.inp", "r", stdin); // freopen("code.out", "w", stdout); cin >> n >> L; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= L; ++j){ cin >> a[i][j]; sum[i] += a[i][j]; s[i][j] = s[i][j - 1] + a[i][j]; } } pii pos = {0, 0}; vector<int> tmp; int last = 0; for(int j = 1; j <= n; ++j){ pii ma = {-1, -1}; int idx = -1, dcm = -1; for(int i = 1; i <= n; ++i){ if(vis[i]) continue; int l =0, r = L, t1 = -1,t2 = -1; t1 = last; l = t1, r = L + 1; pii dx; while(l <= r){ int mid = r + l >> 1; pii tx = get({t1, 1}, pos, -1); tx = get(tx, {calc(t1 + 1, mid, i), 1}, 1); if(check(tx, {sum[i], n})){ l = mid + 1; t2 = mid; dx = tx; } else r = mid - 1; } // if(j == 2) cout << i << ' ' << t1 << ' ' << t2<< endl; // cout << sum[i] << ' ' << n << ' '; pii one = get({sum[i], n}, dx, -1); if(a[i][t2 + 1]) one.se *= a[i][t2 + 1]; pii two = get({t1, 1}, pos, -1); // if(j == 2) cout << two.fi << ' ' << two.se << endl; pii tx = get(one, two, 1); tx = get(tx, {t2 - t1, 1}, 1); tx = get(pos, tx, 1); // cout << i << ' ' << t1 << ' ' << t2 << endl; if(idx == -1 || check(tx, ma)){ ma = tx; idx = i; dcm = t2 + 1; } } if(j < n) cout << ma.fi << ' ' << ma.se << endl; tmp.push_back(idx); vis[idx]= 1; pos = ma; last = dcm; // cout << dcm << ' ' ; // exit(0); } for(auto p : tmp) cout << p << ' '; } /* */

컴파일 시 표준 에러 (stderr) 메시지

naan.cpp:38:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   38 | main(){
      | ^~~~
naan.cpp: In function 'int main()':
naan.cpp:64:29: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   64 |                 int mid = r + l >> 1;
      |                           ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...