字典序最小问题
2014-09-06 18:20
471 查看
给定长度为N的字符串S(只包含大写英文字母),要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作。
从S的头部删除一个字符,加到T的尾部 ;
从S的尾部删除一个字符,加到T的尾部。
目标是要构造字典序尽可能小的字符串T
输入:
第一行一个正整数N;
后面N行,每行一个大写字母。
输出:
T(输出时每行写满80个字符就换行)
样例输入:
限制条件:
1≤N≤2000
字符串S只包含大写英文字母
解释:字典序是指从前到后比较两个字符串的大小的方法。首先比较第一个字符,如果不同则第一个字符较小的字符串更小,如果相同则继续比较第2个字符......如此继续,来比较整个字符串的大小。
分析:贪心
将字符串正序和反序比较,每次将较小串的首字母加到T的末尾!
从S的头部删除一个字符,加到T的尾部 ;
从S的尾部删除一个字符,加到T的尾部。
目标是要构造字典序尽可能小的字符串T
输入:
第一行一个正整数N;
后面N行,每行一个大写字母。
输出:
T(输出时每行写满80个字符就换行)
样例输入:
6 A C D B C B 样例输出:
ABCBCD
限制条件:
1≤N≤2000
字符串S只包含大写英文字母
解释:字典序是指从前到后比较两个字符串的大小的方法。首先比较第一个字符,如果不同则第一个字符较小的字符串更小,如果相同则继续比较第2个字符......如此继续,来比较整个字符串的大小。
分析:贪心
将字符串正序和反序比较,每次将较小串的首字母加到T的末尾!
var n:integer; t,s1,s2:ansistring; ch:char; procedure init; var i:integer; begin readln(n); s1:='';s2:=''; for i:=1 to n do begin readln(ch); s1:=s1+ch; s2:=ch+s2; end; end; procedure main; var i:integer; begin for i:=1 to n do if s1<s2 then begin t:=t+s1[1]; delete(s1,1,1); delete(s2,n-i+1,1); end else begin t:=t+s2[1]; delete(s1,n-i+1,1); delete(s2,1,1); end; end; procedure print; var i:integer; begin for i:=1 to n do begin write(t[i]); if i mod 80 =0 then writeln; end; end; begin init; main; PRINT; end.
相关文章推荐
- uva 624 CD(01背包问题)输出最小字典序是个问题虽然题目不要求
- POJ3617(字典序最小问题)
- POJ3617 字典序最小问题
- POJ3617 Best Cow Line(字典序最小问题)
- 字典序最小问题_思路
- 字典序最小问题Best Cow Line
- POJ3617 Best Cow Line (字典序最小问题)
- POJ 3167 字典序最小问题
- 字典序最小问题
- poj 3617字典序最小问题
- 字典序最小问题
- 字典序最小问题——Best Cow Line
- POJ 3617 字典序最小问题
- 字典序最小问题--贪心入门
- 043_字典序最小问题(best cow line)
- 贪心算法——字典序最小问题
- 字典序最小问题——Best Cow Line
- POJ 3617 Best Cow Line(字典序最小问题)
- 2.2.3 字典序最小问题 -Best Cow Line(POJ 3617)
- 字典序最小问题