CSES - Datatähti 2022 loppu - Results
Submission details
Task:Pallo
Sender:Anniiiz
Submission time:2022-01-22 14:47:14 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.01 s1, 2, 3details
#2--2, 3details
#3--3details

Code

#include <iostream>
#include <vector>
#include<algorithm>
#include <map>
using namespace std;
using ll = long long;
vector<pair<ll,ll>> reitti;
map<pair<ll,ll>, ll> ma;

int main() {
  ll t;
  cin >> t;
  for (int h = 0; h < t; ++h) {
    ll n, m, k;
    ll p = 0;
    ll mutkat = 0;
    cin >> n >> m >> k;
    ll suunta = 0;
    pair<ll,ll> me = {1,1};
    while (p <= k) {
      //cout << me.first << " " << me.second << endl;
      reitti.push_back(me);
      if (suunta == 1) {
        ma[me] = m - me.second;
        if (ma[me] == 0) {
          break;
        }
        p += ma[me];
        me = {me.first - ma[me], me.second + ma[me]};
      }
      else if (suunta == 3) {
        ma[me] = me.second - 1;
        if (ma[me] == 0) break;
        p += ma[me];
        me = {me.first + ma[me], me.second - ma[me]};
      }
      else if (suunta == 2) {
        ma[me] = me.first - 1;
        if (ma[me] == 0) break;
        p += ma[me];
        me = {me.first - ma[me], me.second - ma[me]};
      }
      else if (suunta == 0) {
        ma[me] = n - me.first;
        if (ma[me] == 0) break;
        p += ma[me];
        me = {me.first + ma[me], me.second + ma[me]};
      }
      mutkat++;
      suunta ++;
      suunta = suunta%4;
      //cout << ma[reitti.back()] << " l " << mutkat << endl;
    }
    ll vastaus = 0;
    //cout << me.first << " loppu " << me.second << endl;
    if (!(me.first == 1 && me.second == m) && !(me.first == n && me.second == 1) && !(me.first == n && me.second == m)) {
      //cout << "lol" << endl;
      vastaus = mutkat - 1;
    }
    else {
      if (k % p == 0) vastaus = (k / p) * mutkat ;
      else {
        ll ka = k % p;
        vastaus = (k / p) * mutkat;
        if (vastaus % 2 == 0) {
          ll pa = 0;
          ll l = 0;
          for (auto u : reitti) {
            pa += ma[u];
            l ++;
            if (pa > ka) break;
          }
          vastaus += l - 1;
        }
        else {
          ll ka = k % p;
          vastaus = k / p;
          if (vastaus % 2 == 0) {
            ll pa = 0;
            ll l = 0;
            for (int i = reitti.size()-1; i >= 0; i--) {
              auto u = reitti[i];
              pa += ma[u];
              l ++;
              if (pa > ka) break;
            }
            vastaus += l - 1;
          }
        }
      }
    }
    cout << vastaus << endl;
  }
  for (auto x : ma) {
    ma[x.first] = 0;
  }
  for (int i = reitti.size() - 1; i >= 0; i--) reitti.pop_back();
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
100
10 5 76
9 8 78
8 6 49
3 3 94
...

correct output
25
19
15
47
8
...

user output
16
18
14
47
8
...
Truncated

Test 2

Group: 2, 3

Verdict:

input
1000
7 5 99033171167123849
6 8 472883555390027162
9 10 258937093512465880
10 6 691774305483997493
...

correct output
33011057055707949
148620545979722822
57541576336103529
199845910473154830
52151060432923288
...

user output
(empty)

Test 3

Group: 3

Verdict:

input
1000
816332614 86098803 33572721929...

correct output
4310587870
45982113074
1550250683
717639357
3282221941
...

user output
(empty)