牛客練習賽53(C題)

2021-09-28 13:49:46 字數 1511 閱讀 1903

題目描述

有n個長度為m的文字串,每個串只含有』0』和』1』。接下來有q次詢問,每次給出乙個長度為m的字串,且只含有』0』,『1』和』_』。如10_1_1。下劃線可以匹配』0』或』1』。即10_1_1可以匹配101111,101101,100111,100101四種串。每次詢問求出n個文字串中有多少個可以與當前詢問的串匹配。

輸入描述:

第一行輸入n,m

接下來n行,每行輸入乙個長度為m的01串表示乙個文字串。

第n+2行輸入q

接下來q行,每行輸入乙個長度為m的字串(只包含』0』,『1』,』_』)。

1<=n,m<=1000,1<=q<=3000。

輸出描述:

對於每次詢問,輸出n個文字串中有多少個與當前詢問的串匹配。

輸入

5 6

101101

011011

100110

111000

101111

21011_1

1__1__

輸出

2

3

一道用bitset的暴力題;

1.首先要先了解bitset是什麼學習部落格

2.知道了這個以後呢,只要按位模擬就行;還要用到一點位運算的知識

題解:

設三個二進位制串a,tag,q。若詢問的第i位為』_』,則q[i]=0,tag[i]=0。若第i位為0,則q[i]=1,tag[i]=0。若第i位為1,則q[i]=1,tag[i]=1。對於乙個確定的文字串,若第i位為0,a[i]=0,否則a[i]=1。對於每一位,若a[i]&q[i]==tag[i],則詢問的串和這個文字串匹配。然後bitset優化一下,或按位壓縮成long long。

**:

#include

#define ll long long

#define pa pair

const

int mod=

1e9+7;

using

namespace std;

bitset<

1005

>bi[

1005

],a,b;

//a為存值,b為期望得值

intmain()

}int q;

string ss;

scanf

("%d"

,&q)

;while

(q--

)else

else}}

int sum=0;

for(

int i=

1;i<=n;i++

) cout<}return0;

}

牛客練習賽53,C(字典樹 暴力)

想到了字典樹求解,但是tle了,後來分析發現當詢問的字串中 的個數一多的話,我這個演算法很容易就超時。不過因為我覺得這個演算法其實還是可以的,而且以前也有過這種情況,所以就分類討論,當詢問的字串中的 1 或 0 的個數超過20個時,我就用字典樹求解,否則我就暴力求解。結果是200ms過題。inclu...

牛客練習賽53 C 富豪凱匹配串

思路 bitset的簡單題,不幸的是當時的我並不知道bitset,c 的 bitset 在 bitset 標頭檔案中,它是一種類似陣列的結構,它的每乙個元素只能是 或 每個元素僅用 bit空間,省時省空間!include include include include using namespace...

牛客練習賽53 ABC

a 簡單dp include define ll long long using namespace std const ll mod 1e9 7 ll d 1000000 2 ll n intmain cout d n 1 d n 0 mod return0 b 分塊 include define...