Pe când era la grădiniță, Maria era pasionată de colorat folosind cariocile. Într-o zi, doamna educatoare i-a dat 4
carioci (de culori diferite). I-a mai dat Mariei un număr foarte mare de cartonașe pătrate, identice ca dimensiuni. I-a spus acesteia să coloreze laturile (cele patru margini) fiecărui cartonaș, așa încât oricare cartonaș să aibă câte o latură de fiecare dintre cele 4
culori. Așa că, toată dimineața fetița a colorat.
Acum, ajungând în gimnaziu, după ce a găsit cartonașele pe care le-a colorat când era mai mică, s-a gândit la următoarea problemă: poate să așeze a x b
cartonașe pe o suprafață dreptunghiulară cu a
linii și b
coloane, astfel încât să fie îndeplinite condițiile: fiecare dintre cele patru laturi ale zonei dreptunghiulare sa fie colorată cu o singură culoare (fiecare latură cu câte o culoare diferită); cartonașele vecine interioare să aibă latura comună de aceeași culoare.
Cerința
Pentru mai multe perechi (a,b)
date, să se afișeze o posibilitate de a aranja cartonașele sau să se spună că acest lucru nu este posibil.
Date de intrare
Fișierul de intrare carioci.in
conține pe prima linie un număr natural T
. Pe fiecare dintre următoarele T
linii, se află câte două numere naturale a
și b
, separate prin spațiu, reprezentând numărul de linii respectiv numărul de coloane pentru câte o zonă dreptunghiulară ce trebuie formată.
Date de ieșire
Fișierul de ieșire carioci.out
va conține, în ordine pentru fiecare dintre cele T
teste, fie o linie cu valoarea 0
(când așezarea nu este posibilă), fie a
linii cu câte b
numere (separate prin câte un spațiu). Un număr reprezintă codificarea unui cartonaș. Convenim să codificăm în felul următor: culorile le numerotăm cu numerele 1
, 2
, 3
, 4
. Codul de afișat îl formăm scriind codurile culorilor în ordinea Nord
, Est
, Sud
, Vest
. Se formează astfel un număr cu 4
cifre distincte. Acesta este codul cartonașului.
Restricții și precizări
1 ≤ T ≤ 10
1 ≤ a, b ≤ 100
- Maria a colorat un număr suficient de mare de cartonașe, în toate modurile.
- Orice soluție corectă este acceptată.
Exemplul 1:
carioci.in
2 1 1 2 2
carioci.out
1234 1234 1342 3124 4321
Exemplul 2:
carioci.in
3 1 1 1 2 2 2
carioci.out
1234 0 1234 1342 3124 4321
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema carioci:
#include <fstream>
#define DIM 102
using namespace std;
int m[DIM][DIM];
int t, a, b, i, j, pare;
inline int cod(int n, int e, int s, int v) {
return n * 1000 + e * 100 + s * 10 + v;
}
int main () {
ifstream fin ("carioci.in");
ofstream fout("carioci.out");
for (fin>>t;t--;) {
fin>>a>>b;
if (a%2 != b%2) {
fout<<0<<"\n";
continue;
}
pare = 0;
if (a%2 == 0 && b%2 == 0) {
pare = 1;
a--;
b--;
}
for (i=1;i<=a;i++)
for (j=1;j<=b;j++) {
if (i%2 == 1 && j%2 == 1)
m[i][j] = cod(1, 2, 3, 4);
if (i%2 == 1 && j%2 == 0)
m[i][j] = cod(1, 4, 3, 2);
if (i%2 == 0 && j%2 == 1)
m[i][j] = cod(3, 2, 1, 4);
if (i%2 == 0 && j%2 == 0)
m[i][j] = cod(3, 4, 1, 2);
}
if (pare) {
a++;
b++;
for (i=1;i<a;i++) {
if (i%2 == 1)
m[i][b] = cod(1, 3, 4, 2);
else
m[i][b] = cod(4, 3, 1, 2);
}
for (i=1;i<b;i++) {
if (i%2 == 1)
m[a][i] = cod(3, 1, 2, 4);
else
m[a][i] = cod(3, 4, 2, 1);
}
m[a][b] = cod(4, 3, 2, 1);
}
for (i=1;i<=a;i++) {
for (j=1;j<=b;j++)
fout<<m[i][j]<<" ";
fout<<"\n";
}
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2495 carioci
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2495 carioci de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!