QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#401673#7111. Press the Buttonmiaokx#WA 1ms3704kbC++202.2kb2024-04-29 08:55:582024-04-29 08:55:58

Judging History

你现在查看的是最新测评结果

  • [2024-04-29 08:55:58]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3704kb
  • [2024-04-29 08:55:58]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

long long a, b, c, d, v, t;

ll cal(ll x, bool &state) {
    ll cur = 0;
    ll timer_end = -1;
    ll counter = 0;
    while (true) {
        bool light = timer_end > cur;
        if (cur % a == 0) {
            if (!light) {
                counter += b-1;
            } else {
                counter += b;
            }
            timer_end = cur + v + 1;
        }
        light = timer_end > cur;
        if (cur % c == 0) {
            if (!light) {
                counter += d-1;
            } else {
                counter += d;
            }
            timer_end = cur + v + 1;
        }
        ll nxt = x;
        if (cur % a != 0) {
            ll temp = (cur+a-1)/a*a;
            nxt = min(nxt, temp);
        }
        if (cur % c != 0) {
            ll temp = (cur+c-1)/c*c;
            nxt = min(nxt, temp);
        }
        // if (cur % a == 0 && cur % c == 0) {
            ll temp = cur + min(a, c);
            nxt = min(nxt, temp);
        // }

        // cout << cur << ' ' << counter << '\n';
        
        // end the game afte pressing button
        if (cur == x) break;

        cur = nxt;
    }

    if (timer_end >= x) state = true;
    
    return counter;
}

void solve() {
    cin >> a >> b >> c >> d >> v >> t;
    a *= 2;
    c *= 2;
    v *= 2;
    t *= 2;

    if (v + 1 > min(a, c)) {
        cout << (t/a+1)*b+(t/c+1)*d-1 << '\n';
        return;
    }

    // calculate what happens in a lcm
    ll LCM = a / __gcd(a,c) * c;

    bool st = false;
    ll num  = t / LCM;
    ll ans = 0;

    if (num == 0) {
        ans = cal(t, st);
    } else {
        ll sol = cal(LCM, st);
        if (st) ans += sol + (num-1)*(sol+1);
        else ans += num * sol;
        if (t%LCM) ans += cal(t % LCM, st);
    }
    cout << ans << '\n';

}

int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin.exceptions(cin.failbit);
    int t;
    cin >>t;
    while (t--)
    solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3704kb

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
Wrong Answer
time: 1ms
memory: 3652kb

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
42
22
7
119
30
499
60
138
98
54
158
44
148
156
20
179
45
5
463
139
64
51
45
127
204
121
42
69
38
98
63
121
25
142
17
75
24
175
143
40
32
11
29
85
35
7
83
49
492
49
49
14
17
53
431
161
94
27
21
135
71
92
45
290
57
300
18
89
182
55
10
219
203
390
28
50
67
213
39
31
27
19
128
101
118
62
46...

result:

wrong answer 5th numbers differ - expected: '38', found: '42'