#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <memory.h>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define X first
#define Y second
#define pb push_back
#define mp make_pair
#define ppb pop_back
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vii;
typedef vector<vi> vvi;
FILE *fin = freopen("plates.in", "r", stdin);
FILE *fout = freopen("plates.out", "w", stdout);
char c[1000][30][30];
vl memo[1000][8];
bool fix[1000];
int main() {
int n, m;
cin >> m >> n;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> c[i][j];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
ll hash = 0;
for (int k = 0; k < n; k++)
hash += c[i][j][k] == '1' ? (1LL << k) : 0;
memo[i][0].pb(hash);
}
///////////////////////////
for (int j = 0; j < n; j++) {
ll hash = 0;
for (int k = n - 1; k >= 0; k--)
hash += c[i][j][k] == '1' ? (1LL << k) : 0;
memo[i][1].pb(hash);
}
///////////////////////////////
for (int j = n - 1; j >= 0; j--) {
ll hash = 0;
for (int k = 0; k < n; k++)
hash += c[i][j][k] == '1' ? (1LL << k) : 0;
memo[i][2].pb(hash);
}//////////////////////
for (int j = n - 1; j >= 0; j--) {
ll hash = 0;
for (int k = n - 1; k >= 0; k--)
hash += c[i][j][k] == '1' ? (1LL << k) : 0;
memo[i][3].pb(hash);
}
/////////////////////////////
for (int j = 0; j < n; j++) {
ll hash = 0;
for (int k = 0; k < n; k++)
hash += c[i][k][j] == '1' ? (1LL << k) : 0;
memo[i][4].pb(hash);
}
/////////////////////////
for (int j = 0; j < n; j++) {
ll hash = 0;
for (int k = n - 1; k >= 0; k--)
hash += c[i][k][j] == '1' ? (1LL << k) : 0;
memo[i][5].pb(hash);
}
//////////////////////////
for (int j = n - 1; j >= 0; j--) {
ll hash = 0;
for (int k = 0; k < n; k++)
hash += c[i][k][j] == '1' ? (1LL << k) : 0;
memo[i][6].pb(hash);
}
////////////////////////////
for (int j = n - 1; j >= 0; j--) {
ll hash = 0;
for (int k = n - 1; k >= 0; k--)
hash += c[i][k][j] == '1' ? (1LL << k) : 0;
memo[i][7].pb(hash);
}
}
int ans = 0;
for (int i = 0; i < m; i++) {
if (fix[i])
continue;
ans++;
for (int j = i + 1; j < m; j++) {
if (fix[j])
continue;
for (int k = 0; k < 8; k++) {
bool ok = 1;
for (int q = 0; q < n; q++)
if (memo[i][0][q] != memo[j][k][q]) {
ok = 0;
break;
}
if (ok) {
fix[j] = 1;
break;
}
}
}
}
cout << ans << endl;
return 0;
}
Dixtosa Episode II - Analysis...
Eშისაიდან მოვიდა 3**13?ისე 4 * 52 * 3**13 = 331M+ ...
|
Quick GeOlymp 2013 - ფინალური ეპიზოდი იწყება...
Upsolving ჩაირთო...
|
saba_tavdgiridze GeOlymp 2013 - ფინალური ეპიზოდი იწყება...
აღარ მინდა.:)...
|
saba_tavdgiridze GeOlymp 2013 - ფინალური ეპიზოდი იწყება...
B ამოცანის 17 ტესტს ვერ მიმანიშნებთ?...
|
tornike5 GeOlymp 2013 - ფინალის შესახებ...
ვაპირებდი იგივე მეკითხა მარა მეგონა უეჭველი იქნება...
|
giorgi123 GeOlymp 2013 - ფინალის შესახებ...
მადლობა.შარშან ფინალში ამოცანების ყურებით ვიფარგლე...
|
Elle GeOlymp 2013 - ფინალის შესახებ...
შარშან ფინალს codeblocks-ით წერდით?დავაყენეთ codeb...
|
ამ მომენტისათვის ჩვენ არ შეგვიძლია პირობები ელექტრონული სახით მოგაწოდოთ. იმედი გვაქვს რამდენიმე დღეში საბოლოო შედეგები და ამოცანის პირობები Naec-ზე დაიდება :)
Upsolving-ის ლინკები:
GeOI 2012 III ტური - 8 კლასი
GeOI 2012 III ტური - 9-10 კლასი
GeOI 2012 III ტური - 11-12 კლასები დღე 1
GeOI 2012 III ტური - 11-12 კლასები დღე 2