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 dart:convert
引用 mport 'dart:convert'; JSON 解码(JSON String->Object) // NOTE: Be sure to use double quotes (&quo ...
- adb shell 操作sqlite数据库
程序中数据库文件路径在/data/data/<package name>/databases/ adb shell 进入adb命令行 ls 列出当前文件夹下所有文件 假设有一个名为a ...
- javascript的异步编程解决方案收集
缘起 没理解js异步的同学看下面的例子: for (var i = 0; i < 5; i++) { //模拟一个异步操作 setTimeout(() => { console.log(i ...
- Android性能优化系列之APK终极瘦身策略
第1条:使用一套资源 这是最基本的一条规则,但非常重要. 对于绝大对数APP来说,只需要取一套设计图就足够了.鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录. 相对于多套资源,只使用7 ...
- C#中获取数组中相加和最接近或等于(<=)给定值的算法
, ,,,,,,,,, }; List<List<int>> mylist = new List<List<int>>(); int length = ...
- 使用 Azure 门户创建 Windows 虚拟机
可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...
- .Net 环境
更多系统版本下载:https://www.microsoft.com/net/download VSCode :https://code.visualstudio.com/
- fedora 中从命令行中直接打开资源管理器
windows 中 使用 start . 可以实现 macos 中 使用 open . 可以实现 linux 中 可以使用 nautilus . 可以实现 了解nautilus 详细的使用说明,可以 ...
- python基础学习13----生成器&迭代器
生成器是属于迭代器,但迭代器不只是生成器 首先是一个简单的生成器 def gener(): print(1) yield 1 print(2) yield 2 print(3) yield 3 g=g ...
- PHP 与 YAML
PHP 与 YAML 这一段时间都没有写blog,并不是因为事情多,而是自己变懒了.看到新技术也不愿意深入思考其背后的原理,学习C++语言了近一个多月,由于学习方法有问题,并没有什么项目可以练手.靠每 ...