QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#638663 | #7111. Press the Button | Delov | RE | 0ms | 3540kb | C++17 | 2.6kb | 2024-10-13 16:34:05 | 2024-10-13 16:34:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lep(i, l, r) for(int i = (l); i <= (r); i ++)
#define rep(i, l, r) for(int i = (l); i >= (r); i --)
using i64 = long long;
const int N = 1e5 + 5;
int _case;
void solve() {
++ _case;
cerr << _case << endl;
int a, b, c, d, v, t;
cin >> a >> b >> c >> d >> v >> t;
auto brute = [&] () -> int {
int ans = b + d - 1;
int nowa = 0, nowc = 0, lst = 0, nowpos = 0;
while (1) {
int nxa = nowa + a;
int nxc = nowc + c;
int pa = 0, pc = 0;
nowpos = min (nxa, nxc);
if (nowpos > t) break;
if (nowpos == nxa) nowa += a, pa = 1;
if (nowpos == nxc) nowc += c, pc = 1;
ans += pa * b + pc * d;
int len = nowpos - lst;
if (len > v) -- ans;
lst = nowpos;
// cerr << nowpos << endl;
}
return ans;
} ;
//cout << brute() << endl;
//return ;
if (a * c > t) { // solver for [0, t] (a * c > t)
cout << brute() << '\n';
return ;
}
else {
// solver for [0, a * c - 1] (a * c > t)
int ans = b + d - 1;
int nowa = 0, nowc = 0, lst = 0, nowpos = 0, lstlen = 0;
while (1) {
int nxa = nowa + a;
int nxc = nowc + c;
int pa = 0, pc = 0;
nowpos = min (nxa, nxc);
if (nowpos == a * c) break;
if (nowpos == nxa) nowa += a, pa = 1;
if (nowpos == nxc) nowc += c, pc = 1;
ans += pa * b + pc * d;
int len = nowpos - lst;
if (len > v) -- ans;
lstlen = len;
lst = nowpos;
}
int block_ans = ans;
int blocks = t / (a * c);
ans = block_ans * blocks;
//cerr << blocks << endl;
//cerr << lstlen << endl;
if (lstlen <= v) {
ans += blocks - 1;
}
nowa = nowc = blocks * a * c;
lst = nowpos = nowa;
if (lstlen > v) ans --;
//t = nowpos - 1;
//cerr << brute() << endl;
//cerr << ans << ' ' << nowpos << endl;
//return ;
ans += b + d;
while (1) {
int nxa = nowa + a;
int nxc = nowc + c;
int pa = 0, pc = 0;
nowpos = min (nxa, nxc);
if (nowpos > t) break;
if (nowpos == nxa) nowa += a, pa = 1;
if (nowpos == nxc) nowc += c, pc = 1;
ans += pa * b + pc * d;
int len = nowpos - lst;
if (len > v) -- ans;
lstlen = len;
lst = nowpos;
}
cout << ans << '\n';
cerr << ans << ' ' << brute() << '\n';
assert (ans == brute());
return ;
}
assert (false);
}
signed main() {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int Case;
cin >> Case;
while (Case --) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3540kb
input:
2 8 2 5 1 2 18 10 2 5 1 2 10
output:
6 4
result:
ok 2 number(s): "6 4"
Test #2:
score: -100
Runtime Error
input:
1000 8 6 2 6 3 17 1 6 1 1 1 30 5 4 8 8 1 31 7 6 10 3 6 12 9 1 4 4 3 38 3 3 5 8 1 8 9 1 5 2 3 18 6 10 10 8 2 40 9 6 9 10 3 9 2 5 1 10 10 39 7 7 1 2 4 19 8 10 8 6 7 36 2 9 1 1 7 17 1 2 3 5 6 14 8 8 8 7 1 46 6 9 3 9 4 6 10 8 1 7 10 18 7 1 7 10 3 50 1 10 2 1 5 1 5 8 4 9 7 44 9 2 5 4 7 42 9 1 2 1 1 20 5 ...
output:
71 216 52 16 38 22 7 102 30 499 60 75 98 54 84 44 148 80 20 179 45 4 463 139 57