Watto and Mechanism Codeforces Round #291 (Div. 2)

C. Watto and Mechanism

time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Watto, the owner of a spare parts store, has recently got an order for the mechanism that can process strings in a certain way. Initially the memory of the mechanism is filled with n strings. Then the mechanism should be able to process queries of the following type: "Given string s, determine if the memory of the mechanism contains string t that consists of the same number of characters as s and differs from s in exactly one position".

Watto has already compiled the mechanism, all that‘s left is to write a program for it and check it on the data consisting of n initial lines and m queries. He decided to entrust this job to you.

Input

The first line contains two non-negative numbers n and m (0?≤?n?≤?3·105, 0?≤?m?≤?3·105) — the number of the initial strings and the number of queries, respectively.

Next follow n non-empty strings that are uploaded to the memory of the mechanism.

Next follow m non-empty strings that are the queries to the mechanism.

The total length of lines in the input doesn‘t exceed 6·105. Each line consists only of letters ‘a‘, ‘b‘, ‘c‘.

Output

For each query print on a single line "YES" (without the quotes), if the memory of the mechanism contains the required string, otherwise print "NO" (without the quotes).

Examples

input

Copy

2 3aaaaaacacacaaabaaccacacccaaac

output

Copy

YESNONO

暴力哈希  卡种子  CF出题人  就是强  HASH各种卡种子

  

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4
 5 const LL seed = 257;
 6 const LL mod = 1e9 + 7;
 7 const int maxn = 6e5 + 10;
 8 int n,m;
 9 LL p[maxn];
10 char str[maxn];
11 set<LL>st;
12 void init(){
13     p[0]=1;
14     for (int i=1 ;i<maxn ;i++)
15         p[i]=p[i-1]*seed%mod;
16 }
17 LL Hash(char s[]){
18     LL ret=0;
19     for (int i=0 ; s[i] ;i++)
20         ret=(ret*seed+s[i])%mod;
21     return ret;
22 }
23 int check(char s[]){
24     LL h=Hash(s);
25     int len=strlen(s);
26     for (int i=0 ;i<len ;i++){
27         for (int j=‘a‘ ; j<=‘c‘ ;j++) {
28             if (j==s[i]) continue;
29             LL now=((((j-s[i])*p[len-1-i]%mod)+mod)+h)%mod;
30             if (st.find(now)!=st.end()) return 1;
31         }
32     }
33     return 0;
34 }
35 int main() {
36     scanf("%d%d", &n, &m);
37     init();
38     for (int i = 0 ; i < n ; i++) {
39         scanf("%s", str);
40         st.insert(Hash(str));
41     }
42     for (int i = 0 ; i < m ; i++) {
43         scanf("%s", str);
44         if (check(str)) printf("YES\n");
45         else printf("NO\n");
46     }
47     return 0;
48 }

原文地址:https://www.cnblogs.com/qldabiaoge/p/9174539.html

时间: 2024-08-08 05:36:37

Watto and Mechanism Codeforces Round #291 (Div. 2)的相关文章

hash+set Codeforces Round #291 (Div. 2) C. Watto and Mechanism

题目传送门 1 /* 2 hash+set:首先把各个字符串的哈希值保存在set容器里,然后对于查询的每一个字符串的每一位进行枚举 3 用set的find函数查找是否存在替换后的字符串,理解后并不难.另外,我想用64位的自然溢出wa了,不清楚 4 */ 5 /************************************************ 6 * Author :Running_Time 7 * Created Time :2015-8-5 13:05:49 8 * File N

C. Watto and Mechanism 字典树 Codeforces Round #291 (Div. 2)

C. Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Watto, the owner of a spare parts store, has recently got an order for the mechanism that can process strings in a ce

Codeforces Round #291 (Div. 2)解题报告A.B.C.D

A - Chewbaсca and Number 大于4的倒置,小于等于4的不倒置.注意第一位如果是9则不倒置. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set>

Codeforces Round #291 (Div. 2)---C. Watto and Mechanism

Watto, the owner of a spare parts store, has recently got an order for the mechanism that can process strings in a certain way. Initially the memory of the mechanism is filled with n strings. Then the mechanism should be able to process queries of th

Codeforces Round #291 (Div. 2) C - Watto and Mechanism 字符串

[题意]给n个字符串组成的集合,然后有m个询问(0 ≤ n ≤ 3·105, 0 ≤ m ≤ 3·105) ,每个询问都给出一个字符串s,问集合中是否存在一个字符串t,使得s和t长度相同,并且仅有一个字符不同.(字符串总长度为6·105),所有字符只有a,b,c. [题解]因为只有三种字符,用Trie最合适.先把n个字符串插入到Trie中.然后每读入一个字符串,首先枚举差异字符的位置,依次替换为另外两种字符,并检查是否合法.如果合法就直接输出YES. 显然每替换一个字符就从头检查一遍太浪费时间,

Codeforces Round #291 (Div. 2) E - Darth Vader and Tree (DP+矩阵快速幂)

这题想了好长时间,果断没思路..于是搜了一下题解.一看题解上的"快速幂"这俩字,不对..这仨字..犹如醍醐灌顶啊...因为x的范围是10^9,所以当时想的时候果断把dp递推这一方法抛弃了.我怎么就没想到矩阵快速幂呢.......还是太弱了..sad..100*100*100*log(10^9)的复杂度刚刚好. 于是,想到了矩阵快速幂后,一切就变得简单了.就可以把距离<=x的所有距离的点数都通过DP推出来,然后一个快速幂就解决了. 首先DP递推式很容易想到.递推代码如下: for(

Codeforces Round #291 (Div. 2)

A 题意:给出变换规则,单个数字t可以变成9-t,然后给出一个数,问最小能够变成多少. 自己做的时候理解成了不能输出前导0,但是题目的本意是不能有前导0(即最高位不能是0,其余位数按照规则就好) 555555---读题仔细o(╯□╰)o 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 char

Codeforces Round #291 (Div. 2)——B&lt;set&gt;—— Han Solo and Lazer Gun

There are n Imperial stormtroopers on the field. The battle field is a plane with Cartesian coordinate system. Each stormtrooper is associated with his coordinates (x, y) on this plane. Han Solo has the newest duplex lazer gun to fight these stormtro

Codeforces Round #291 (Div. 2)(B)

水题但是WA2发了,要特别考虑斜率不存在的情况,最后的答案就是斜率不同的数目,set一下 #include<cstdio> #include<cstring> #include <iostream> #include<queue> #include <cmath> #include <set> using namespace std; const int maxn=65000+10; const int INF=1<<30