貪心::poj1328 radar installation poj2109 Power of Cryptography poj2586 Y2K Accounting Bug

本文主要是介绍貪心::poj1328 radar installation poj2109 Power of Cryptography poj2586 Y2K Accounting Bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

貪心,就是步步為贏。

這是ACM知識表里基礎算法中的貪心部分,屬於水題範疇。

1. poj1328 radar installation

題目:照抄了。

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.
We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates.

分析:根據d計算出每個島在x軸上的取值範圍(用區間表示)。按左端點對區間從小到大進行排序。先令第一個雷達在第一個區間的右端點,(畫個圖就清楚了),然後順序掃描剩下的各個區間,如果下一個區間的左端點大於當前雷達位置,則要增加雷達在下一個區間的右端點,如果雷達位置在下一個區間[p[i].l,p[i].r]裡面,則令雷達位置右移到p[i].r,此時不用增加雷達而能覆蓋下一個島!這是Greedy的算法。

貌似所有的math.h中的算法都是double的~~

時間複雜度為O(nlgn)為sort的快排!

 

#include "stdafx.h"      // 280K 16MS 
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
typedef struct{
double l, r;
}interval; // 区间
bool cmp(interval a,interval b){return a.l<=b.l;}
int _tmain(int argc, _TCHAR* argv[])
{ 
int n, d, i, x, y, cnt = 1;
double pre; 
interval p[1000]; 
while(1){ 
cin>>n>>d; 
if(n == 0 && d == 0) break; 
bool no = 0; 
for(i = 0; i < n; i++){  
cin>>x>>y; 
if(d >= y && !no){
p[i].l = double(x) - sqrt(double(d * d - y * y)); 
p[i].r = double(x) + sqrt(double(d * d - y * y));
}  
else
no = 1;       //不知為何,在這裡break的話就不行!
} 
if(no){  
cout<<"Case "<<cnt++<<": -1"<<endl; 
continue; 
} 
sort(p,p+n,cmp);
int ans = 1; 
pre = p[0].r; 
for(i = 1; i < n; i++){  
if(p[i].l > pre){   
ans++;   
pre = p[i].r;
}  
else if(p[i].r <= pre) 
pre = p[i].r; 
}  
cout<<"Case "<<cnt++<<": "<<ans<<endl;;
} 
return 0;
}

2.  poj2109 Power of Cryptography

題目:已知整數n和p,求整數k使得k..^n=p成立。

分析:雖說是貪心的目的,但稍微想一下就知道,直接開根號就行了,用double的精度是足夠的。math.h中的double pow(double,double)真是強大。

時間複雜度:就看pow函數了,不知道它的原理,應該是牛頓迭代法吧~

#include "stdafx.h"
#include <iostream>    // 280K 0MS 
#include <math.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double n,p;  //注意double的取值範圍
while(cin>>n>>p){
cout<<pow(p,1/n)<<endl;
}
return 0;
}


3. poj2586 Y2K Accounting Bug

題目:巨難懂!!一家奇怪的公司每個月要么盈利s要么盈利d。公司是每連續5個月結算一次,這樣一年就有8次結算,都是虧的。問公司能否盈利,若能求最大盈利,否則輸出Deficit.

分析:也就是對s和d組成的長度為12的序列進行判斷,因為每次結算都是虧的,所以只有五種情況(盈利最大情形)!

時間複雜度O(n)

#include "stdafx.h"
#include <iostream>    //256K 16MS 
using namespace std;
int benif(int s, int d){
if(4*s-d<0) return 10*s-2*d;   //ssssdssssdss
if(3*s-2*d<0) return 8*s-4*d;  //sssddsssddss
if(2*s-3*d<0) return 6*s-6*d;  //ssdddssdddss
if(s-4*d<0) return 3*s-9*d;    //sddddsddddsd
return -1;    //dddddddddddd
}
int _tmain(int argc, _TCHAR* argv[])
{
int s,d;
while(cin>>s>>d){
if(benif(s,d)>=0) cout<<benif(s,d)<<endl;
else cout<<"Deficit" << endl;
}
return 0;
}



 

这篇关于貪心::poj1328 radar installation poj2109 Power of Cryptography poj2586 Y2K Accounting Bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/889938

相关文章

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

Keysight U8031A DC power supply

Keysight U8031A DC power supply 文章目录 Keysight U8031A DC power supply前言电容充电⽰意图一、恒定电压操作二、恒定电流操作三、5v操作四、跟踪模式操作五、存储器操作六、对过电压保护编程七、对过电流保护编程八、锁键操作 前言 U8031A Power Supply 是一款具备前面板编程能力的三路输出电源。通过使

JavaBug系列-解决SpringBoot返回Xml结构的问题

JavaBug系列之SpringBoot返回Xml结构的问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 作者:Java医生 教学: Java企业项目辅导,专注于辅导新入职员工,解决各种问题! V:study_51ctofx 一、关于错误信息 如图,SpringBoot请求返回Xml格式信息 通过以上信息分析,

JavaBug系列- Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class load

JavaBug系列之Mysql驱动问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 Java/一对一零基础辅导/企业项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 V:study_51ctofx 一、关于错误信息 APPLICATION FAILED TO START Description: Fai

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考:又报gyp ERR!为什么有那么多人被node-sass 坑过? 主要有如下三方面错误,请自查: 1.node,npm版本需与node-sass版本匹配,像node-sass(^4.14.1)就得node 14.x版本才可以,node 16不行 gyp ERR! build error15 gyp ERR! stack Error: `

排查 MyBatis XML 配置中的 IF 语句与传值名称不匹配的 Bug

文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 前言,在改一个bug得时候发现一个有意思得问题,就是mybatis得xml中if判断得问题,传值名字不匹配依旧可以进行判断,如下图 传值userName,但是有意思得事情出现了,进了if,并且没有报错,尝试了两次都是这

彻底解决魅族手机无法彻底卸载应用的bug

使用Flyme系统的同学可能会遇到一个问题: 卸载了某些软件(例如通过开发者模式调试安装的应用)后,实际这个应用还残留在系统,当你用低版本或者其他签名的apk覆盖安装的时候会提示“安装失败”,要求你卸载后重新安装。 可是无论你从应用列表寻找还是清理垃圾,都根本找不到这个应用。 闹鬼?这个bug一直伴随着flyme,可怜工程师们竟然一个都没发现。 今天笔者教大家一招解决这个问题。

PrimeTime low power-SMVA分析(4)

1.6使用示例 以下使用示例展示了SMVA流程: - 所有电压条件下的SMVA分析 - 特定DVFS约束下的SMVA分析 在以下脚本示例中,红色突出显示的文本显示了在SMVA流程中使用的命令、命令选项和变量。这些功能只有在将timing_enable_cross_voltage_domain_analysis变量设置为true时才能使用。 1.6.1所有电压条件下的SMVA分析 要对多

今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致Map<String,String> dataMap = new HashMap<String,String>();dataMap.put("username", "张三");dataMap.