容易發現萬用字元中間的部分可以任意匹配,會造成的無法匹配的僅僅是前字尾,字首和字尾可以分別獨立處理。如果字串均有萬用字元,只需要按前/字尾長度排序然後暴力匹配就可以了。
問題在於存在無萬用字元的字串。顯然首先這些字串需要相同。剩下的字串只要都能與該字串匹配即可。然後就不會了。想了半天去看題解……暴力雜湊。為啥跑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...