superman

聚精会神搞建设 一心一意谋发展
posts - 190, comments - 17, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2009年6月4日

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int min(int a, int b, int c)
 6 {
 7     return min(a, min(b, c));
 8 }
 9 
10 int n;
11 int f[255][255];
12 bool map[255][255];
13 
14 int main()
15 {
16     freopen("range.in""r", stdin);
17     freopen("range.out""w", stdout);
18 
19     cin >> n;
20     for (int i = 0; i < n; i++)
21     for (int j = 0; j < n; j++)
22     {
23         char c;
24         cin >> c;
25         map[i][j] = (c == '0' ? false : true);
26     }
27 
28     for (int i = 0; i < n; i++)
29     for (int j = 0; j < n; j++)
30         if (map[i][j])
31         {
32             f[i][j] = 1;
33 
34             int t = 0;
35             if (i - 1 >= 0 && map[i - 1][j] &&
36                 j - 1 >= 0 && map[i][j - 1&& map[i - 1][j - 1])
37                 t = min(f[i - 1][j], f[i][j - 1], f[i - 1][j - 1]);
38 
39             f[i][j] >?= t + 1;
40         }
41 
42     int cnt[255= { 0 };
43     for (int i = 0; i < n; i++)
44     for (int j = 0; j < n; j++)
45         if (f[i][j] >= 2)
46             for (int k = 2; k <= f[i][j]; k++)
47                 cnt[k]++;
48 
49     for (int i = 2; i <= 250; i++)
50         if (cnt[i])
51             cout << i << ' ' << cnt[i] << endl;
52 
53     return 0;
54 }
55 

posted @ 2009-06-04 14:30 superman 阅读(154) | 评论 (0)编辑 收藏

  1 #include <queue>
  2 #include <iostream>
  3 
  4 using namespace std;
  5 
  6 struct point {
  7     int x, y;
  8     point operator+(const point &p) const {
  9         point np = { x + p.x, y + p.y };
 10         return np;
 11     }
 12 }   ;
 13 
 14 int r, c, knightsNum;
 15 point king, knights[30 * 26];
 16 
 17 const point kinghtDir[8= {
 18     {-2+1}, {-1+2}, {+1+2}, {+2+1},
 19     {+2-1}, {+1-2}, {-1-2}, {-2-1}
 20 }   ;
 21 
 22 inline bool inside(const point &p) {
 23     return p.x >= 0 && p.x < r && p.y >= 0 && p.y < c;
 24 }
 25 
 26 int dist[30][26][30][26];
 27 void spfa(const point &s)
 28 {
 29     for (int i = 0; i < r; i++)
 30     for (int j = 0; j < c; j++)
 31         dist[s.x][s.y][i][j] = INT_MAX;
 32     dist[s.x][s.y][s.x][s.y] = 0;
 33 
 34     queue<point> q;
 35     q.push(s);
 36 
 37     point cp;   //current point
 38     point np;   //next point
 39     while (q.empty() == false)
 40     {
 41         cp = q.front(); q.pop();
 42         for (int i = 0; i < 8; i++)
 43         {
 44             np = cp + kinghtDir[i];
 45             if (inside(np) && dist[s.x][s.y][cp.x][cp.y] + 1 < dist[s.x][s.y][np.x][np.y])
 46             {
 47                 dist[s.x][s.y][np.x][np.y] = dist[s.x][s.y][cp.x][cp.y] + 1;
 48                 q.push(np);
 49             }
 50         }
 51     }
 52 }
 53 
 5