scau2020春季排位賽 9 I題

2021-10-04 05:50:09 字數 1120 閱讀 8551

給定長度為n的小寫字母字串,可以理解為給n個空位,然後每個位置有m個選擇即a開始往後數m-1個字母,接著這個重組的字串為原字串的子串,(因為不會dp,所以就直接硬著頭皮算,我承認我有賭的成分)。接著我們可以先把原字串挖掉乙個,比如現在為abc,我們先拿走c並用¥表示那麼就可以表示為,¥ab,a¥b,ab¥,當¥等於a時,可以看到第乙個與第乙個會有乙個重複,所以讓¥不等於左邊的字母。然後因為第乙個位置可以有3個選擇,而最後乙個位置只有乙個選擇,中間位置有兩個選擇,可以推出有n*(m-1)種情況,而有n個字母所以n×n×(m-1)。

.再次思考如果為aabc的字串是否還能n×n×(m-1),我們拿掉第乙個a剩下的部分與拿走第二個a沒有區別,所以我們要把出現連續字元的那一小串看成乙個整體.。

接著我們再次思考給出字串ab,如果想要得到ba,有幾種途徑,沒錯了是兩種,a向後或者b向前,那麼如果字串是abc我們想得到bac呢(同上a放b後面或者b放a前面)或者得到acb呢(c放b前面或者b放c後面)是不是都會有重複。

最後一點也就是比較關鍵的,當字串為ab,aba,abab時我們先研究一下,當為ab時有一種重複,當為aba時有兩種重複一共重複3次(baa重複一次如第3點,aab重複兩次 :第三個a可以放在第乙個a的左右兩邊或者b放最後);那麼如果為abab呢大家可以推導一下應該為ab序列長度l有關的函式,即重複l×(l-1)/2次。那麼所有的分析完了可以開始寫**了。gogogo——>>>>>>>

#include

#include

#include

#include

#include

using

namespace std;

#define n 10010

long

long a[

200010

],b[

200010

],c[

200010];

intmain()

} x-

=j*(j-1)

/2;printf

("%lld"

,x);

}

SCAU2020春季個人排位賽div2 1 B

給出正整數 n 和 m,統計滿足以下條件的正整數對 a,b 的數量 1 a n,1 b m a b 是 2016 的倍數。input 輸入包含不超過 30 組資料。每組資料報含兩個整數 n,m 1 n,m 10e9 output 對於每組資料,輸出乙個整數表示滿足條件的數量。sample input...

SCAU2020春季個人排位賽div2 5

標頭檔案見上一場的blog 題意 給你s和x,可能存在正數a b s,且a xor b x,問a,b可能的組合有多少種 題解 s a b,則s a b 2 a b 是只表示兩個數的相加,是表示兩個數的進製,某一位的xor如果是1,那麼a和b在這一位必然乙個是1乙個是0,此時 必為0 如果某一位的xo...

排位賽題解

十進位制轉二進位制,右移 與 運算結合,遍歷每個數字在二進位制下點每一位。include intmain for int i 0 i 4 i for int i 0 i 4 i a i 1 右移除2 printf d d d d n num 0 num 1 num 2 num 3 return0 題...