关闭

poj 1328 && uva 1193 && la 2519

116人阅读 评论(0) 收藏 举报
分类:

题目概述

在直角坐标系中,x轴为海岸线,其上方为海,海上有N个小岛位于x,y,现要在海岸线建雷达站,所有雷达覆盖范围都是R,问所有岛可否被雷达覆盖,若可,求最少雷达数
海岛不会在陆地上

时限

1000ms/3000ms

输入

第一行两个整数N,R,其后N行,每行两个整数x,y,输入到N=R=0为止

限制

1<=N<=1000

输出

每行一个字符串
Case A: B
其中A为数据序数,从1开始,若有岛无法被雷达覆盖,B=-1,否则B为所求雷达数

样例输入

3 2
1 2
-3 1
2 1

1 2
0 2

2 2
1 1
2 2

0 0

样例输出

Case 1: 2
Case 2: 1
Case 3: 1

讨论

贪心,首先排序是必不可少的,但一开始很容易当成poj 3069那样每次都把圆尽可能右移,但是如样例3,这样会导致移过了而多算圆,因而需要一点改进,遇到一个点,先按照上面的方法求出圆心,之后对于所有在圆心左侧的点,如果点在圆外,则将圆心左移,当然,这里已经排除了无解的情况

题解状态

192K,16MS,C++,1047B

题解代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 1004
#define memset0(a) memset(a,0,sizeof(a))

struct Pt//点的结构
{
    int x, y;
    bool operator<(const Pt &b)const
    {
        return x != b.x ? x < b.x : y < b.y;
    }
}pts[MAXN];
int N, R;//点总数 圆半径
int fun()
{
    bool f = 0;//是否存在完全不可能被圆覆盖到的点
    for (int p = 0; p < N; p++) {
        scanf("%d%d", &pts[p].x, &pts[p].y);//input
        if (pts[p].y > R)//即到海岸线距离大于圆半径
            f = 1;
    }
    if (f)
        return -1;
    sort(pts, pts + N);
    int cnt = 0;//最少圆个数
    for (int p = 0; p < N; p++, cnt++) {//枚举一个未被覆盖的点
        double x = sqrt(double(R*R) - (pts[p].y*pts[p].y));//求出圆心横坐标与这个点横坐标差值
        int i = p + 1;
        for (; i < N&&pts[i].x <= x + pts[p].x; i++)//枚举在圆心左侧的点
            x = min(x, sqrt(double(R*R) - (pts[i].y*pts[i].y)) + pts[i].x - pts[p].x);//调整圆心位置使得这些点都能被圆覆盖
        x += pts[p].x;//现在表示圆心横坐标了
        for (; i < N && (pts[i].x - x)*(pts[i].x - x) + pts[i].y*pts[i].y <= R*R; i++);//数出最多可以覆盖多少在圆心右侧的点
        p = i - 1;//重新选取一个未被覆盖的点 由于p++的存在 因而要-1
    }
    return cnt;
}
int main(void)
{
    //freopen("vs_cin.txt", "r", stdin);
    //freopen("vs_cout.txt", "w", stdout);

    int times = 0;
    while (~scanf("%d%d", &N, &R) && (N || R))//input
        printf("Case %d: %d\n", ++times, fun());//output
}

EOF

0
0
查看评论

UVA 1328 - Period (KMP)

UVA 1328 - Period 题目链接 题意:给定一个字符串,求出有几个位置的前缀串是由个数大于1的串循环得到的,求出位置和循环次数 思路:利用kmp的next数组的性质,i - next[i]就是循环长度,然后判断一下是不是正好是倍数即可 代码: #includ...
  • u011217342
  • u011217342
  • 2014-08-01 11:04
  • 1301

POJ:1328 Radar Installation 思路以及测试数据

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 76845   Accepted: 1721...
  • DeepMindMan
  • DeepMindMan
  • 2016-08-22 17:16
  • 1769

UVA 1328 Period(KMP:最短循环节)

UVA 1328 Period(KMP:最短循环节) 题意:对于一个字符串,求它的所有前缀的最短循环节.比如对于前i(i>=2)个字符构成的子串,该串是由某个更小的子串重复k(k>=2)次形成的.由于要求最短循环节,所以对于同一前缀来说,k尽量大. 分析:详解见刘汝佳:训练指南P21...
  • u013480600
  • u013480600
  • 2014-04-04 10:54
  • 939

(一般)POJ-1328 区间贪心,几何

题目大意:以x轴为分界,y>0部分为海,y 题目链接:点击打开链接 分析:这里首先说一下我一开始的思路(当然是错的),因为发现许多人一开始跟我的想法一致,所以在这里纠正这个错误。起先我是这么做的: 对于一个雷达放置点的y坐标,肯定是越往上越好,所以可以断定所以雷达都放置在x轴上(当...
  • AC_hell
  • AC_hell
  • 2016-04-26 15:49
  • 688

POJ 1193 内存分配

数据结构: 内存用双向链表模拟,便于内存块的拆分和合并; 进程表用小根堆表示,以进程的结束时间为排序依据; 等待队列就是用先进先出的队列结构了。 算法描述: 设任一时刻当前需要被处理的进程为p1,进程表堆顶进程为p2,等待队列队头进程为p3,队列保存过的进程总数为count,所有进程运行完毕的时间为...
  • wyb19910821
  • wyb19910821
  • 2013-11-24 17:33
  • 583

poj1328Radar Installation(贪心+区间选择)

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80210   Accepted: 17922 Descripti...
  • luckcircle
  • luckcircle
  • 2016-12-13 17:00
  • 1131

UVa 1328 Period (KMP&失配函数的理解)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=505&page=show_problem&problem=4074 令失配函数为f[i],由失配函数的定义...
  • synapse7
  • synapse7
  • 2014-03-07 22:54
  • 853

uva 1328 - Period (周期串的判断 kmp)

题意:给一个长为n的字符串,问字符串的前缀是不是周期串,如果是周期串,输出前缀的最后一个字母的位置和最短周期 思路:kmp字符串匹配的性质运用。 对于前i个字符,如果f[i]不等于零,说明在此字符串的前缀中,有一部分[0,f[i]]和本字符串[i-f[i],i]的这一部分是相同的。如果这i个字符...
  • u013382399
  • u013382399
  • 2015-04-02 16:54
  • 821

UVa 1328 Period

KMP
  • SilverNebula
  • SilverNebula
  • 2016-05-09 23:47
  • 267

UVA - 1328 Period KMP算法

KMP算法求循环节 F 数组存的是前一个循环节的位置,只要判断前一个是不是一个循环节就好了 #include #include #include #include using namespace std; const int maxn = 1000000 + 7, INF = 0...
  • xiang_6
  • xiang_6
  • 2017-08-29 22:16
  • 102
    个人资料
    • 访问:37433次
    • 积分:2359
    • 等级:
    • 排名:第18624名
    • 原创:209篇
    • 转载:0篇
    • 译文:0篇
    • 评论:8条
    最新评论