POJ 1328

简介: 1 2 //坐标精度是int 3 /* 4 圆心位于 5 */ 6 #include 7 #include 8 #include 9 #include 10 using namespace std; 11 12 const int N =...
 1  
 2 //坐标精度是int
 3 /*
 4 圆心位于 
 5 */
 6 #include <iostream>
 7 #include <cstdlib>
 8 #include <cstring>
 9 #include <cmath>
10 using namespace std; 
11 
12 const int N = 1005;
13 typedef struct Part 
14 {
15     int a, b;
16 };
17 Part q[N];
18 
19 typedef struct Node 
20 {
21     int left, right;
22 };
23 Node node[N];
24 
25 int cmp(const void *a, const void *b)//只能返回int
26 {
27     Part *c = (Part *)a;
28     Part *d = (Part *)b;
29     if(c->b == d->b)
30         return c->a < d->a;
31     return c->b > d->b;
32 }
33 
34 int main()
35 {
36     int i,j,k;
37     int n, d;//d为半径
38     int num = 1;
39     while(cin>>n>>d, n&&d)
40     {
41         /*
42         d<0时输出无解,却忘了发现d<0后,后面还有N行输入要“干”掉.
43         */
44         if(d<=0)
45         {
46             int a, b;
47             for(i=1; i<=n; i++)
48                 cin>>a>>b;
49             cout<<"Case "<<num++<<": "<<-1<<endl;
50             continue;
51         }
52         int cnt = 1;
53         bool flag;
54         for(i=1; i<=n; i++)
55         {
56             cin>>node[i].left>>node[i].right;
57             if(abs(node[i].right)>d)
58             {
59                 flag = true;
60             }
61         }
62         if(flag)
63         {
64             cout<<"Case "<<num++<<": "<<-1<<endl;
65             continue;
66         }
67         
68         for(i=1; i<=n; i++)
69         {//圆心在下面的区间内那么就可以包括那个点 
70             q[i].a = node[i].left - sqrt(1.0*(d*d - node[i].right*node[i].right));
71             q[i].b = node[i].left + sqrt(1.0*(d*d - node[i].right*node[i].right));        
72         }
73         
74         //下面是区间选点问题 
75         qsort(q+1, n, sizeof(Part), cmp);
76         int end = q[1].b;
77         for(i=2; i<=n; i++)
78         {
79             if(end<q[i].a)
80             {
81                 end = q[i].b;
82                 cnt++;
83             }
84         
85         }
86         cout<<"Case "<<num++<<": "<<cnt<<endl; 
87     }
88     return 0; 
89 }
90 
91 
92     
93         

 

目录
相关文章
|
测试技术
POJ 1001
此题用最朴素的思路实现即可,需模拟加法器,乘法器,最烦人的地方是特殊情形,如末位是小数点(12.^2=144,取小数点),整数末位是0(100^2=10000),0次幂,测试用例可能超出题目中说的范围,可能包含0次幂(100.0^0=0, 0.10^1=0.1)。
753 0
|
测试技术
poj-1218 THE DRUNK JAILER 喝醉的狱卒
自己去看看原题; 题目大意: 就是一个狱卒喝醉了,他第一趟吧所有的监狱都带开,第二趟把能把二整除的监狱关闭,第三趟操作能把三整除的监狱; 求最后能逃跑的罪犯数 输入第一个数是代表 测试数据组数 每个数据代表狱卒来回的次数 当作开关问题即可 #include using names...
1008 0
|
消息中间件 人工智能 JavaScript
|
人工智能 机器学习/深度学习
poj 2337 Catenyms
点击打开链接poj2377 思路: 并查集+排序+欧拉道路 分析: 1 题目要求的是,是否可以组成欧拉道路并且输出字典序最小的方案 2 和别的题目不一样的是这一题的输出是最小的字典序,所以这里面是一个难点,那么我们应该怎么做呢?其实我们只要对输入的n个单词进行从小到达排序即可 3 然后我们先去判断该有向图是否是单连通的 4 我们去判断是否最多只有两个点的入度不等与出度,其余所有点的出度等于入度 5 如果都满足的话,进行dfs。
857 0
|
人工智能