2015-09-06

              萨鲁曼军队

               

问题大意:萨鲁曼白想要让他的军队从sengard到Helm’s Deep,为了跟踪他的军队,他在军队中放置了魔法石(军队是一条线),魔法石可以看到前后距离为R的距离,为了让魔法石发挥最大的效益,魔法石戴在军人的身上,问你怎么才能使用最少的石头

问题很清晰,思路也很清晰,这道题挺典型的,就是贪心算法,

很容易想到的就是我们只用在距离内找到最后的点(人),然后把魔法石放到其上面就行了,然后依次类推,最后就可以达到最少的数量

具体可以以2R为一次循环,在前R的区间内我们找到要标记的点,然后移动R的距离,再来一次就可以了。很容易想到,画个图就可以了

          

 #include <stdio.h>
#include <stdlib.h>
#define SWAP(a,b) { (*a)^=(*b);(*b)^=(*a);(*a)^=(*b);}
#define CUTOFF 20 typedef int Position; void Quick_Sort(Position *, Position, Position);
int Get_Pivot(Position, Position, Position,Position *);
void Insertion_Sort(Position *, Position, Position);
void Search(Position *, const int, const int); int main(void)
{
int R, T, i;
Position *Troops = NULL;
while (~scanf("%d%d", &R, &T)
&& R >=
&& T >= )
{
Troops = (Position *)malloc(sizeof(int)*T);
for (i = ; i < T; i++)
scanf("%d", &Troops[i]);
Quick_Sort(Troops, , T - );
Search(Troops, R, T);
free(Troops);
}
} int Get_Pivot(Position left, Position right, Position mid,Position *A)
{
if (A[left] > A[mid]) SWAP(&A[left], &A[mid]);
if (A[left] > A[right]) SWAP(&A[left], &A[right]);
if (A[mid] > A[right]) SWAP(&A[mid], &A[right]); SWAP(&A[mid], &A[right]);//隐藏枢纽元
return A[right];
} void Quick_Sort(Position *A, Position left, Position right)
{
Position i = left, j = right , mid = (left + right) / ;
int pivot;
if (right - left > CUTOFF)
{
pivot = Get_Pivot(left, right, mid, A);
while ()
{
while (A[--j] > pivot);
while (A[++i] < pivot);
if (i < j)
SWAP(&A[i], &A[j])
else break;
}
SWAP(&A[i], &A[right]);//重新显示枢纽元
Quick_Sort(A, left, i - );
Quick_Sort(A, i + , right);
}
else Insertion_Sort(A, left, right);//转插入排序
} void Insertion_Sort(Position *A, Position left, Position right)
{
Position i, j;
int tmp;
for (i = left; i <= right; i++)
{
tmp = A[i];
for (j = i; j > left && A[j - ] > tmp; j--)
A[j] = A[j - ];
A[j] = tmp;
}
} void Search(Position *Troops, const int R, const int T)
{
Position i = , mark, s, ans = ;
for (; i < T;)
{
s = Troops[i++];//获得区间的最左点
for (; i < T && Troops[i] <= s + R; i++);
mark = Troops[i - ];//在R内的最右点,标记
for (; i < T && Troops[i] <= mark + R; i++);
ans++;
}
printf("%d\n", ans);
}

Greedy:Saruman's Army(POJ 3069)的更多相关文章

  1. POJ 3069 Saruman's Army(萨鲁曼军)

    POJ 3069 Saruman's Army(萨鲁曼军) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Saruman ...

  2. POJ 3069 Saruman's Army (模拟)

    题目连接 Description Saruman the White must lead his army along a straight path from Isengard to Helm's ...

  3. poj 3069 Saruman's Army(贪心)

    Saruman's Army Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tot ...

  4. Saruman's Army(贪心)

    Saruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep tra ...

  5. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  6. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

  7. 广大暑假训练1(poj 2488) A Knight's Journey 解题报告

    题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A   (A - Children of the Candy Corn) ht ...

  8. Games:取石子游戏(POJ 1067)

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Descripti ...

  9. BFS 或 同余模定理(poj 1426)

    题目:Find The Multiple 题意:求给出的数的倍数,该倍数是只由 1与 0构成的10进制数. 思路:nonzero multiple  非零倍数  啊. 英语弱到爆炸,理解不了题意... ...

随机推荐

  1. 19.Android之文件存储方法学习

    Android开发中会用到文件存储,今天来学习下. 先改下布局界面: <?xml version="1.0" encoding="utf-8"?> ...

  2. 旅行(Dijkstra)问题

    问题:输入: 输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个:   接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车 ...

  3. Prim和Kruskal求最小生成树

    Prim: 算法步骤: 1.任意结点开始(不妨设为v1)构造最小生成树: 2.首先把这个结点(出发点)包括进生成树里, 3.然后在那些其一个端点已在生成树里.另一端点还未在生成树里的所有边中找出权最小 ...

  4. ACdream 1429 Rectangular Polygon

    Rectangular Polygon Time Limit: 1000MS   Memory Limit: 256000KB   64bit IO Format: %lld & %llu D ...

  5. Linux Process/Thread Creation、Linux Process Principle、sys_fork、sys_execve、glibc fork/execve api sourcecode

    相关学习资料 linux内核设计与实现+原书第3版.pdf(.3章) 深入linux内核架构(中文版).pdf 深入理解linux内核中文第三版.pdf <独辟蹊径品内核Linux内核源代码导读 ...

  6. API与软件架构

    http://blog.csdn.net/horkychen/article/details/46612899 从架构设计的角度来看(所谓的组成论),软件系统就是模块和接口. 模块(层次/组件)决定分 ...

  7. Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  8. 高速公路(Highway,ACM/ICPC SEERC 2005,UVa1615)

    I think: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <m ...

  9. 如何用jar命令对java工程进行打包

    如何用jar命令对java工程进行打包 有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包ja ...

  10. php-jquery-json-3

    memcache redis缓存技术mysql中的int和text是有区别的, , 按字节长度来记忆jquery中的选择器中的空格是运算符, 所以不能多也不能少, 非常严格层次运算符: 空格 大于 等 ...