-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy path1015E1. Stars Drawing (Easy Edition).cpp
76 lines (65 loc) · 1.37 KB
/
1015E1. Stars Drawing (Easy Edition).cpp
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
Idea:
- Greedy.
- Start from each '*' and try to expand as you can.
*/
#include <bits/stdc++.h>
using namespace std;
struct node {
int x, y, c;
node() {}
node(int x, int y, int c) :
x(x), y(y), c(c) {}
};
int n, m, ii[4], jj[4];
bool vis[101][101];
char g[101][101];
vector<node> sol;
bool check() {
for(int i = 0; i < 4; ++i)
if(ii[i] < 0 || ii[i] >= n || jj[i] < 0 || jj[i] >= m || g[ii[i]][jj[i]] != '*')
return false;
return true;
}
int can(int i, int j) {
int c = 0;
if(g[i][j] != '*')
return c;
ii[0] = i + 1, jj[0] = j;
ii[1] = i - 1, jj[1] = j;
ii[2] = i, jj[2] = j + 1;
ii[3] = i, jj[3] = j - 1;
while(check()) {
++c;
for(int k = 0; k < 4; ++k)
vis[ii[k]][jj[k]] = true;
++ii[0];
--ii[1];
++jj[2];
--jj[3];
}
if(c > 0)
vis[i][j] = true;
return c;
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 0; i < n; ++i)
scanf("%s", g[i]);
for(int i = 0; i < n; ++i)
for(int j = 0, cur; j < m; ++j) {
cur = can(i, j);
if(cur > 0)
sol.push_back(node(i, j, cur));
}
for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j)
if(g[i][j] == '*' && !vis[i][j]) {
puts("-1");
return 0;
}
printf("%d\n", int(sol.size()));
for(int i = 0; i < sol.size(); ++i)
printf("%d %d %d\n", sol[i].x + 1, sol[i].y + 1, sol[i].c);
return 0;
}