Alex are o pasiune pentru trasul la țintă. Jucându-se cu numere, visează la o nouă tablă pentru pasiunea sa. Tabla visată este de formă pătrată cu n
linii și n
coloane, iar numerele, de la 1
la n * n
, le poziționează în țintă, ca în imaginea alăturată.
Alex, fiind un foarte bun țintaș, nu nimerește niciodată pe pătrățelele de pe contur. Când țintește o pătrățică din interior, el obține drept punctaj suma valorilor din cele opt pătrățele vecine.
Cerinţă
Cunoscând n numărul de linii și de coloane ale țintei:
a. Ajutați-l pe Alex să construiască ținta visată.
Alex are o pasiune pentru trasul la țintă. Jucându-se cu numere, visează la o nouă tablă pentru pasiunea sa. Tabla visată este de formă pătrată cu n
linii și n
coloane, iar numerele, de la 1
la n * n
, le poziționează în țintă, ca în imaginea alăturată.
Alex, fiind un foarte bun țintaș, nu nimerește niciodată pe pătrățelele de pe contur. Când țintește o pătrățică din interior, el obține drept punctaj suma valorilor din cele opt pătrățele vecine.
Cerinţă
Cunoscând n numărul de linii și de coloane ale țintei:
a. Ajutați-l pe Alex să construiască ținta visată.
b. Câte punctaje distincte poate să obțină Alex dacă are o singură săgeată?
c. Afișați punctajele distincte găsite.
Date de intrare
Fișierul de intrare tinta.in
conține pe prima linie numărul natural n
, indicând numărul de linii și de coloane ale țintei.
Date de ieșire
Fișierul de ieșire tinta.out
va conține pe primele n
linii câte n
numere naturale, separate prin câte un spațiu, reprezentând numerele de pe cele n
linii ale țintei. Pe linia n+1
se va afișa un singur număr p
reprezentând numărul de punctaje distincte. Pe linia n+2
se vor afișa p
numere naturale separate prin câte un spațiu și ordonate strict crescător, reprezentând punctajele distincte.
Restricții și precizări
3 ≤ n ≤ 1000
- Pentru prima cerinţă afişată corect se va acorda 40% din punctaj; pentru a doua cerință se va acorda 20% din punctaj; pentru cea de-a treia cerință se va acorda 40% din punctaj.
Exemplul 1
tinta.in
3
tinta.out
1 2 6 3 5 7 4 8 9 1 40
Explicație
Alex poate ținti doar în pătrățelul interior (cel pe care avem 5
), deci obține un singur punctaj, iar suma este 40
.
Exemplul 2
tinta.in
4
tinta.out
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16 3 45 68 91
Explicație
Alex poate ținti doar pătrăţelele 5
, 8
, 9
sau 12
.
#include <bits/stdc++.h> using namespace std; ifstream cin("tinta.in"); ofstream cout("tinta.out"); int a[1001][1001] , b[1001][1001] , n , i ,j , x , l , c; int main() { cin >> n; x = 1; for(i = 1 ; i <= n ; i++) if(i % 2 == 0) { l = 1 , c = i; for(j = 1 ; j <= i ; j++) { a[l][c] = x; x++ , l++ , c--; } } else { l = i , c = 1; for(j = 1 ; j <= i ; j++) { a[l][c] = x; x++ , l-- , c++; } } if(n % 2 == 0) for(i = 2 ; i <= n ; i++) { if(i % 2 == 0) l = n , c = i; else l = i , c = n; for(j = 1 ; j <= n - i + 1 ; j++) { a[l][c] = x; x++; if(i%2==0) l-- , c++; else l++ , c--; } } else for(i = 2 ; i <= n ; i++) { if (i % 2 == 0) l = i , c = n ; else l = n , c =i ; for(j = 1 ; j <= n - i +1 ; j++) { a[l][c] = x; x++; if(i % 2 == 0) l++ , c--; else l-- , c++; } } for(i = 1 ; i <= n ; i++) { for (j = 1 ; j <= n ; j++) cout<<a[i][j]<<" "; cout<<'\n'; } for(i = 2 ; i < n ; i++) for(j = 2 ; j< n ; j++) b[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1]+a[i][j-1]+a[i][j+1]; cout << n*2-5<<'\n'; for (j = 2 ; j <= n - 2 ; j++) cout << b[2][j]<<" "; for(j = 2 ; j <= n - 1 ; j++) cout << b[n-1][j]<<" "; return 0; }