題目描述t這道題是個毒瘤!!,我差不多卡了一天小h與小y剛剛參加完uoip外卡組的初賽,就迫不及待的跑出考場對答案。 「吔,我的答案和你都不一樣!」,小y說道,」我們去找神犇們問答案吧」。 外卡組試卷中共有m道判斷題,小h與小y一共從其他n個神犇那問了答案。之後又從小g那裡得知,這n個神犇中有p個考了滿分,q個考了零分,其他神犇不為滿分或零分。這可讓小y與小h犯了難。你能幫助他們還原出標準答案嗎?如有多解則輸出字典序最小的那個。無解輸出-1
。輸入格式
第一行四個整數n, m, p, q,意義如上描述。 接下來n行,每一行m個字元』n』或』y』,表示這題這個神犇的答案。
輸出格式
僅一行,乙個長度為m的字串或是-1
。樣例一
input22
20yyyy
output
yy限制與約定
對於30%的資料,n≤100n≤100
對於60%的資料,n≤5000,m≤100n≤5000,m≤100
對於100%的資料,1≤n≤30000,1≤m≤500,0≤p,q且p+q≤n1≤n≤30000,1≤m≤500,0≤p,q且p+q≤n
時間限制:1s1s
空間限制:256mb
首先掛乙個雙模掛鏈hs+自然溢位(其實單模也能過,但是聯絡下雙模)
1相當於手寫了個map(其實並不是,map底層是紅黑樹,複雜得多qaq)struct edgeo[n];
2struct
double_hashset35
void insert(int
from,intt)6
11int find(int
from,int
t)12
18 }map;
然後考慮這道題
這道題的思路就是
先將名字按字典序排一遍,然後列舉每乙個人,假如第乙個人的答案就是正確答案,看全對的等不等於p,然後看第乙個人的反有幾個,就是看有幾個人爆零了,看是不是q
如果是直接輸出
然後資料很毒瘤
會有p==0的點,這時候沒有人全對,那麼我們就只能列舉每個人,然後假如這個人爆零了,然後看這個人的答案是不是出現q次,再看全對的是不是0個(我就是弄反了卡了好久)
然後更毒的是p==0,q==0的點,這就更噁心,我的方法是搜尋,到每個地方都y或者n往下搜,到最後一層就驗證,注意先搜y再搜n,否則會字典序不是最優而且y和n都要算!!(這個地方我又卡了好久)
最後附乙個字典序比較公升級版
1bool
cmp(input a,input b)
2 這樣就ok,之前我寫麻煩了
注意取得模要開大一些
附**
1 #include2#define mod1 100003
3#define mod2 23333333333333333
4#define ull unsigned long long
5#define seed1 13131
6#define seed2 131
7#define n 30011
8using
namespace
std;
9int
n,m,p,q;
10char
sou[n];
11ull val1[n],val2[n],fan1[n],fan2[n];
12struct inputin
[n];
13int head[mod1+100
],i;
14bool yeah=0;15
struct edgeo[n];
16struct
double_hashset
1719
void insert(int
from,int
t)20
25int find(int
from,int
t)26
32}map;
33bool
cmp(input a,input b)
34 35 inline void
init()
36else
4852}53
map.insert(val1[i],val2[i]);54}
55}56void dfs(int
dep)
57else
7276}77
if(map.find(m1,m2)==0 && map.find(f1,f2)==0 && yeah==0
)78 79}
80 sou[dep]='y'
;81if(dep!=m)dfs(dep+1
);82
if(dep==m)
83else
9498}99
if(map.find(m1,m2)==0 && map.find(f1,f2)==0 && yeah==0
)100
101}
102}
103int
main()
104else
if(p==0 && q!=0
)117
printf("
\n");return0;
128}
129}
130 }else
131136
}
137}
138 puts("-1"
);139
return0;
140 }
字串雜湊(自然溢位模板)
如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母,大小寫敏感 請求出n個字串中共有多少個不同的字串。輸入格式 第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出格式 輸出包含一行,包含乙個整數,為不同的字串個數。輸入樣例 1 5 abcaaaa ...
RY哥查字典(字串雙模hash初步)
題目描述 ry哥最近新買了一本字典,他十分高興,因為這上面的單詞都十分的和諧,他天天查字典。輸入描述 1個整數n,表示字典裡面的單詞數量。接下來n行,每行乙個字串,表示乙個單詞。然後第n 2行,乙個整數m,表示要查的單詞數。接下來m行,每行乙個字串,表示乙個要查的單詞。輸出描述 對於每乙個要查的單詞...
建議1 正確操作字串
建議1 正確操作字串 字串應該是所有程式語言中使用最頻繁的一種基礎資料型別。如果使用不慎,我們就會為一次字串的操作所帶來的額外效能開銷而付出代價。本條建議將從兩個方面來 如何規避這類效能開銷 先來介紹第乙個方面,請看下面的兩行 string str1 str1 9 string str2 str2 ...