fork download
  1. // POH Vol.2
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <algorithm>
  6. #include <climits>
  7. using namespace std;
  8.  
  9. int main(int argc, char** argv) {
  10. const int MAX_SIZE = 300;
  11. int h, w; // h = 画面縦区画数、w = 画面横区画数
  12. cin >> h >> w;
  13. cin.ignore(); //改行文字を1文字読み飛ばす
  14.  
  15. // vv[y][x] = 左から数えた連続した空きの数(空いてないマスは0)
  16. vector<vector<int> > vv(h, vector<int>(w, 0));
  17. // ans[s-1][t-1] = 縦s横tのウィジットの配置可能数
  18. vector<vector<int> > ans(MAX_SIZE, vector<int>(MAX_SIZE, 0));
  19. for(int y=0; y<h; ++y) {
  20. string str;
  21. getline(cin, str);
  22. int count = 0;
  23. for(int x=0; x<w; ++x) {
  24. if(str[x] == '1') {
  25. count = 0;
  26. continue;
  27. }
  28. ++count;
  29. vv[y][x] = count;
  30. int dx = INT_MAX;
  31. for(int dy=0; y-dy>=0; ++dy) {
  32. dx = std::min(dx, vv[y-dy][x]);
  33. for(int t=dx-1; t>=0; --t) {
  34. ++ans[dy][t];
  35. }
  36. }
  37. }
  38. }
  39. int n, s, t; //n=ウィジットの数、s=縦、t=横
  40. cin >> n;
  41. for(int i=0; i<n; ++i) {
  42. cin >> s >> t;
  43. cout << ans[s-1][t-1] << endl;
  44. }
  45. return 0;
  46. }
  47.  
  48.  
Success #stdin #stdout 0s 3436KB
stdin
5 5
00000
00100
00010
10001
10000
3
2 2
1 1
3 2
stdout
6
20
2