Task: | Pallo |
Sender: | Anniiiz |
Submission time: | 2022-01-22 14:47:14 +0200 |
Language: | C++ (C++11) |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | WRONG ANSWER | 0 |
#2 | WRONG ANSWER | 0 |
#3 | WRONG ANSWER | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | WRONG ANSWER | 0.01 s | 1, 2, 3 | details |
#2 | TIME LIMIT EXCEEDED | -- | 2, 3 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
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: WRONG ANSWER
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: TIME LIMIT EXCEEDED
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: TIME LIMIT EXCEEDED
input |
---|
1000 816332614 86098803 33572721929... |
correct output |
---|
4310587870 45982113074 1550250683 717639357 3282221941 ... |
user output |
---|
(empty) |