제출 #761076

#제출 시각아이디문제언어결과실행 시간메모리
761076Red_Inside선물상자 (IOI15_boxes)C++17
35 / 100
1 ms340 KiB
#include "boxes.h" #include "boxes.h" #include <bits/stdc++.h> //#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops") #define ll long long #define f first #define s second #define pb push_back #define mp make_pair #define o cout<<"BUG"<<endl; #define FOR(i, j, n) for(int j = i; j < n; ++j) #define forn(i, j, n) for(int j = i; j <= n; ++j) #define nfor(i, j, n) for(int j = n; j >= i; --j) #define all(v) v.begin(), v.end() #define ld long double #define ull unsigned long long using namespace std; const int maxn=188500+10,LOG=17,mod=1e9+7; int block = 200, timer = 0; const double eps = 1e-9; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define bt(i) (1 << (i)) //#define int ll const ll inf=2e18; #define y1 yy #define pii pair <int, int> vector <pair <ll, ll> > fi, se; ll solve(int K, int L) { /*cout << "SOLVE\n"; cout << "FI\n"; for(auto i : fi) cout << i.f << " " << i.s << endl; cout << "SE\n"; for(auto i : se) cout << i.f << " " << i.s << endl;*/ int tek; tek = 0; ll S1 = 0; ll S2 = 0; ll ans = 0; for(auto i : fi) S1+=i.s; for(auto i : se) S2+=i.s; for(int i = (int)fi.size() - 1; i >= 0; --i) { if(tek < fi[i].s) { tek += K; ans += 2*fi[i].f; } tek -= fi[i].s; } tek = 0; for(int i = (int)se.size() - 1; i >= 0; --i) { if(tek < se[i].s) { tek += K; ans += 2*(L-se[i].f); } tek -= se[i].s; } ll ret = ans; ans = 0; tek = 0; FOR(0, i, fi.size()) { if(tek < fi[i].s) { fi[i].s -= tek; S1 -= tek; tek = 0; if(S1 < K) { break; } tek += K; ans += 2*fi[i].f; } tek -= fi[i].s; fi[i].s = 0; } tek = 0; FOR(0, i, se.size()) { if(tek < se[i].s) { se[i].s -= tek; S2 -= tek; tek = 0; if(S2 < K) { break; } tek += K; ans += 2*(L-se[i].f); } tek -= se[i].s; se[i].s = 0; } ret = min(ret, ans + L); // cout << " RET " << ret << " " << ans + L << endl; return ret; } long long delivery(int N, int K, int L, int P[]) { int pos = 0; int cnt = 0; vector <pair <ll, ll> > p; FOR(0, i, N) { if(pos == P[i]) { cnt++; continue; } if(pos != 0) p.pb({pos, cnt}); cnt = 1; pos = P[i]; } if(pos != 0) p.pb({pos, cnt}); ll ret = 0; N = 0; FOR(0, i, p.size()) { ret += p[i].s / K * 2*min(p[i].f, L-p[i].f); p[i].s %= K; N += p[i].s; } fi.clear(); se.clear(); if(L % 2 == 1) { int mid = L / 2; for(auto i : p) { if(i.f <= mid) fi.pb(i); else break; } for(int i = (int)p.size()-1; i >= 0; --i) { if(p[i].f <= mid) break; se.pb(p[i]); } return solve(K, L) + ret; } else { int mid = L / 2; for(auto i : p) { if(i.f < mid) fi.pb(i); else break; } for(int i = (int)p.size()-1; i >= 0; --i) { if(p[i].f <= mid) break; se.pb(p[i]); } pos = -1; for(int i = 0; i < (int)p.size(); ++i) { if(p[i].f == mid) pos = i; } if(pos == -1) return solve(K, L) + ret; ll ans = inf; forn(0, i, p[pos].s) { fi.pb({p[pos].f, i}); se.pb({p[pos].f, p[pos].s-i}); ans = min(ans, solve(K, L)); fi.pop_back(); se.pop_back(); } return ans + ret; } }

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

boxes.cpp: In function 'long long int solve(int, int)':
boxes.cpp:10:11: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 | #define s second
      |           ^~~~~~
boxes.cpp:57:16: note: in expansion of macro 's'
   57 |   tek -= fi[i].s;
      |                ^
boxes.cpp:10:11: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 | #define s second
      |           ^~~~~~
boxes.cpp:67:16: note: in expansion of macro 's'
   67 |   tek -= se[i].s;
      |                ^
boxes.cpp:14:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j, n) for(int j = i; j < n; ++j)
......
   72 |  FOR(0, i, fi.size())
      |         ~~~~~~~~~~~~                   
boxes.cpp:72:2: note: in expansion of macro 'FOR'
   72 |  FOR(0, i, fi.size())
      |  ^~~
boxes.cpp:10:11: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 | #define s second
      |           ^~~~~~
boxes.cpp:86:16: note: in expansion of macro 's'
   86 |   tek -= fi[i].s;
      |                ^
boxes.cpp:14:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j, n) for(int j = i; j < n; ++j)
......
   90 |  FOR(0, i, se.size())
      |         ~~~~~~~~~~~~                   
boxes.cpp:90:2: note: in expansion of macro 'FOR'
   90 |  FOR(0, i, se.size())
      |  ^~~
boxes.cpp:10:11: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 | #define s second
      |           ^~~~~~
boxes.cpp:104:16: note: in expansion of macro 's'
  104 |   tek -= se[i].s;
      |                ^
boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:14:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j, n) for(int j = i; j < n; ++j)
......
  133 |  FOR(0, i, p.size())
      |         ~~~~~~~~~~~                    
boxes.cpp:133:2: note: in expansion of macro 'FOR'
  133 |  FOR(0, i, p.size())
      |  ^~~
boxes.cpp:10:11: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
   10 | #define s second
      |           ^~~~~~
boxes.cpp:137:13: note: in expansion of macro 's'
  137 |   N += p[i].s;
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...