# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1094153 | ramzialoulou | Tetris (COCI17_tetris) | C++17 | 1 ms | 456 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#ifdef Ramzi
#include "debug.h"
#else
#define debug(...)
#endif
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<string> s(n);
for (int i = 0; i < n; i++) {
cin >> s[i];
}
auto safe = [&](int i, int j) -> int {
return (i >= 0 && i < n && j >= 0 && j < m);
};
auto f1 = [&](int x, int y) -> bool {
vector<int> dx = {0, 1, 1};
vector<int> dy = {1, 1, 0};
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
return 0;
}
}
return 1;
};
auto f2 = [&](int x, int y) -> int {
bool ret = true, ret2;
for (int i = 1; i < 4; i++) {
if (!safe(x, y + i) || s[x][y + i] != s[x][y]) {
ret = false;
}
if (!safe(x + i, y) || s[x + i][y] != s[x][y]) {
ret2 = false;
}
}
return (ret || ret2 ? 1 : 0);
};
auto f3 = [&](int x, int y) -> bool {
vector<int> dx = {0, 1, 1};
vector<int> dy = {1, 0, -1};
bool ret = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret = false;
}
}
dx = {1, 1, 2};
dy = {0, 1, 1};
bool ret2 = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret2 = false;
}
}
return (ret || ret2 ? 1 : 0);
};
auto f4 = [&](int x, int y) {
vector<int> dx = {0, 1, 1};
vector<int> dy = {1, 1, 2};
bool ret = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret = false;
}
}
dx = {1, 1, 2};
dy = {0, -1, -1};
bool ret2 = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret2 = false;
}
}
return (ret || ret2 ? 1 : 0);
};
auto f5 = [&](int x, int y) -> int {
vector<int> dx = {1, 1, 1};
vector<int> dy = {-1, 0, 1};
bool ret = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret = false;
}
}
dx = {0, 0, 1};
dy = {1, 2, 1};
bool ret2 = true;
for (int i = 0; i < 3; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (!safe(nx, ny) || s[nx][ny] != s[x][y]) {
ret2 = false;
}
}
return (ret || ret2 ? 1 : 0);
};
vector<int> cnt(5);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (s[i][j] != '.') {
cnt[0] += f1(i, j);
cnt[1] += f2(i, j);
cnt[2] += f3(i, j);
cnt[3] += f4(i, j);
cnt[4] += f5(i, j);
}
}
}
for (int i = 0; i < 5; i++) {
cout << cnt[i] << "\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |