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
|