Follow me 挑战程序与设计
来源:互联网 发布:江南七怪 知乎 编辑:程序博客网 时间:2024/06/16 18:32
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 ofR 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 integerR, the maximum effective range of all palantirs (where 0 ≤ R ≤ 1000), and an integern, the number of troops in Saruman’s army (where 1 ≤ n ≤ 1000). The next line contains n integers, indicating the positionsx1, …, xn of each troop (where 0 ≤xi ≤ 1000). The end-of-file is marked by a test case withR = n = −1.
Output
For each test case, print a single integer indicating the minimum number of palantirs needed.
Sample Input
0 310 20 2010 770 30 1 7 15 20 50-1 -1
Sample Output
24
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 <cstring>
{
int N,R;
while(cin>>R>>N)
{
if (R==-1&&N==-1) break;
int a[1009],temp;
mem(a,0);
for (int i=0;i<N;i++)
{
cin>>temp;
a[temp]++;
}
int b[1009],flag=0;
for (int i=0;i<1009;i++)
{
if (a[i])
{
b[flag++]=i;
}
}
int sum=0;
// for (int i=0;i<flag;i++) cout<<b[i]<<' ';
for (int i=0;i<flag;)
{
int Left_min=b[i],k;
for (k=i+1;b[k]<=Left_min+R;k++){}
//cout<<"k:"<<k<<' '<<b[k]<<endl;
int j=k-1;
for (j;b[j]<=b[k-1]+R;j++){}
//cout<<"j: "<<j<<endl<<endl;
i=j;
sum++;
}
cout<<sum<<endl;
}
return 0;
}
- Follow me 挑战程序与设计
- Follow me 挑战程序与设计
- Follow me 挑战程序与设计
- Follow me 挑战程序与设计
- Follow me--挑战程序与设计
- Follow me--挑战程序与设计
- follow me
- Follow me on Twitter !
- Follow Me: ArcPy(1)
- Follow Me: ArcPy(2)
- mongodb CURD follow me
- 加壳程序CPU-FOLLOW ME测试版(含源码)已经发布
- Objective-C 学习Follow Me(一)
- Python挑战第四关follow the chain
- 软件项目管理Follow Me--如何进行项目估算
- 项目管理Follow Me – MS Project使用经验谈
- Follow Me:深入浅出学习Hibernate一:Hibernate概述
- Follow Me:深入浅出学习Hibernate二:Hibernate第一实例
- ASP网页IIS发布出现HTTP 错误 404.3
- Mybatis 聚合函数
- float和double丢失精度问题,可用Long来转换
- 封装jquery插件很简单
- SuperMap iServer Java 如何配置缓存参数
- Follow me 挑战程序与设计
- ZOJ3775-?(>_o)!
- 单链表的基本操作
- ACM n-1位数
- Java 保留2位小数点(2种方式)
- atomikos 在Windows Tomcat下使用遇到的坑
- wireshark权限不够
- 项目开发笔记
- javascript放在head和body的区别(w3c建议放在head标签中)