poj3069贪心
2015-08-12 19:09
197 查看
Saruman's Army
Description
Saruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep track of his forces, Saruman distributes seeing stones, known as palantirs, among the troops. Each palantir has a maximum effective range of R units,
and must be carried by some troop in the army (i.e., palantirs are not allowed to “free float” in mid-air). Help Saruman take control of Middle Earth by determining the minimum number of palantirs needed for Saruman to ensure that each of his minions is within R units
of some palantir.
Input
The input test file will contain multiple cases. Each test case begins with a single line containing an integer R, the maximum effective range of all palantirs (where 0 ≤ R ≤ 1000), and an integer n,
the number of troops in Saruman’s army (where 1 ≤ n ≤ 1000). The next line contains n integers, indicating the positions x1, …, xn of each troop
(where 0 ≤ xi ≤ 1000). The end-of-file is marked by a test case with R = n = −1.
Output
For each test case, print a single integer indicating the minimum number of palantirs needed.
Sample Input
Sample Output
Hint
In the first test case, Saruman may place a palantir at positions 10 and 20. Here, note that a single palantir with range 0 can cover both of the troops at position 20.
In the second test case, Saruman can place palantirs at position 7 (covering troops at 1, 7, and 15), position 20 (covering positions 20 and 30), position 50, and position 70. Here, note that palantirs must be distributed among troops and are not allowed
to “free float.” Thus, Saruman cannot place a palantir at position 60 to cover the troops at positions 50 and 70.
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a-*(int *)b);
}
int main()
{
int i,r,n,x,ans;
int a[1006];
while(scanf("%d%d",&r,&n))
{
ans=0;
if(r==-1 && n==-1) break;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(a[0]),cmp);
x=a[0]+r;
for(i=0;i<n;)
{
while(x>=a[i]) i++;
x=a[i-1]+r;
while(x>=a[i]) i++;
ans++;
x=a[i]+r;
}
printf("%d\n",ans);
}
return 0;
}
/*
0 3
10 20 20
10 7
70 30 1 7 15 20 50
-1 -1
2
4
*/
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5560 | Accepted: 2847 |
Saruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep track of his forces, Saruman distributes seeing stones, known as palantirs, among the troops. Each palantir has a maximum effective range of R units,
and must be carried by some troop in the army (i.e., palantirs are not allowed to “free float” in mid-air). Help Saruman take control of Middle Earth by determining the minimum number of palantirs needed for Saruman to ensure that each of his minions is within R units
of some palantir.
Input
The input test file will contain multiple cases. Each test case begins with a single line containing an integer R, the maximum effective range of all palantirs (where 0 ≤ R ≤ 1000), and an integer n,
the number of troops in Saruman’s army (where 1 ≤ n ≤ 1000). The next line contains n integers, indicating the positions x1, …, xn of each troop
(where 0 ≤ xi ≤ 1000). The end-of-file is marked by a test case with R = n = −1.
Output
For each test case, print a single integer indicating the minimum number of palantirs needed.
Sample Input
0 3 10 20 20 10 7 70 30 1 7 15 20 50 -1 -1
Sample Output
2 4
Hint
In the first test case, Saruman may place a palantir at positions 10 and 20. Here, note that a single palantir with range 0 can cover both of the troops at position 20.
In the second test case, Saruman can place palantirs at position 7 (covering troops at 1, 7, and 15), position 20 (covering positions 20 and 30), position 50, and position 70. Here, note that palantirs must be distributed among troops and are not allowed
to “free float.” Thus, Saruman cannot place a palantir at position 60 to cover the troops at positions 50 and 70.
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a-*(int *)b);
}
int main()
{
int i,r,n,x,ans;
int a[1006];
while(scanf("%d%d",&r,&n))
{
ans=0;
if(r==-1 && n==-1) break;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(a[0]),cmp);
x=a[0]+r;
for(i=0;i<n;)
{
while(x>=a[i]) i++;
x=a[i-1]+r;
while(x>=a[i]) i++;
ans++;
x=a[i]+r;
}
printf("%d\n",ans);
}
return 0;
}
/*
0 3
10 20 20
10 7
70 30 1 7 15 20 50
-1 -1
2
4
*/
相关文章推荐
- Spring MVC学习笔记(一)---Spring MVC 的HelloWorld
- C++ 控制台版 2048小游戏
- NEU OJ 1644 Median I
- 每日一记之选择城市的三级联动使用的是wheel组件
- Linux下11.2.0.4 RAC添加节点
- android传感器使用规范(3)
- hdoj-2059-龟兔赛跑【DP】
- poj2393贪心
- 栈的应用之表达式计算器
- Laravel学习笔记目录
- Spark 1.4.1 Standalone 模式部署安装配置
- Linux中命令使用笔记(不断更新...)
- 【C/S】——面向对象的程序设计概念理解
- 网络篇----数据安全
- Android 联系人字母排序(仿微信)
- 【资料】wod烟草
- VS2010编写的MFC串口程序
- dojo 方法重载:以enhancedgrid定制description为例
- java 如何使用缓冲区对文件进行读写操作
- C++ explicit关键字 详解(用于构造函数)