제출 #524367

#제출 시각아이디문제언어결과실행 시간메모리
524367fatemetmhrNaan (JOI19_naan)C++17
29 / 100
48 ms8892 KiB
// ~Be name khoda~ // #include<bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second #define cl clear #define endll '\n' const int maxn = 1e6 + 10; const int maxn5 = 2e3 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const int mod = 1e9 + 7; const ll inf = 2e18; int n, l, per[maxn5]; ll a[maxn5][maxn5], ps[maxn5][maxn5]; long double need[maxn5]; long double out[maxn5]; bool mark[maxn5]; inline ll get_val(int l, int r, int i){ if(l >= r) return 0; return ps[i][r] - ps[i][l]; } inline long double get(int i, long double last){ long double ret = 0; long double ask = need[i]; int id = ceil(last); if(id > last){ long double rem = id - last; long double sup = ask / a[i][id]; if(sup >= rem){ last = id; ask -= rem * a[i][id]; } else{ return last + sup; } } //cout << i << ' ' << last << ' ' << id << ' ' << ask << endl; int lo = id, hi = l + 1; while(hi - lo > 1){ int mid = (lo + hi) >> 1; if(get_val(id, mid, i) <= ask) lo = mid; else hi = mid; } //cout << lo << ' ' << ask << endl; last = lo; ask -= get_val(id, lo, i); long double sup = ask / a[i][lo + 1]; //cout << last << ' ' << sup << ' ' << ask << endl; return last + sup; } int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin >> n >> l; for(int i = 0; i < n; i++) for(int j = 1; j <= l; j++){ cin >> a[i][j]; need[i] += a[i][j]; ps[i][j] = a[i][j] + (j > 0 ? ps[i][j - 1] : 0); } for(int i = 0; i < n; i++){ //cout << "* " << i << ' ' << need[i] << endl; need[i] /= n; //cout << need[i] << endl; } long double last = 0; for(int i = 0; i < n - 1; i++){ int v = 0; long double have = l + 5; for(int j = 0; j < n; j++) if(!mark[j]){ long double cur = get(j, last); //cout << i << ' ' << j << ' ' << cur << ' ' << last << endl; if(cur <= have){ v = j; have = cur; } } per[i] = v; last = have; out[i] = last; mark[v] = true; } for(int i = 0; i < n; i++) if(!mark[i]) per[n - 1] = i; for(int i = 0; i < n - 1; i++){ ll ans = out[i] * 1e9; cout << ans << ' ' << int(1e9) << '\n'; } for(int i = 0; i < n; i++) cout << per[i] + 1 << ' '; cout << endl; }

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

naan.cpp: In function 'long double get(int, long double)':
naan.cpp:37:14: warning: unused variable 'ret' [-Wunused-variable]
   37 |  long double ret = 0;
      |              ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...