Submission #1159696
Source Code Expand
#ifdef DEBUG #define _GLIBCXX_DEBUG #endif #include <bits/stdc++.h> using namespace std; mt19937 mrand(random_device{} ()); int rnd(int x) { return mrand() % x; } typedef long double ld; typedef long long ll; #ifdef DEBUG #define eprintf(...) fprintf(stderr, __VA_ARGS__), fflush(stderr) #else #define eprintf(...) ; #endif #define pb push_back #define mp make_pair #define sz(x) ((int) (x).size()) #define TASK "text" const int inf = (int) 1.01e9; const ld eps = 1e-9; const ld pi = acos((ld) -1.0); const int mod = (int) 1e9 + 7; void add(int &x, int y) { if ((x += y) >= mod) { x -= mod; } } int mult(int x, int y) { return (long long) x * y % mod; } int myPower(int x, int pw) { int res = 1; for (; pw; pw >>= 1) { if (pw & 1) { res = mult(res, x); } x = mult(x, x); } return res; } void precalc() { } const int maxn = (int) 1e5 + 10; int n, k; int a[maxn], b[maxn]; int read() { if (scanf("%d%d", &n, &k) < 2) { return 0; } for (int i = 0; i < n; ++i) { scanf("%d%d", a + i, b + i); } return 1; } long long sums[maxn]; long long dp[2][maxn]; map<int, int> tree; void addTree(int l, int r, int nval) { //eprintf("f[%d..%d) := %d\n", l, r, nval); auto iter = tree.upper_bound(l); --iter; int lval = iter->second; tree[l] = nval; while (1) { iter = tree.upper_bound(l); if (iter == tree.end() || iter->first > r) { tree[r] = lval; break; } if (iter->first == r) { break; } lval = iter->second; tree.erase(iter); } } void solve() { long long res = 0; for (int i = 0; i < n; ++i) { res += a[i] * 2; } for (int iter = 0; iter < 2; ++iter) { sums[0] = 0; for (int i = 0; i < n; ++i) { sums[i + 1] = sums[i] + a[i]; } auto *d = dp[iter]; d[n] = 0; tree.clear(); tree[0] = -1; for (int i = n - 1; i >= 0; --i) { if (b[i] == 1 && a[i] > k / 2) { printf("-1\n"); return; } //eprintf("i = %d\n", i); long long best = 1e18; int bpos = -1; for (int j = 0; j < 2; ++j) { long long s0 = sums[i] + (!j ? 0 : (k / 2)); //eprintf("s0 = %lld\n", s0); int rem = s0 % k; auto iter = tree.upper_bound(rem); --iter; int pos = iter->second; if (pos != -1) { long long diff = sums[pos] - s0; int rem = diff % k; if (rem < 0) { rem += k; } if (rem) { diff += k - rem; } assert(diff >= 0ll && diff % k == 0); diff /= k; diff *= 2; diff += j; if (best > diff) { best = diff; bpos = pos; } } } if (bpos == -1) { d[i] = 0; } else { //eprintf("best = %lld\n", best); d[i] = best * k - 2 * (sums[bpos] - sums[i]) + d[bpos]; } //eprintf("d[%d] = %lld\n", i, d[i]); if (b[i] == 1) { int l = sums[i] % k; int len = min(k, a[i]); addTree(l, min(l + len, k), i); if (l + len > k) { addTree(0, l + len - k, i); } } } reverse(a, a + n); reverse(b, b + n); } long long best = 1e18; for (int i = 0; i <= n; ++i) { best = min(best, dp[0][i] + dp[1][n - i]); } res += best; printf("%lld\n", res); } int main() { precalc(); #ifdef LOCAL freopen(TASK ".out", "w", stdout); assert(freopen(TASK ".in", "r", stdin)); #endif while (1) { if (!read()) { break; } solve(); #ifdef DEBUG eprintf("Time %.2f\n", (double) clock() / CLOCKS_PER_SEC); #endif } return 0; }
Submission Info
Submission Time | |
---|---|
Task | F - Train Service Planning |
User | XraY |
Language | C++14 (GCC 5.4.1) |
Score | 1700 |
Code Size | 3878 Byte |
Status | AC |
Exec Time | 156 ms |
Memory | 8064 KB |
Compile Error
./Main.cpp: In function ‘int read()’: ./Main.cpp:69:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d", a + i, b + i); ^
Judge Result
Set Name | Sample | All | subtask | subtask2 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 700 / 700 | 500 / 500 | 500 / 500 | ||||||||
Status |
|
|
|
|
Set Name | Test Cases |
---|---|
Sample | sample1.txt, sample2.txt, sample3.txt, sample4.txt |
All | sample1.txt, sample2.txt, sample3.txt, sample4.txt, in1.txt, in10.txt, in101.txt, in102.txt, in103.txt, in104.txt, in105.txt, in106.txt, in107.txt, in108.txt, in109.txt, in11.txt, in110.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in3.txt, in4.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt, sample3.txt, sample4.txt, sub2in1.txt, sub2in10.txt, sub2in11.txt, sub2in12.txt, sub2in13.txt, sub2in14.txt, sub2in15.txt, sub2in16.txt, sub2in17.txt, sub2in18.txt, sub2in19.txt, sub2in2.txt, sub2in20.txt, sub2in21.txt, sub2in22.txt, sub2in23.txt, sub2in24.txt, sub2in3.txt, sub2in4.txt, sub2in5.txt, sub2in6.txt, sub2in7.txt, sub2in8.txt, sub2in9.txt, subin1.txt, subin10.txt, subin101.txt, subin102.txt, subin103.txt, subin104.txt, subin105.txt, subin106.txt, subin107.txt, subin108.txt, subin109.txt, subin11.txt, subin12.txt, subin13.txt, subin14.txt, subin15.txt, subin16.txt, subin17.txt, subin18.txt, subin19.txt, subin2.txt, subin20.txt, subin201.txt, subin21.txt, subin22.txt, subin23.txt, subin24.txt, subin3.txt, subin4.txt, subin5.txt, subin6.txt, subin7.txt, subin8.txt, subin9.txt |
subtask | sample1.txt, sample2.txt, sample3.txt, subin1.txt, subin10.txt, subin101.txt, subin102.txt, subin103.txt, subin104.txt, subin105.txt, subin106.txt, subin107.txt, subin108.txt, subin109.txt, subin11.txt, subin12.txt, subin13.txt, subin14.txt, subin15.txt, subin16.txt, subin17.txt, subin18.txt, subin19.txt, subin2.txt, subin20.txt, subin201.txt, subin21.txt, subin22.txt, subin23.txt, subin24.txt, subin3.txt, subin4.txt, subin5.txt, subin6.txt, subin7.txt, subin8.txt, subin9.txt |
subtask2 | sample1.txt, sample2.txt, sample3.txt, sample4.txt, sub2in1.txt, sub2in10.txt, sub2in11.txt, sub2in12.txt, sub2in13.txt, sub2in14.txt, sub2in15.txt, sub2in16.txt, sub2in17.txt, sub2in18.txt, sub2in19.txt, sub2in2.txt, sub2in20.txt, sub2in21.txt, sub2in22.txt, sub2in23.txt, sub2in24.txt, sub2in3.txt, sub2in4.txt, sub2in5.txt, sub2in6.txt, sub2in7.txt, sub2in8.txt, sub2in9.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
in1.txt | AC | 2 ms | 256 KB |
in10.txt | AC | 69 ms | 3328 KB |
in101.txt | AC | 89 ms | 4352 KB |
in102.txt | AC | 102 ms | 4864 KB |
in103.txt | AC | 79 ms | 3840 KB |
in104.txt | AC | 131 ms | 7168 KB |
in105.txt | AC | 143 ms | 7680 KB |
in106.txt | AC | 86 ms | 4352 KB |
in107.txt | AC | 102 ms | 4864 KB |
in108.txt | AC | 80 ms | 3840 KB |
in109.txt | AC | 130 ms | 7296 KB |
in11.txt | AC | 69 ms | 3328 KB |
in110.txt | AC | 139 ms | 7680 KB |
in12.txt | AC | 84 ms | 3328 KB |
in13.txt | AC | 83 ms | 3328 KB |
in14.txt | AC | 85 ms | 3328 KB |
in15.txt | AC | 102 ms | 3456 KB |
in16.txt | AC | 98 ms | 3328 KB |
in17.txt | AC | 92 ms | 3328 KB |
in18.txt | AC | 88 ms | 3328 KB |
in19.txt | AC | 91 ms | 3328 KB |
in2.txt | AC | 69 ms | 3328 KB |
in20.txt | AC | 87 ms | 3328 KB |
in21.txt | AC | 136 ms | 6528 KB |
in22.txt | AC | 131 ms | 6784 KB |
in23.txt | AC | 141 ms | 6144 KB |
in24.txt | AC | 143 ms | 5888 KB |
in25.txt | AC | 68 ms | 3328 KB |
in26.txt | AC | 70 ms | 3328 KB |
in27.txt | AC | 68 ms | 3328 KB |
in28.txt | AC | 71 ms | 3328 KB |
in3.txt | AC | 69 ms | 3328 KB |
in4.txt | AC | 69 ms | 3328 KB |
in5.txt | AC | 60 ms | 2944 KB |
in6.txt | AC | 97 ms | 3328 KB |
in7.txt | AC | 69 ms | 3328 KB |
in8.txt | AC | 29 ms | 2176 KB |
in9.txt | AC | 69 ms | 3328 KB |
sample1.txt | AC | 1 ms | 256 KB |
sample2.txt | AC | 1 ms | 256 KB |
sample3.txt | AC | 1 ms | 256 KB |
sample4.txt | AC | 1 ms | 256 KB |
sub2in1.txt | AC | 1 ms | 256 KB |
sub2in10.txt | AC | 1 ms | 256 KB |
sub2in11.txt | AC | 1 ms | 256 KB |
sub2in12.txt | AC | 1 ms | 256 KB |
sub2in13.txt | AC | 1 ms | 256 KB |
sub2in14.txt | AC | 1 ms | 256 KB |
sub2in15.txt | AC | 1 ms | 256 KB |
sub2in16.txt | AC | 1 ms | 256 KB |
sub2in17.txt | AC | 1 ms | 256 KB |
sub2in18.txt | AC | 1 ms | 256 KB |
sub2in19.txt | AC | 1 ms | 256 KB |
sub2in2.txt | AC | 1 ms | 256 KB |
sub2in20.txt | AC | 1 ms | 256 KB |
sub2in21.txt | AC | 1 ms | 256 KB |
sub2in22.txt | AC | 1 ms | 256 KB |
sub2in23.txt | AC | 1 ms | 256 KB |
sub2in24.txt | AC | 1 ms | 256 KB |
sub2in3.txt | AC | 1 ms | 256 KB |
sub2in4.txt | AC | 1 ms | 256 KB |
sub2in5.txt | AC | 1 ms | 256 KB |
sub2in6.txt | AC | 1 ms | 256 KB |
sub2in7.txt | AC | 1 ms | 256 KB |
sub2in8.txt | AC | 1 ms | 256 KB |
sub2in9.txt | AC | 1 ms | 256 KB |
subin1.txt | AC | 65 ms | 3328 KB |
subin10.txt | AC | 88 ms | 3328 KB |
subin101.txt | AC | 55 ms | 3328 KB |
subin102.txt | AC | 92 ms | 4864 KB |
subin103.txt | AC | 121 ms | 6400 KB |
subin104.txt | AC | 117 ms | 6400 KB |
subin105.txt | AC | 156 ms | 7936 KB |
subin106.txt | AC | 149 ms | 8064 KB |
subin107.txt | AC | 92 ms | 5760 KB |
subin108.txt | AC | 92 ms | 5760 KB |
subin109.txt | AC | 90 ms | 5120 KB |
subin11.txt | AC | 115 ms | 3328 KB |
subin12.txt | AC | 110 ms | 3328 KB |
subin13.txt | AC | 102 ms | 3328 KB |
subin14.txt | AC | 94 ms | 3328 KB |
subin15.txt | AC | 101 ms | 3328 KB |
subin16.txt | AC | 94 ms | 3328 KB |
subin17.txt | AC | 113 ms | 3328 KB |
subin18.txt | AC | 109 ms | 3328 KB |
subin19.txt | AC | 100 ms | 3328 KB |
subin2.txt | AC | 64 ms | 3328 KB |
subin20.txt | AC | 93 ms | 3328 KB |
subin201.txt | AC | 1 ms | 256 KB |
subin21.txt | AC | 66 ms | 3328 KB |
subin22.txt | AC | 71 ms | 3328 KB |
subin23.txt | AC | 66 ms | 3328 KB |
subin24.txt | AC | 62 ms | 3328 KB |
subin3.txt | AC | 66 ms | 3328 KB |
subin4.txt | AC | 56 ms | 2944 KB |
subin5.txt | AC | 110 ms | 3328 KB |
subin6.txt | AC | 119 ms | 4352 KB |
subin7.txt | AC | 18 ms | 1792 KB |
subin8.txt | AC | 23 ms | 2048 KB |
subin9.txt | AC | 66 ms | 3328 KB |