BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
數(shù)據(jù) n <= 30000 , 然后 O( n2 ) 的貪心也過(guò)了..... USACO 數(shù)據(jù)是有多弱啊 = =
( ps : BZOJ 1640 和此題一模一樣 , 雙倍經(jīng)驗(yàn) )?
--------------------------------------------------------------------------------------
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define rep( i , n ) for( int i = 0 ; ?i < n ; ++i )#define clr( x , c ) memset( x , c , sizeof( x ) )using namespace std;const int maxn = 30000 + 5;char seq[ maxn ];char ans[ maxn ];int n;int cur = 0;void Read() {cin >> n;rep( i , n ) {char c = getchar();while( ! isupper( c ) ) ? ?c = getchar();seq[ i ] = c;}}bool cmp( int l , int r ) {while( l < r && seq[ l ] == seq[ r ] )? ? ?l++ , r--;return seq[ l ] < seq[ r ];}void print() {rep( i , cur ) {putchar( ans[ i ] );if( ! ( ( i + 1 ) % 80 ) ) ? ?printf( "\n" );}}int main() {Read();int L = 0 , R = n - 1;while( n-- )ans[ cur++ ] = cmp( L , R ) ? seq[ L++ ] : seq[ R-- ];print();return 0;}?
--------------------------------------------------------------------------------------?
?
1692: [Usaco2007 Dec]隊(duì)列變換
Time Limit:?5 Sec??Memory Limit:?64 MBSubmit:?812??Solved:?330
[Submit][Status][Discuss]
Description
FJ打算帶他的N(1 <= N <= 30,000)頭奶牛去參加一年一度的“全美農(nóng)場(chǎng)主大獎(jiǎng)賽”。在這場(chǎng)比賽中,每個(gè)參賽者都必須讓他的奶牛排成一列,然后領(lǐng)她們從裁判席前依次走過(guò)。 今年,競(jìng)賽委員會(huì)在接受隊(duì)伍報(bào)名時(shí),采用了一種新的登記規(guī)則:他們把所有隊(duì)伍中奶牛名字的首字母取出,按它們對(duì)應(yīng)奶牛在隊(duì)伍中的次序排成一列(比如說(shuō),如果FJ帶去的奶牛依次為Bessie、Sylvia、Dora,登記人員就把這支隊(duì)伍登記為BSD)。登記結(jié)束后,組委會(huì)將所有隊(duì)伍的登記名稱按字典序升序排列,就得到了他們的出場(chǎng)順序。 FJ最近有一大堆事情,因此他不打算在這個(gè)比賽上浪費(fèi)過(guò)多的時(shí)間,也就是說(shuō),他想盡可能早地出場(chǎng)。于是,他打算把奶牛們預(yù)先設(shè)計(jì)好的隊(duì)型重新調(diào)整一下。 FJ的調(diào)整方法是這樣的:每次,他在原來(lái)隊(duì)列的首端或是尾端牽出一頭奶牛,把她安排到新隊(duì)列的尾部,然后對(duì)剩余的奶牛隊(duì)列重復(fù)以上的操作,直到所有奶牛都被插到了新的隊(duì)列里。這樣得到的隊(duì)列,就是FJ拉去登記的最終的奶牛隊(duì)列。 接下來(lái)的事情就交給你了:對(duì)于給定的奶牛們的初始位置,計(jì)算出按照FJ的調(diào)整規(guī)則所可能得到的字典序最小的隊(duì)列。
Input
* 第1行: 一個(gè)整數(shù):N
* 第2..N+1行: 第i+1行僅有1個(gè)'A'..'Z'中的字母,表示隊(duì)列中從前往后數(shù)第i 頭奶牛名字的首字母
Output
* 第1..??行: 輸出FJ所能得到的字典序最小的隊(duì)列。每行(除了最后一行)輸 出恰好80個(gè)'A'..'Z'中的字母,表示新隊(duì)列中每頭奶牛姓名的首 字母
Sample Input
6A
C
D
B
C
B
輸入說(shuō)明:
FJ有6頭順次排好隊(duì)的奶牛:ACDBCB
Sample Output
ABCBCD輸出說(shuō)明:
操作數(shù) 原隊(duì)列 新隊(duì)列
#1 ACDBCB
#2 CDBCB A
#3 CDBC AB
#4 CDB ABC
#5 CD ABCB
#6 D ABCBC
#7 ABCBCD
HINT
Source
Gold
?
轉(zhuǎn)載于:https://www.cnblogs.com/JSZX11556/p/4556546.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信办理信用卡要多久?微信办理信用卡快吗
- 下一篇: 面试题3:二维数组查找