所謂回文串,就是對於給定的字串,正著讀和反著讀都一樣,比如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...