BZOJ3574 HNOI2014抄卡組(雜湊)

2022-05-20 18:15:52 字數 1444 閱讀 4371

容易發現萬用字元中間的部分可以任意匹配,會造成的無法匹配的僅僅是前字尾,字首和字尾可以分別獨立處理。如果字串均有萬用字元,只需要按前/字尾長度排序然後暴力匹配就可以了。

問題在於存在無萬用字元的字串。顯然首先這些字串需要相同。剩下的字串只要都能與該字串匹配即可。然後就不會了。想了半天去看題解……暴力雜湊。為啥跑2e8這麼自信啊。

bzoj莫名t。

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

intread()

while (c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+(c^48),c=getchar();

return x*f;

}#define n 100010

#define l 10000010

#define ul unsigned long long

intt,n,pre[n],suf[n],id[n];

ul hash[

2][l],p[l];

vector

s[n];

bool isac(char c)

bool cmp(const

int&a,const

int&b)

bool check(int

n)ul gethash(

int k,int l,int

r)int

main()

hash[

0][0]=0;int len=0;bool flag=1

;

for (int i=1;i<=n;i++)

for (int j=l-1;~j;j--)

if (s[i][j]=='

*')

if (pre[i]==l)

if (!len)

else}}

if (!flag)

if (!len)

for (int i=1;i<=n;i++)

if (!check(n))

cout

<<"

y\n"

; }

else

int x=pre[i]+1;flag=1

;

for (int j=pre[i];j<=suf[i];j++)

if (flag) break

; }

if (flag) cout<<"

n\n";else cout<<"

y\n"

; }

}return0;

}

bzoj 2326 HNOI2011 數學作業

題目大意 給你n,m,求concatenate 1.n mod m的值 concatenate 1.n 代表把1到n連起來 比如n 13時 concatenate 1.n 就是12345678910111213 n 10 1 m 10 9 這題很水,對於n,將其分開,比如145,就分成1 9,10 ...

BZOJ1010 HNOI2008 玩具裝箱toy

先把程式放著,週末來更新 華麗的分割線 不想寫題解了。照著網上的題解推一邊即可 注意有的題解最後推倒出來明明是求上 下 凸包的形式,但配的圖卻是下 上 凸包的。不過斜率優化還不是搞的很懂。time limit 1 sec memory limit 162 mb submit 6661 solved ...

BZOJ4010 HNOI2005 菜餚製作

分析 這應該比較明顯是個拓撲排序。序號小的要放前面,但是會受到後面很多菜的限制。其實序號小的優先考慮和序號大的最後考慮應該是差不多的。不知道科不科學,求大神指正 把圖中的邊全部反向,拓撲 堆維護剩下的節點中度為0且序號最大的。把得到的序列反向輸出。include include using name...