QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#53342#2929. Concert Rehearsalthomas_harmeyerWA 3ms3708kbC++2.4kb2022-10-04 23:10:022022-10-04 23:10:03

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-04 23:10:03]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:3708kb
  • [2022-10-04 23:10:02]
  • 提交

answer

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

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

ll solve() {
  // input
  ll n;  // num of players
  ll p;  // day length
  ll k;  // num of days
  cin >> n >> p >> k;
  vi a(n);  // players

  for (auto& i : a) cin >> i;

  vi cuma = [&]() -> vi {
    vi cum;
    cum.push_back(0);
    int repeat = 2;
    while (repeat--) {
      for (ll i : a) {
        cum.push_back(cum[sz(cum) - 1] + i);
      }
    }
    return cum;
  }();

  // [starting] = <where you end up, number of players>
  vector<pii> to = [&]() {
    vector<pii> to;
    ll sum = a[0];

    for (ll left = 0; left < n; left++) {
      ll lo = 0, diff = (1LL) << 54LL;
      while (diff > 0) {
        auto check = [&](ll x) {
          ll ans = (x / n) * cuma[n];
          ans += cuma[left + (x % n)] - cuma[left];
          return ans <= p;
        };
        if (check(lo + diff)) {
          lo += diff;
        }
        diff /= 2;
      }

      to.emplace_back((left + lo) % n, lo);
      sum -= a[left];
    }
    return to;
  }();

  pii loop;
  // [after i days] = <next index to play, number of students to play total>
  vector<pii> cum = [&]() {
    vector<pii> cum;
    vector<ll> vist(n, -1);
    pii cur(0, 0);

    cum.push_back(cur);
    while (vist[cur.first] == -1) {
      vist[cur.first] = cum.size() - 1;
      cur.second += to[cur.first].second;
      cur.first = to[cur.first].first;

      cum.push_back(cur);
    }
    loop = make_pair(vist[cur.first], cum.size() - 1);
    return cum;
  }();

  auto ans = [&]() {
    // no loop
    if (k < cum.size() - 1) {
      return cum[k].second / n;
    }
    ll ans = cum[cum.size() - 1].second;
    k -= cum.size() - 1;
    ll loopVal = cum[loop.second].second - cum[loop.first].second;
    ll loopSize = loop.second - loop.first;
    ans += loopVal * (k / loopSize);
    ans += cum[loop.first + (k % loopSize)].second - cum[loop.first].second;
    return ans / n;
  }();

  return ans;
  // <size of loop, num of students in loop>
}

int main() {
  cin.tie(0)->sync_with_stdio(0);
  cin.exceptions(cin.failbit);
  cout << solve();
  return 0;
}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 3496kb

input:

3 20 10
6
9
5

output:

10

result:

ok single line: '10'

Test #2:

score: 0
Accepted
time: 0ms
memory: 3568kb

input:

5 11 2
5
5
5
5
5

output:

0

result:

ok single line: '0'

Test #3:

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

input:

7 11 3
1
2
3
4
5
6
7

output:

1

result:

ok single line: '1'

Test #4:

score: 0
Accepted
time: 0ms
memory: 3652kb

input:

4 8 9
2
7
2
3

output:

4

result:

ok single line: '4'

Test #5:

score: 0
Accepted
time: 0ms
memory: 3500kb

input:

1 3 7
2

output:

7

result:

ok single line: '7'

Test #6:

score: 0
Accepted
time: 0ms
memory: 3688kb

input:

1 1000000000 1000000000
1

output:

1000000000000000000

result:

ok single line: '1000000000000000000'

Test #7:

score: 0
Accepted
time: 1ms
memory: 3564kb

input:

5 999999999 999999999
2
1
4
7
3

output:

58823528941176471

result:

ok single line: '58823528941176471'

Test #8:

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

input:

5 5 1000
2
2
2
2
2

output:

400

result:

ok single line: '400'

Test #9:

score: 0
Accepted
time: 3ms
memory: 3708kb

input:

980 991 978
2
1
2
1
2
3
1
1
1
3
3
3
2
2
2
2
3
3
1
3
1
2
2
3
1
2
3
3
2
3
1
2
2
3
1
3
1
3
2
2
2
1
1
2
3
3
1
2
1
1
1
2
2
2
3
3
2
1
3
3
1
3
3
1
1
2
1
1
1
1
2
1
2
3
2
1
1
3
3
2
2
1
3
3
3
2
2
3
1
2
3
3
2
2
3
2
3
2
2
2
1
3
3
1
1
3
1
2
2
2
2
1
2
2
1
1
3
2
1
1
3
1
2
3
3
3
3
3
2
2
2
3
3
1
1
2
1
3
3
3
2
2
2
3
...

output:

492

result:

ok single line: '492'

Test #10:

score: 0
Accepted
time: 1ms
memory: 3596kb

input:

980 967 994
6
1
4
6
10
10
8
5
5
9
2
8
10
1
8
7
10
1
7
3
7
1
4
10
2
5
7
5
2
5
4
9
4
9
8
1
9
8
9
8
4
1
3
2
4
9
4
2
8
7
5
7
9
9
1
4
10
10
3
7
5
4
1
1
6
7
8
6
6
9
9
9
10
10
9
10
9
10
7
9
4
3
9
8
3
5
2
1
3
5
9
3
6
4
10
8
2
2
8
4
2
4
8
1
2
9
1
2
6
10
3
4
9
9
9
10
10
10
2
6
2
5
5
7
10
9
9
3
10
8
4
9
6
3
10...

output:

179

result:

ok single line: '179'

Test #11:

score: 0
Accepted
time: 3ms
memory: 3604kb

input:

995 997 962
48
41
40
40
41
50
45
43
42
49
40
49
43
50
50
47
47
48
41
43
40
43
41
43
41
49
43
46
41
48
45
42
44
47
44
46
44
46
40
42
43
45
43
45
40
41
49
41
45
40
48
43
50
48
45
43
50
46
44
48
50
48
44
44
42
41
48
50
49
41
48
48
48
46
45
43
47
48
49
48
41
40
46
44
43
40
42
44
43
46
43
43
47
42
43
40
...

output:

21

result:

ok single line: '21'

Test #12:

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

input:

962 981 996
85
234
239
585
600
759
968
366
415
610
749
684
701
524
796
720
733
404
182
216
856
378
210
643
306
203
831
212
413
171
568
562
406
793
475
937
64
958
209
81
563
566
810
531
903
600
820
914
395
502
216
673
573
882
604
161
720
461
43
105
822
406
476
446
60
285
268
795
637
561
129
962
619
3...

output:

1

result:

ok single line: '1'

Test #13:

score: -100
Wrong Answer
time: 3ms
memory: 3620kb

input:

992 965 983
567
702
416
603
427
787
855
407
646
406
964
869
518
484
721
455
539
433
440
695
376
932
704
794
928
946
642
607
897
592
336
904
852
458
377
618
645
800
512
924
840
745
819
791
539
520
750
896
452
441
573
678
377
927
789
425
458
318
628
564
738
580
347
861
913
407
833
721
421
849
941
415
...

output:

-8755023120450069

result:

wrong answer 1st lines differ - expected: '1', found: '-8755023120450069'