2016 計蒜之道 初賽 第一場 題解 待補

2021-07-13 05:09:49 字數 1768 閱讀 5813

對於金鑰 s1..sn,我們需要首先計算其對應的π 陣列。對於任意的 i(

2≤i≤

n),π

i=ma

x 也就是最長的字首等於字尾的長度。 ∑n

i=2π

i ​ 值越小,易破解程度越高。

現在已知金鑰的 s1…sn 中每個小寫字母的字元個數,小明想知道易破解程度最高是多少?

官方題解: 如果只有一種字元,很好得出答案。超過 1 種字元,選取最少的一種字元 k 的乙個放到第乙個位置,剩下種類的字元依次排列,剩下的 k 放到末尾。比如 k***xxyyykk。這樣最小答案就是 k 的個數減 1。

#include

using namespace std;

#define for(i,n) for(int i=1;i<=n;i++)

#define fork(i,k,n) for(int i=k;i<=n;i++)

#define rep(i,n) for(int i=0;i#define ford(i,n) for(int i=n;i;i--)

#define forkd(i,k,n) for(int i=n;i>=k;i--)

#define repd(i,n) for(int i=n;i>=0;i--)

#define forp(x) for(int p=pre[x];p;p=next[p])

#define forpiter(x) for(int &p=iter[x];p;p=next[p])

#define lson (o<<1)

#define rson ((o<<1)+1)

#define mem(a) memset(a,0,sizeof(a));

#define memi(a) memset(a,127,sizeof(a));

#define memi(a) memset(a,128,sizeof(a));

#define inf (2139062143)

#define f (100000007)

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define vi vector

#define pi pair

#define si(a) ((a).size())

typedef long

long ll;

typedef unsigned long

long ull;

ll mul(ll a,ll b)

ll add(ll a,ll b)

ll sub(ll a,ll b)

void upd(ll &a,ll b)

int read()

while(isdigit(ch))

return x*f;

} int t,a[30];

int s[100],sz=0;

int main()

if (sz==0) puts("0");

else

if (sz==1) cout<1]*(s[1]-1)/2

對於簡單版本:n≤

500,1≤

ai≤50

​對於中等版本:n≤

10000,1

≤ai≤

500

對於困難版本:n≤

100000,a

i≤100000

2017 計蒜之道 初賽 第一場

阿里的新遊戲 阿里九遊開放平台近日上架了一款新的益智類遊戲 成三棋。成三棋是我國非常古老的乙個雙人棋類遊戲,其棋盤如下圖所示 如果一條線段上的三個交叉點都被同一玩家的棋子佔據的話,則稱這條線段被該玩家成三。現在,小紅和小明兩人在遊戲平台上下棋,其中小紅的棋子是黑色的。請你幫小紅計算他成三的線段數。樣...

2018 計蒜之道 初賽 第一場

題解 典型的二分 1 pragma warning disable 4996 2 include3 include4 include 5 include6 include7 include8 include9 define ll long long 10using namespace std 111...

2017計蒜之道 初賽 第一場

16種情況手動暴力即可 include define nmax 7 using namespace std int mp nmax nmax int n,m int cnt 0 void ge void check if mp 0 0 1 mp 3 0 1 mp 6 0 1 if mp 0 6 1 ...