Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <algorithm>
- using namespace std;
- int n, m, q, p;
- int bfs_tab[253][253];
- char t[253][253];
- int sum[253][253];
- //pair <int, int> qq;
- queue < pair<int, int> > Q;
- const int d_x[4] = {-1, 0, 1, 0};
- const int d_y[4] = {0, 1, 0, -1};
- int pow2 (int y)
- {
- int w = 1;
- for (int i = 0; i < y; i++)
- w*=2;
- return w;
- }
- void bfs(int a, int b);
- int main (){
- cin >> n >> m >> q >> p;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- cin >> t[i][j];
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- {
- if (t[i][j] >= 'A' && t[i][j] <= 'Z')
- {
- bfs(i, j);
- /* for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- cout << bfs_tab[i][j] << " ";
- cout << endl;
- }
- cout << endl;*/
- }
- }
- int sol=0;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- if (sum[i][j]>p)
- sol++;
- cout << sol;
- return 0;
- }
- void bfs(int a, int b)
- {
- while (!Q.empty())
- Q.pop();
- for (int i2 = 0; i2 < n; i2++)
- for (int j2 = 0; j2 < m; j2++)
- bfs_tab[i2][j2]=0;
- //bool pot = false;
- //qq=make_pair(a, b);
- int value=q*(t[a][b]-64);
- bfs_tab[a][b]=1;
- sum[a][b]+=value;
- for (Q.push(make_pair(a, b)); !Q.empty(); Q.pop())
- {
- pair <int, int> qq = Q.front();
- if (value/pow2(bfs_tab[qq.first][qq.second])==0)
- break;
- for (int k = 0; k < 4; k++)
- {
- int a1=qq.first+d_x[k];
- int b1=qq.second+d_y[k];
- if (a1 < n && a1 >= 0 && b1 < m && b1 >= 0 && bfs_tab[a1][b1]==0 && t[a1][b1]!='*')
- {
- bfs_tab[a1][b1]=bfs_tab[qq.first][qq.second]+1;
- sum[a1][b1]+=value/pow2(bfs_tab[qq.first][qq.second]);
- Q.push(make_pair(a1, b1));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement