[uva] 10167 - Birthday Cake

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=107&page=show_problem&problem=1108

开始和大家一起刷白书的课后题了! 第一道, 枚举题.

 1 #include <cstdio>
 2 #include <utility>
 3 #include <vector>
 4 using namespace std;
 5 
 6 bool solve(vector<pair<int, int> > & v, int n, int i, int j) {
 7     
 8     int lnum = 0, unum = 0;
 9     for (int k = 0; k < 2 * n; ++k) {
10         int s = i * v[k].first + j * v[k].second;
11         if (s > 0) {
12             lnum += 1;
13         } else if (s < 0) {
14             unum += 1;
15         } else {
16             return false;
17         }
18     }
19     if (lnum == unum && lnum == n) {
20         //printf("%d\n", lnum);
21         printf("%d %d\n", i, j);
22         return true;
23     }
24     return false;
25 }
26 
27 int main()
28 {
29     int n = 0;
30     while(true) {
31         scanf("%d", &n);
32         if (n == 0)break;
33         vector<pair<int, int> > v(2 * n);
34         for (int i = 0; i < 2 * n; ++i) {
35             pair<int, int> p;
36             scanf("%d%d", &p.first, &p.second);
37             v[i] = p;
38             //printf("%d, %d\n",  v[i].first, v[i].second);
39         }
40         for (int i = -500; i <= 500; ++i) {
41             int flag = 0;
42             for (int j = -500; j <= 500; ++j) {
43                 if (solve(v, n, i, j)) {
44                     flag = 1;
45                     break;
46                 }
47             }
48             if (flag) break;
49         }
50     }
51     return 0;
52 }

 

posted @ 2013-11-26 02:07  NextLife  阅读(208)  评论(0)    收藏  举报