haoi2009 求回文串

2022-05-12 19:45:31 字數 1253 閱讀 6620

所謂回文串,就是對於給定的字串,正著讀和反著讀都一樣,比如abcba就是乙個回文串,abcab則不是。我們的目標是對於任意輸入的字串,不斷將第i個字元和第i+1個字元交換,使得該串最終變為回文串。求最少交換次數。

題解:有一種做法是貪心;

就是每次找到最左端的字元,然後找到這序列中最右邊的一樣的字元,然後把這個字元移過去,然後把最左端右移,繼續以上操作;

最後的答案就是每次的移動步數加起來;

要吐槽的是,window下i64d不要忘了......

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define file "dealing"

#define ll long long

#define up(i,j,n) for(ll i=j;i<=n;i++)

#define pii pair#define piii pair>template

inline bool chkmin(t &a,t b)

template

inline bool chkmax(t &a,t b)

namespace

io inline ll read()

while(ch<='

9'&&ch>='0')

return f?-x:x;

}}using

namespace

io;namespace

oi inline

void add(ll x,ll y)}

inline ll

get(ll x)

void

slove()

up(i,

1,n)g[s[i]-'a'

].push_back(i);

up(i,

1,n)add(i,1

); ll ans=0

; up(i,

1,n)

printf(

"%i64d\n

",ans);

}}int

main()

P5041 HAOI2009 求回文串

所謂回文串,就是對於給定的字串,正著讀和反著讀都一樣,比如abcba就是乙個回文串,abcab則不是。我們的目標是對於任意輸入的字串,不斷將第i個字元和第i 1個字元交換,使得該串最終變為回文串。求最少交換次數。乙個由大寫字母字母組成的字串。若能經過有限次操作能將原串變為回文串,則輸出最少操作次數 ...

HAOI 2009 逆序對數列

haoi 2009 逆序對數列 對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的 數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?第一行為兩個整數n,k。寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你...

HAOI2009 逆序對數列

題目大意 求 1,n 的自然數的排列中逆序對數為 k 的有多少.無優化 include include const int mod 10000 int f 1005 1005 int main printf d n f n k return 0 優化 include include const in...