QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#159782#7111. Press the Buttonucup-team1191#AC ✓2ms3752kbC++205.7kb2023-09-02 18:41:132023-09-02 18:41:14

Judging History

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

  • [2023-09-02 18:41:14]
  • 评测
  • 测评结果:AC
  • 用时:2ms
  • 内存:3752kb
  • [2023-09-02 18:41:13]
  • 提交

answer

/*
    author:  Maksim1744
    created: 02.09.2023 13:27:53
*/

#include "bits/stdc++.h"

using namespace std;

using ll = long long;
using ld = long double;

#define mp   make_pair
#define pb   push_back
#define eb   emplace_back

#define sum(a)     ( accumulate ((a).begin(), (a).end(), 0ll))
#define mine(a)    (*min_element((a).begin(), (a).end()))
#define maxe(a)    (*max_element((a).begin(), (a).end()))
#define mini(a)    ( min_element((a).begin(), (a).end()) - (a).begin())
#define maxi(a)    ( max_element((a).begin(), (a).end()) - (a).begin())
#define lowb(a, x) ( lower_bound((a).begin(), (a).end(), (x)) - (a).begin())
#define uppb(a, x) ( upper_bound((a).begin(), (a).end(), (x)) - (a).begin())

template<typename T>             vector<T>& operator--            (vector<T> &v){for (auto& i : v) --i;            return  v;}
template<typename T>             vector<T>& operator++            (vector<T> &v){for (auto& i : v) ++i;            return  v;}
template<typename T>             istream& operator>>(istream& is,  vector<T> &v){for (auto& i : v) is >> i;        return is;}
template<typename T>             ostream& operator<<(ostream& os,  vector<T>  v){for (auto& i : v) os << i << ' '; return os;}
template<typename T, typename U> pair<T,U>& operator--           (pair<T, U> &p){--p.first; --p.second;            return  p;}
template<typename T, typename U> pair<T,U>& operator++           (pair<T, U> &p){++p.first; ++p.second;            return  p;}
template<typename T, typename U> istream& operator>>(istream& is, pair<T, U> &p){is >> p.first >> p.second;        return is;}
template<typename T, typename U> ostream& operator<<(ostream& os, pair<T, U>  p){os << p.first << ' ' << p.second; return os;}
template<typename T, typename U> pair<T,U> operator-(pair<T,U> a, pair<T,U> b){return mp(a.first-b.first, a.second-b.second);}
template<typename T, typename U> pair<T,U> operator+(pair<T,U> a, pair<T,U> b){return mp(a.first+b.first, a.second+b.second);}
template<typename T, typename U> void umin(T& a, U b){if (a > b) a = b;}
template<typename T, typename U> void umax(T& a, U b){if (a < b) a = b;}

#ifdef HOME
#define SHOW_COLORS
#include "/mnt/c/Libs/tools/print.cpp"
#else
#define show(...) void(0)
#define debugf(fun)   fun
#define debugv(var)   var
#define mclock    void(0)
#define shows     void(0)
#define debug  if (false)
#define OSTREAM(...)    ;
#define OSTREAM0(...)   ;
#endif

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll rnd (ll l, ll r) { return (ll)(rng() % (r - l + 1)) + l; }
ll rnd (ll r)       { return rng() % r; }
ll rnd ()           { return rng(); }
ld rndf()           { return (ld)rng() / (ld)ULLONG_MAX; }
ld rndf(ld l, ld r) { return rndf() * (r - l) + l; }

void test_case(int test) {
    ll a, x, b, y, v, t;
    cin >> a >> x >> b >> y >> v >> t;
    ll tot = 0;
    tot += (t / a + 1) * x;
    tot += (t / b + 1) * y;

    auto calc = [](ll a, ll b, ll v, ll t) -> ll {
        if (a < b) swap(a, b);
        if (b <= v) return 0;
        if (a == b) {
            ll norm = t / a;
            return norm;
        }

        ll res = 0;
        ll lc = lcm(a, b);
        if (t >= lc) {
            ll cur = 0;
            for (ll i = 0; i < lc / a; ++i) {
                ll on_seg = a * (i + 1) / b - a * i / b - (i != 0);
                cur += on_seg;
                if (i) {
                    ll left = a * i % b;
                    ll right = b - left;
                    assert(left != 0);
                    assert(right != 0);
                    if (left > v) ++cur;
                    if (right > v) ++cur;
                }
            }
            show(cur);
            res += t / lc * cur;
            t %= lc;
        }
        show(res);
        show(t);

        for (ll i = 0; i < lc / a; ++i) {
            ll on_seg = max(0ll, min(t / b, a * (i + 1) / b) - min(t / b, a * i / b) - (i != 0));
            res += on_seg;
            if (i) {
                ll left = a * i % b;
                ll right = b - left;
                assert(left != 0);
                assert(right != 0);
                if (a * i <= t && left > v) ++res;
                if (a * i + right <= t && right > v) ++res;
            }
        }

        show(res);

        // {
        //     ll last = min(t % a, t % b);
        //     res += (last > v);
        // }

        return res;
    };

    // for (int i = 0; i < 100000; ++i) {
    //     auto easy = [&](ll a, ll b, ll v, ll t) {
    //         vector<ll> pts = {0};
    //         for (ll u = 0; u <= t; u += a)
    //             pts.pb(u);
    //         for (ll u = 0; u <= t; u += b)
    //             pts.pb(u);
    //         sort(pts.begin(), pts.end());
    //         pts.erase(unique(pts.begin(), pts.end()), pts.end());
    //         ll res = 0;
    //         for (int i = 0; i + 1 < pts.size(); ++i)
    //             if (pts[i + 1] - pts[i] > v)
    //                 ++res;
    //         return res;
    //     };

    //     ll a = rnd(1, 1000);
    //     ll b = rnd(1, 1000);
    //     ll v = rnd(1, 1000);
    //     ll t = rnd(1, 1000);
    //     ll ans = easy(a, b, v, t);
    //     ll out = calc(a, b, v, t);
    //     if (out != ans) {
    //         show(a, b, v, t);
    //         show(out, ans);
    //         assert(false);
    //     }
    // }

    ll cc = calc(a, b, v, t);
    show(a, b, v, t);
    show(tot, cc);
    cout << tot - 1 - cc << '\n';
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    int T;
    cin >> T;
    for (int test = 1; test <= T; ++test) {
        test_case(test);
    }

    return 0;
}

这程序好像有点Bug,我给组数据试试?

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3752kb

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: 0
Accepted
time: 1ms
memory: 3616kb

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
56
30
45
127
204
121
42
69
38
98
63
121
25
142
17
75
24
175
114
40
32
11
29
85
35
7
66
49
492
49
49
14
17
53
431
161
94
27
21
135
71
92
33
290
57
300
18
89
155
55
10
219
203
390
28
50
67
213
26
18
27
19
128
101
118
62
46
15...

result:

ok 1000 numbers

Test #3:

score: 0
Accepted
time: 2ms
memory: 3752kb

input:

100
9 9 3 1 1 2
5 5 7 7 7 50
2 1 8 10 10 45
3 4 5 7 7 38
1 6 9 5 2 13
5 6 7 9 1 29
10 1 4 3 3 19
6 10 10 8 7 3
9 3 10 3 3 14
9 7 1 7 8 38
3 78 5 43 5 958
4 98 3 42 10 7
3 16 9 71 7 52
1 70 3 86 3 410
10 44 1 56 3 628
9 15 9 94 10 15
9 95 9 61 2 525
2 23 8 37 10 108
5 92 3 65 10 331
6 54 6 44 3 537
2...

output:

9
110
82
107
93
73
13
17
10
307
33215
321
713
40551
37995
217
9145
1782
13378
8730
270
2433
143
17
30
136
10
82
33
97
733
126
2917
623
364
1448
1212
872
268
1031
1601
3889
122
523
819
83
17513
277
2973
4651
202187
42602
17225
7881
32574
7087
4453
34029
20529
17520
58488
189327
14380
67133
90956
4328...

result:

ok 100 numbers

Extra Test:

score: 0
Extra Test Passed