Submission #00135


ソースコード

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <bits/stdc++.h>
#define endl "\n"
#define INF INT_MAX
using namespace std;
vector<vector<long long>>sco(100,vector<long long>(100,0));
vector< vector<int> > Map(100,vector<int>(100));
int n,m;
void grid_BFS(long long startx,long long starty){
queue<pair<long long,long long>>BFS;
BFS.push(make_pair(startx,starty));
sco[startx][starty] = 1;
while(!BFS.empty()){
long long x = BFS.front().first;
long long y = BFS.front().second;
BFS.pop();
if(x > 0&&sco[x-1][y] == 0&&Map[x-1][y] == Map[x][y]){
BFS.push(make_pair(x-1,y));
sco[x-1][y] = sco[x][y];
}
if(y > 0&&sco[x][y-1] == 0&&Map[x][y-1] == Map[x][y]){
BFS.push(make_pair(x,y-1));
sco[x][y-1] = sco[x][y];
}
if(x < m-1&&sco[x+1][y] == 0&&Map[x+1][y] == Map[x][y]){
BFS.push(make_pair(x+1,y));
sco[x+1][y] = sco[x][y];
}
if(y < n-1&&sco[x][y+1] == 0&&Map[x][y+1] == Map[x][y]){
BFS.push(make_pair(x,y+1));
sco[x][y+1] = sco[x][y];
}
if(x%2 == 1){
if(x > 0&&y > 0&&sco[x-1][y-1] == 0&&Map[x-1][y-1] == Map[x][y]){
BFS.push(make_pair(x-1,y-1));
sco[x-1][y-1] = sco[x][y];
}
if(x < m-1&&y > 0&&sco[x+1][y-1] == 0&&Map[x+1][y-1] == Map[x][y]){
BFS.push(make_pair(x+1,y-1));
sco[x+1][y-1] = sco[x][y];
}
}else{
if(x > 0&&y < n-1&&sco[x-1][y+1] == 0&&Map[x-1][y+1] == Map[x][y]){
BFS.push(make_pair(x-1,y+1));
sco[x-1][y+1] = sco[x][y];
}
if(x < m-1&&y < n-1&&sco[x+1][y+1] == 0&&Map[x+1][y+1] == Map[x][y]){
BFS.push(make_pair(x+1,y+1));
sco[x+1][y+1] = sco[x][y];
}
}
}
}
int ans = 0;
void check(long long x,long long y){
if(sco[x][y] != 0)return;
ans+=6;
if(x > 0&&sco[x-1][y] == 0){
ans--;
}
if(y > 0&&sco[x][y-1] == 0){
ans--;
}
if(x < n-1&&sco[x+1][y] == 0){
ans--;
}
if(y < m-1&&sco[x][y+1] == 0){
ans--;
}
if(x%2 == 1){
if(x > 0&&y > 0&&sco[x-1][y-1] == 0){
ans--;
}
if(x < n-1&&y > 0&&sco[x+1][y-1] == 0){
ans--;
}
}else{
if(x > 0&&y < m-1&&sco[x-1][y+1] == 0){
ans--;
}
if(x < n-1&&y < m-1&&sco[x+1][y+1] == 0){
ans--;
}
}
}
int main(){
#define int long long
cin.tie(nullptr);ios::sync_with_stdio(false);
cin >>m>>n;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
cin >>Map[i][j];
}
}
for(int i = 0;i < n;i++){
if(Map[i][0] == 0)grid_BFS(i,0);
if(Map[i][m-1] == 0)grid_BFS(i,m-1);
}
for(int i = 0;i < m;i++){
if(Map[0][i] == 0)grid_BFS(0,i);
if(Map[n-1][i] == 0)grid_BFS(n-1,i);
}
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
check(i,j);
}
}
cout <<ans<<endl;
}

ステータス

項目 データ
問題 0003 - イルミネーション (Illumination)
ユーザー名 ei2332
投稿日時 2023-11-15 08:22:45
言語 C++17
状態 Accepted
得点 100
ソースコード長 3248 Byte
最大実行時間 32 ms
最大メモリ使用量 732 KB

セット

セット 得点 Cases
1 入力1 20 / 20 *1.txt
2 入力2 20 / 20 *2.txt
3 入力3 20 / 20 *3.txt
4 入力4 20 / 20 *4.txt
5 入力5 20 / 20 *5.txt

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
2012-yo-t5-in1.txt AC 32 ms 732 KB
1
2012-yo-t5-in2.txt AC 18 ms 560 KB
2
2012-yo-t5-in3.txt AC 21 ms 636 KB
3
2012-yo-t5-in4.txt AC 25 ms 716 KB
4
2012-yo-t5-in5.txt AC 22 ms 540 KB
5