#include <iostream>
#include <string>
using namespace std;
/**
* Funkcja pomocnicza do przesuwania liczb w kółku 1-1000.
* Pozwala Algosi "zakodować" liczby, a Bajtkowi je "odkodować".
*/
int transformuj(int x, int delta) {
// Mapujemy zakres 1..1000 na 0..999 dla poprawnego działania modulo
int v = x - 1;
v = (v + delta) % 1000;
// Obsługa ujemnych wyników (dla Bajtka, gdy delta jest ujemna)
if (v < 0) v += 1000;
return v + 1;
}
int main() {
// Wyłączenie synchronizacji przyspiesza operacje wejścia/wyjścia
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string rola;
if (!(cin >> rola)) return 0;
if (rola == "Algosia") {
int A, B;
if (cin >> A >> B) {
// Przesuwamy o 500.
// Skoro A != B, to C != D.
// Skoro zakres to 1000, przesunięcie o 500 gwarantuje,
// że C != A oraz D != B (bo C = A + 500 lub A - 500).
int C = transformuj(A, 500);
int D = transformuj(B, 500);
cout << C << " " << D << endl;
cout.flush();
}
}
else if (rola == "Bajtek") {
int C, D;
if (cin >> C >> D) {
// Bajtek wykonuje operację odwrotną:
// Przesunięcie o 500 w kółku 1000-elementowym
// jest swoją własną odwrotnością (500 + 500 = 1000 mod 1000).
int A = transformuj(C, 500);
int B = transformuj(D, 500);
cout << A << " " << B << endl;
cout.flush();
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> #include <string> using namespace std; /** * Funkcja pomocnicza do przesuwania liczb w kółku 1-1000. * Pozwala Algosi "zakodować" liczby, a Bajtkowi je "odkodować". */ int transformuj(int x, int delta) { // Mapujemy zakres 1..1000 na 0..999 dla poprawnego działania modulo int v = x - 1; v = (v + delta) % 1000; // Obsługa ujemnych wyników (dla Bajtka, gdy delta jest ujemna) if (v < 0) v += 1000; return v + 1; } int main() { // Wyłączenie synchronizacji przyspiesza operacje wejścia/wyjścia ios_base::sync_with_stdio(false); cin.tie(NULL); string rola; if (!(cin >> rola)) return 0; if (rola == "Algosia") { int A, B; if (cin >> A >> B) { // Przesuwamy o 500. // Skoro A != B, to C != D. // Skoro zakres to 1000, przesunięcie o 500 gwarantuje, // że C != A oraz D != B (bo C = A + 500 lub A - 500). int C = transformuj(A, 500); int D = transformuj(B, 500); cout << C << " " << D << endl; cout.flush(); } } else if (rola == "Bajtek") { int C, D; if (cin >> C >> D) { // Bajtek wykonuje operację odwrotną: // Przesunięcie o 500 w kółku 1000-elementowym // jest swoją własną odwrotnością (500 + 500 = 1000 mod 1000). int A = transformuj(C, 500); int B = transformuj(D, 500); cout << A << " " << B << endl; cout.flush(); } } return 0; } |
English