POJ 1328&&2109&&2586
这次是贪心(水笔贪心)专题。
先看1328,一道经典的导弹拦截(或者是打击?不懂背景)。
大意是说在一个坐标系中有一些点(或是导弹),你要在x轴上建一些东西,它们可以拦截半径为d的圆范围中的点。问最少修建的个数,不可能输出-1。
经典问题了哈,主要是把二维的转成一维。
对于每个要拦截的点以d为半径画一个圆。会与x轴有0/1/2个交点。如果没有交点直接退出-1即可,一个交点也可以看成两个交点重合。
这样我们就得到了一些线段,然后就是区间覆盖了。贪心走一遍即可。
两个端点的坐标勾股定理就好了:x±sqrt(d^2-y^2)
注意检查你的输出,我因为把Case 打成了case WA了N次(......)。
CODE
#include<cstdio>
#include<math.h>
#include<algorithm>
using namespace std;
const int N=;
struct data
{
double x,y;
}a[N];
int n,d,i,kinds,x,y;
inline void read(int &x)
{
x=; char ch=getchar(); int flag=;
while (ch<''||ch>'') { if (ch=='-') flag=-; ch=getchar(); }
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
x*=flag;
}
inline int comp(data a,data b)
{
return a.x<b.x;
}
int main()
{
for (kinds=;;++kinds)
{
read(n); read(d);
if (!n&&!d) break;
bool flag=;
for (i=;i<=n;++i)
{
read(x); read(y);
if (y>d) flag=;
a[i].x=x-sqrt(1.0*d*d-1.0*y*y); a[i].y=x+sqrt(1.0*d*d-1.0*y*y);
}
if (flag) { printf("Case %d: -1\n",kinds); continue; }
sort(a+,a+n+,comp);
int ans=;
double last=a[].y;
for (i=;i<=n;++i)
if (a[i].x>last) ++ans,last=a[i].y; else if (a[i].y<last) last=a[i].y;
printf("Case %d: %d\n",kinds,ans);
}
return ;
}
2109:这是个智障题。
有一个等式k^n=p,现在给出n,p,让你求出k
这不是直接把p开n次方即可的事情吗?和贪心有何瓜葛?
double的精度在这题应该不会炸,开方也不用手写或高精检验,在精度范围内(k在1~1e9之间),所以用pow来做分数次幂就行了。
CODE
#include<cstdio>
#include<cmath>
using namespace std;
double n,p;
int main()
{
while (scanf("%lf%lf",&n,&p)!=EOF) printf("%.0lf\n",pow(p,/n));
return ;
}
2586:一个很简单的贪心题。
题目大意是一个二货公司每个月要么盈利s元,要么亏损d元,但是他们在一年中任意连续的5个月(1~5,2~6……)的盈亏和必须是负的。问你一年中可能盈利吗,可以就输出最大盈利值。
想一下就知道亏损的月份放在最后面最好(可以被多次利用)
所以假定他们12个月都盈利,在进行检查,如果和大于0就从后面开始修改。
CODE
#include<cstdio>
#include<cstring>
using namespace std;
int sum,s,d,i;
bool f[];
inline void check(int a,int b)
{
for(;;)
{
int res=;
for (int i=a;i<=b;++i)
if (f[i]) res+=s; else res-=d;
if (res>=)
{
int i=b;
while (!f[i]&&i>a) --i;
f[i]=;
} else break;
}
}
int main()
{
while (scanf("%d%d",&s,&d)!=EOF)
{
memset(f,true,sizeof(f));
sum=;
for (i=;i<=;++i)
check(i,i+);
for (i=;i<=;++i)
if (f[i]) sum+=s; else sum-=d;
if (sum<) puts("Deficit"); else printf("%d\n",sum);
}
return ;
}
POJ 1328&&2109&&2586的更多相关文章
- 贪心 POJ 1328 Radar Installation
题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...
- POJ 1328 Radar Installation 贪心 A
POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...
- POJ 1328 Radar Installation【贪心】
POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...
- poj 1328 Radar Installation
题目链接:http://poj.org/problem?id=1328 题意:给出海上有n个小岛的坐标,求发出的信号可以覆盖全部小岛的最少的雷达个数.雷达发射信号是以雷达为圆心,d为半径的圆,雷达都在 ...
- poj 1328
http://poj.org/problem?id=1328 题意:题目大概意思就是有一群孤岛,想要用雷达来监视这些岛屿,但雷达的范围是有限的,所以需要多个雷达,题目就是要你解决最少需要几个雷达,注意 ...
- POJ 1328 Radar Installation 贪心 难度:1
http://poj.org/problem?id=1328 思路: 1.肯定y大于d的情况下答案为-1,其他时候必定有非负整数解 2.x,y同时考虑是较为麻烦的,想办法消掉y,用d^2-y^2获得圆 ...
- Poj 1328 / OpenJudge 1328 Radar Installation
1.Link: http://poj.org/problem?id=1328 http://bailian.openjudge.cn/practice/1328/ 2.Content: Radar I ...
- poj 1328 Radar Installation(贪心)
题目:http://poj.org/problem?id=1328 题意:建立一个平面坐标,x轴上方是海洋,x轴下方是陆地.在海上有n个小岛,每个小岛看做一个点.然后在x轴上有雷达,雷达能覆盖的范 ...
- poj 1328 Radar Installation (简单的贪心)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42925 Accepted: 94 ...
随机推荐
- flutter 异步async、await和Future的使用技巧
由于前面的HTTP请求用到了异步操作,不少小伙伴都被这个问题折了下腰,今天总结分享下实战成果.Dart是一个单线程的语言,遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞, ...
- JS截取字符串方法实例
// JS截取字符串可使用 substring()或者slice() // // 函数:substring() // 定义:substring(start,end)表示从start到end之间的字符串 ...
- JUnit手动设计测试方法以及与Randoop的自动生成测试的比较
手动设计测试 在已有的web project本地目录lib文件夹里导入两个jar文件(版本可不一样):junit-4.12.jar和hamcrest.jar 打开eclipse,导入项目,右击项目选择 ...
- 记一款bug管理系统(bugdone.cn)的开发过程(3) - 永久免费化
BugDone永久免费了! BugDone(bug管理工具)已经发布有一阵子了,自发布以来注册用户量.项目创建量稳步提升,并且得到了很多用户的好评. 在开发BugDone工具之前,我们团队也曾为找不到 ...
- Node路由简单的处理
看过node很多例子,都是将路由直接放到入口文件中处理,使得文件显得很大很乱,特别是当一个项目变大,有上百甚至上千的路由,那该怎么办? 最近在想如何将一个个的路由放到一个单独的模块中处理,比如'/us ...
- Python数据类型之list和tuple
list是一种有序的集合,可以随时添加和删除其中的元素. 用len()函数可以获得list元素的个数. 用索引来访问list中每一个位置的元素,索引是从0开始的.如果要取最后一个元素,除了计算索引位置 ...
- 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序
负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...
- postgresql 获取所有表名、字段名、字段类型、注释
获取表名及注释: select relname as tabname,cast(obj_description(relfilenode,'pg_class') as varchar) as comme ...
- Django之MVC与MTV
MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写 模型 - 视图 - 控制器是一种通常用于开发用户界面的 ...
- Django接收URL问号参数
问题概览: 一开始需求是想通过URL接收参数,但是一直固守通过正则表达式的方式接收参数,即形如(?P<parm>.+)的方式. 后面发现(/?)在http://regex101.com是可 ...