洛谷的[NOIP1999 普及组] 导弹拦截
时间: 2023-02-06 12:57:51 浏览: 79
洛谷的[NOIP1999 普及组] 导弹拦截 是一道程序设计题。
题目大意是这样的:有一个国家发射了若干枚导弹,它们从不同的高度飞行,你有若干个导弹拦截器可以用来摧毁导弹。每个导弹拦截器的射程是固定的,并且它可以在任意高度摧毁导弹。你的任务是写一个程序,计算出使用最少的导弹拦截器就可以摧毁所有的导弹。
输入格式:
第一行包含两个整数 N 和 H,表示导弹的数量和天空的高度。
接下来 N 行,每行包含一个整数,表示导弹的飞行高度。
最后一行包含一个整数 R,表示导弹拦截器的射程。
输出格式:
输出一个整数,表示最少需要的导弹拦截器数量。
输入输出样例
输入样例#1:
5 1000
600
800
1200
1400
1600
200
输出样例#1:
3
数据范围:
1≤N≤100,
1≤H≤10000,
1≤高度≤10000,
1≤R≤1000
解题思路:
这是一道贪心题。我们可以将导弹按照飞行高度从小到大排序,然后从第一枚导弹开始,逐个摧毁
相关问题
洛谷的[NOIP1999 普及组] 导弹拦截 解决程序
NOIP1999 普及组 导弹拦截 是一道经典的编程题目。
题目大意: 给定一个圆形的防御区域,和一些从外面向里面发射的导弹。你有一个导弹拦截系统,每次可以拦截一枚导弹,求最少几枚导弹可以拦截所有的导弹。
解决方法:
1. 输入边界值。
2. 建立一个数组,表示每枚导弹的位置和速度。
3. 对每枚导弹进行模拟,找到拦截的时间。
4. 按照拦截的时间从小到大排序,依次拦截导弹。
5. 输出最少拦截的导弹数量。
程序示例:
```
#include <stdio.h>
#include <math.h>
#define MAXN 1000
#define eps 1e-6
struct missile{
double x, y, v;
}miss[MAXN];
double dist(double x1, double y1, double x2, double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main(){
int n, r;
scanf("%d%d", &n, &r);
for (int i = 0; i < n; i++){
scanf("%lf%lf%lf", &miss[i].x, &miss[i].y, &miss[i].v);
}
int ans = 0;
while (1){
double mint = 1e100;
int minp = -1;
for (int i = 0; i < n; i++){
double t = dist(miss[i].x, miss[i].y, 0, 0) / miss[i].v;
if (t < mint - eps){
mint = t;
minp = i;
}
}
if (minp == -1) break;
ans++;
miss[minp].v = 0;
}
printf("%d\n", ans);
return 0;
}
```
洛谷1093 [NOIP2007 普及组] 奖学金
洛谷1093 [NOIP2007 普及组] 奖学金是一道算法题,出自国内在线编程平台洛谷的题库。这道题目是2007年全国信息学奥林匹克普及组的一道题目,也是NOIP(全国青少年信息学奥林匹克竞赛)的一部分。
题目描述如下:给定N个申请者的学业成绩、面试成绩、论文成绩和奖金数额,按照一定的规则来确定奖学金的分配。规则如下:
1. 学业成绩高于80分且有论文成绩的申请者可获得奖金8000元;
2. 学业成绩高于85分且面试成绩高于80分的申请者可获得奖金4000元;
3. 学业成绩高于90分的申请者可获得奖金2000元;
4. 学业成绩高于85分且有奖金的申请者可获得奖金1000元;
5. 面试成绩高于80分且有论文成绩的申请者可获得奖金850元。
要求编写一个程序,根据给定的N个申请者的相关信息,计算出总共发放的奖金数额。
这道题目主要考察对条件判断和基本计算的理解和运用。你可以通过编写一个程序来解决这个问题,根据每个申请者的成绩和条件进行判断,然后计算出总共发放的奖金数额。希望能对你有所帮助!