题目链接:Saruman's Army
其实就是...寻找一个点,能保证左边已经被最大化标记,右边也能拉到最远。(>_<其实我是看书才有点思路的)
代码如下:View on Github
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int R,N,cnt;
vector<int> X;
int find_target(int StartPoint,int range)
{
if(StartPoint==N-1)
{
return N-1;
}
for(;StartPoint<N;StartPoint++)
{
if(X[StartPoint]<=range)
{
continue;
}
else
{
return StartPoint-1;
}
}
/// StartPoint==N
return N-1;
}
int find_next(int StartPoint,int Range)
{
if(StartPoint==N-1)
{
return N;
}
for(;StartPoint<N;StartPoint++)
{
if(X[StartPoint]<=Range)
{
continue;
}
else
{
return StartPoint;
}
}
return N;
}
int main()
{
while(scanf("%d %d",&R,&N)==2&&(N!=-1&&R!=-1))
{
X.clear();
for(int i=0; i<N; i++)
{
int tmp;
scanf("%d",&tmp);
X.push_back(tmp);
}
sort(X.begin(),X.end());
cnt=0;
int point=0;
while(point<N)
{
int range=X[point]+R;
int ans=find_target(point,range);
if(ans==point)
{
/// light this point : point
cnt++;
point=find_next(point,X[point]+R);
continue;
}
else if(ans==-1)
{
break;
}
else
{
/// light target point : ans
cnt++;
point=ans;
}
range=X[point]+R;
point=find_next(point,range);
}
printf("%d\n",cnt);
}
return 0;
}
我在GitHub上建立了一个仓库,用于存放已经AC的题目的源代码。如果各位有未收录的题目或者有更好的解法,欢迎fork仓库+PR~ 让我们共同创建一个AC代码集中仓库,造福ACM Beginner ~
仓库地址: OJ-Problems-Source On GitHub