贪心算法——字典序最小问题,Saruman‘s Army
题目描述
Best Cow Line (POJ 3617)
给定长度为N的字符串S,要构造一个长度为N字符串T。T是一个空串,反复执行下列任意操作:
- 从S的头部删除一个字符,加到T的尾部;
从S的尾部删除一个字符,加到T的尾部;
目标是要构造字典序尽可能小的字符串T。

限制条件
- 1 <= N <= 2000
字符串 S 只包含大写英文字母
样例输入
N = 6
S = “ACDBCB”
样例输出
ABCBCD (如下图所示进行操作)

思路分析
- 不断取S的开头和结尾中较小的一个字符放到T的末尾。
- 按照字典序比较S 和S反转后字符串S‘。
- 如果S较小,就从S 的开头取出一个文字,追加的T 的末尾。
- 如果S’较小,就从S的末尾取出一个文字,追加的T 的末尾。(如果相同则取哪个都可以)
AC 代码
# include <cstdio>
# include <iostream>
const char MAX_N = 10000;
using namespace std;
char S[MAX_N + 1];
int N;
void solve()
{
//剩下的字符串为S[a],S[a+1],......,S[b]
int a = 0;
int b = N - 1;
while (a <= b)
{
//将从左起和右起的字符串比较
bool left = false;//先声明最左边为假,才能运行下面的代码
for (int i = 0; a + i <= b; i++)
{
if (S[a + i] < S[b - i])
{
left = true;
break;//如果最左边的小,那么直接跳出for 循环,把最左边的字符给T
}
else if (S[a + i] > S[b - i])
{
left = false;
break;
}
}
if (left)
putchar(S[a++]);
else
putchar(S[b--]);
}
putchar('\n');
}
int main()
{
scanf("%d", &N);
getchar();//这个是必须的,因为solve函数中有个 putchar('\n');要把这个给“吃掉才可以”
for (int i = 0; i < N; i++)
{
scanf("%c", &S[i]);
}
solve();
return 0;
}
小结
对于题目中的思路解析有点说明的地方——字典序。字典序是指从前到后比较两个字符串大小的方法。首先比较1个字符,如果不同则第1个字符较小的字符串更小,如果相同则继续比较2个字符......以此类推,来比较整个字符串的大小。
题目描述
直线上有N个点。点i的位置是\(X_i\)。从这N个点中选择若干个,给它们加上标记。对每一个点,其距离为R以内的区域里必须又带有标记的点(自己本身带有标记的点,可以认为与其距离为0的地方有一个带有标记的点)。在满足这个条件的情况下,希望能为尽可能少的点添加标记。请问至少要有多少点被加上标记?
样例输入
N = 6
R = 10
X ={1,7,15,20,30,50}
样例输出
3(如下图所示)

思路分析
从最左边的点开始,距离R以内最远的点然后在把标记的点作为最左边的点,进行相同的操作。
AC代码
# include <iostream>
# include <algorithm>
using namespace std;
const int maxn = 1000;
int n, r;
int x[maxn];
void solve()
{
sort(x, x + n);
int i = 0;
int ans = 0;
while (i < n)
{
//s 是没有被覆盖的最左边点的位置
int s = x[i++];
while (i < n && x[i] <= s + r)//一直向右前进知道距s的距离大于r的点
i++;
int p = x[i - 1];//p是新加上标记的点的位置
while (i < n && x[i] <= p + r)//一直向右前进直到距p的距离大于r的点
i++;
ans++;
}
printf("%d\n", ans);
}
int main()
{
scanf("%d %d", &n,&r);
for (int i = 0; i < n; i++)
{
scanf("%d", &x[i]);
}
solve();
return 0;
getchar();
getchar();
}
贪心算法——字典序最小问题,Saruman‘s Army的更多相关文章
- BZOJ 1640 [Usaco2007 Nov]Best Cow Line 队列变换:贪心【字典序最小】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1640 题意: 给你一个长度为n的字符串. 你可以将原串的首字母或尾字母移动到新串的末尾. ...
- POJ 3617 Best Cow Line ||POJ 3069 Saruman's Army贪心
带来两题贪心算法的题. 1.给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下面两个操作:1.从S的头部删除一个字符,加到T的尾部.2.从S的尾部删除一个字符,加 ...
- Saruman's Army(贪心)
Saruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep tra ...
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...
- POJ 3617 Best Cow Line (字典序最小问题 & 贪心)
原题链接:http://poj.org/problem?id=3617 问题梗概:给定长度为 的字符串 , 要构造一个长度为 的字符串 .起初, 是一个空串,随后反复进行下列任意操作. 从 的头部删除 ...
- POJ 3069 Saruman's Army(贪心)
Saruman's Army Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 3069 Saruman's Army(贪心)
Saruman's Army Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tot ...
- POJ3069 Saruman's Army【贪心】
Saruman the White must lead his army along a straight path from Isengard to Helm's Deep. To keep tra ...
- poj 3069 Saruman's Army 贪心模拟
Saruman's Army Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18794 Accepted: 9222 D ...
随机推荐
- POJ1458(KB12-L LCS)
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 51319 Accepted: 21 ...
- Python 进阶必备函数
1. lambda 表达式 匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数.通俗来说呢,就是它可以让我们的函数,可以不需要函数名. 正常情况下,我们定义一 ...
- Code Signal_练习题_firstDigit
Find the leftmost digit that occurs in a given string. Example For inputString = "var_1__Int&qu ...
- vue 自定义组件的自定义属性
<auto-com :value="value"></auto-com> //带 : 的属性传入的是动态的值 <auto-com value=&quo ...
- 编译64位cu文件的设置
作者:朱金灿 来源:http://blog.csdn.net/clever101 CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运 ...
- Python 自定义线程池
"""思路1,将任务放在队列 1)创建队列:(初始化) 2)设置大小,线程池的最大容量 3)真实创建的线程 列表 4)空闲的线程数量 2,着手开始处理任务 1)创建线程 ...
- objc与鸭子对象(上)
这是<objc与鸭子对象>的上半部分,<objc与鸭子对象(下)>中介绍了鸭子类型的进阶用法.依赖注入以及demo. 我是前言 鸭子类型(Duck Type)即:“当看到一只鸟 ...
- Nginx的虚拟主机
1.虚拟主机的概念和类型 1.1 概念: 所谓的虚拟主机,在web服务里面就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立的对外提供服务. ...
- mssql 监控随笔
性能监控列表: • Memory: Pages/sec ( 从硬盘上读取或写入硬盘的页数(参考值:00~20) • Physical Disk: % Disk time 或 Physi ...
- c#经典算法之冒泡排序(Bubble Sort)
转载于:https://www.cnblogs.com/shen-hua/p/5422676.html 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面, ...