NYOJ-710(贪心)-题目----------------------------------外星人的供给站

本文主要是介绍NYOJ-710(贪心)-题目----------------------------------外星人的供给站,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;public class ProblemJ {private static int N, count;private static double R, x, y, z;// 当前亮点的极光点圆心的范围类public static class Rounds {double leftpoint, rightpoint;public Rounds(double leftpoint, double rightpoint) {this.leftpoint = leftpoint;this.rightpoint = rightpoint;}}public static void main(String[] args) throws IOException {StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));st.nextToken();int t = (int) st.nval;while (t-- > 0) {st.nextToken();N = (int) st.nval;st.nextToken();R = st.nval;Rounds rounds[] = new Rounds[N + 1];for (int i = 0; i < N; i++) {st.nextToken();x = st.nval;st.nextToken();y = st.nval;z = Math.sqrt(R * R - y * y);// 圆心// x-z是圆的圆心范围的左区间,x+z是右区间rounds[i] = new Rounds(x - z, x + z);}// 排序,对所有的圆...根据左区间进行排序,从小到大Rounds temp;for (int i = 0; i < N; i++)for (int j = i + 1; j < N; j++)if (rounds[i].leftpoint > rounds[j].leftpoint) {temp = rounds[i];rounds[i] = rounds[j];rounds[j] = temp;}count = 1;// 排序之后,重叠的圆(范围重叠)可以看作是一个,找出几个不连续的范围段就是需要的最少个圆double rightvalue = rounds[0].rightpoint;for (int i = 1; i < N; i++) {// 后一个范围段的左区间比前一个范围段的右区间大,说明是相离的两个圆,即,需要添加一个圆if (rounds[i].leftpoint > rightvalue) {count++;rightvalue = rounds[i].rightpoint;} else {/** 否则,则说明两种情况* 1、前一个范围段和后一个范围段是有重叠一部分,此时,后一个范围段的右区间最大* 2、前一个范围段完全包含后一个范围段,此时前一个范围段的右区间最大* 所以这里的比较是获取到重叠的范围段最大的右区间* */if (rounds[i].rightpoint < rightvalue) {rightvalue = rounds[i].rightpoint;}}}System.out.println(count);}}
}

哪有不对,希望指出来,谢谢!本人渣渣求教!

这篇关于NYOJ-710(贪心)-题目----------------------------------外星人的供给站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

POJ2010 贪心优先队列

c头牛,需要选n头(奇数);学校总共有f的资金, 每头牛分数score和学费cost,问合法招生方案中,中间分数(即排名第(n+1)/2)最高的是多少。 n头牛按照先score后cost从小到大排序; 枚举中间score的牛,  预处理左边与右边的最小花费和。 预处理直接优先队列贪心 public class Main {public static voi

ural 1820. Ural Steaks 贪心

1820. Ural Steaks Time limit: 0.5 second Memory limit: 64 MB After the personal contest, happy but hungry programmers dropped into the restaurant “Ural Steaks” and ordered  n specialty steaks

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(