CSES - E4590 2018 5 - Results
Submission details
Task:Family chronicle
Sender:natalia
Submission time:2018-10-19 19:44:27 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.03 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.03 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.02 sdetails
#11ACCEPTED0.02 sdetails
#12ACCEPTED0.03 sdetails
#13ACCEPTED0.03 sdetails
#14ACCEPTED0.03 sdetails
#15ACCEPTED0.03 sdetails
#16ACCEPTED0.04 sdetails
#17ACCEPTED0.12 sdetails
#18ACCEPTED0.06 sdetails
#19ACCEPTED0.13 sdetails
#20ACCEPTED0.14 sdetails
#21ACCEPTED0.05 sdetails
#22ACCEPTED0.14 sdetails
#23ACCEPTED0.12 sdetails
#24ACCEPTED0.14 sdetails
#25ACCEPTED0.09 sdetails
#26ACCEPTED0.03 sdetails
#27ACCEPTED0.15 sdetails
#28ACCEPTED0.14 sdetails
#29ACCEPTED0.06 sdetails
#30ACCEPTED0.04 sdetails
#31ACCEPTED0.13 sdetails
#32ACCEPTED0.04 sdetails
#33ACCEPTED0.07 sdetails
#34ACCEPTED0.06 sdetails
#35ACCEPTED0.15 sdetails
#36ACCEPTED0.04 sdetails
#37ACCEPTED0.05 sdetails
#38ACCEPTED0.14 sdetails
#39ACCEPTED0.14 sdetails
#40ACCEPTED0.04 sdetails

Code

#include <iostream>
#include <string>
#include <vector>
#include <math.h>

unsigned int simple_hash(std::string str, unsigned int A, unsigned int B, unsigned int* p){
	unsigned int l = str.length(), hash = 0;
	for(unsigned int i = 0; i < l; i++)
		hash = (hash + str[i] * p[l - i - 1]) % B;
	return hash;
}

void string_hash_preprocessing(std::string str, unsigned int* h, unsigned int* p, unsigned int A, unsigned int B){
	h[0] = str[0];
	p[0] = 1;
	for(unsigned int i = 1; i < str.length(); i++){
		h[i] = (h[i - 1] * A + str[i]) % B;
		p[i] = (p[i - 1] * A) % B;
	}
}

unsigned int hash(unsigned int* h, unsigned int* p, unsigned int B,  unsigned int a, unsigned int b){
	if(a == 0)
		return h[b];
	return (h[b] + B - (h[a - 1] * p[b - a + 1]) % B) % B;
}

int main(){
	std::string str;
	std::cin >> str;

	unsigned int n;
	std::cin >> n;

	std::vector<std::string> names;
	for(unsigned int i = 0; i < n; i++){
		std::string name;
		std::cin >> name;
		names.push_back(name);
	}

	const unsigned int l = str.length();
	unsigned int* h = (unsigned int*)malloc(l * sizeof(unsigned int));
	unsigned int* p = (unsigned int*)malloc(l * sizeof(unsigned int));
	const unsigned int A = 3;
	const unsigned int B = 97;

	string_hash_preprocessing(str, h, p, A, B);

	int results[n];
	for(unsigned int i = 0; i < n; i++){
		results[i] = -1;
	}

	for(unsigned int i = 0; i < n; i++){
		if(results[i] == -1){
			unsigned int name_length = names[i].length();

			unsigned int* hashes = (unsigned int*)malloc((l - name_length + 1) * sizeof(unsigned int));
			for(unsigned int j = 0; j < l - name_length + 1; j++)
				hashes[j] = hash(h, p, B, j, j + name_length - 1);

			for(unsigned int j = i; j < n; j++){
				if(names[j].length() == name_length){
					results[j] = 0;
					unsigned int my_hash = simple_hash(names[j], A, B, p);
					for(unsigned int k = 0; k < l - name_length + 1; k++){
						if(my_hash == hashes[k]){
							bool real_mathch = true;
							for(unsigned int x = 0; x < name_length; x++){
								if(names[j][x] != str[k + x]){
									real_mathch = false;
								}
							}
							if(real_mathch){
								results[j] = 1;
								break;
							}
						}
					}
				}
			}
		}
	}

	for(unsigned int i = 0; i < n; i++){
		std::cout << (results[i] == 1 ? "YES" : "NO") << "\n";
	}
	
	return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
NOLLFDD
4
D
F
GD
...

correct output
YES
YES
NO
YES

user output
YES
YES
NO
YES

Test 2

Verdict: ACCEPTED

input
NLHIJHFLL
4
LH
IJX
U
...

correct output
YES
NO
NO
NO

user output
YES
NO
NO
NO

Test 3

Verdict: ACCEPTED

input
KMLZVXCDAAK
5
CDAA
MAZ
DA
...

correct output
YES
NO
YES
NO
YES

user output
YES
NO
YES
NO
YES

Test 4

Verdict: ACCEPTED

input
YSKBJNAQNAXDCJ
6
C
YJKB
KC
...

correct output
YES
NO
NO
YES
YES
...

user output
YES
NO
NO
YES
YES
...

Test 5

Verdict: ACCEPTED

input
SUNSZYCIPNOKBKYOSH
6
KEK
ZQC
E
...

correct output
NO
NO
NO
YES
NO
...

user output
NO
NO
NO
YES
NO
...

Test 6

Verdict: ACCEPTED

input
PEEKYVCXKPRDFBIQBCMOOD
6
Z
I
WK
...

correct output
NO
YES
NO
YES
NO
...

user output
NO
YES
NO
YES
NO
...

Test 7

Verdict: ACCEPTED

input
WFFFWXFWFFXXXFWXWWWFWWFFWFFFWF...

correct output
YES
YES
NO
YES

user output
YES
YES
NO
YES

Test 8

Verdict: ACCEPTED

input
MMWTJEOANERJSZVWPTHGUPBVEIXFUH...

correct output
YES
YES
YES
NO
YES
...

user output
YES
YES
YES
NO
YES
...

Test 9

Verdict: ACCEPTED

input
SXSXXXXXXXXXXXXXSXXXXXXXXXXXXX...

correct output
YES
YES
YES
YES
YES

user output
YES
YES
YES
YES
YES

Test 10

Verdict: ACCEPTED

input
EWLWHMLGWWLBOZNDUOANXGJUDTFUVJ...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
YES
YES
YES
...

Test 11

Verdict: ACCEPTED

input
RRPPRRPPPPPRRPPPPPPPPPPRPRRRPP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 12

Verdict: ACCEPTED

input
ZWPOBWAZUUXXOHBHAPPLOOBAHZWPGO...

correct output
NO
YES
NO
NO
YES
...

user output
NO
YES
NO
NO
YES
...

Test 13

Verdict: ACCEPTED

input
KQOANBJEFBYZKANIJUCUXAUEPKJFGO...

correct output
YES
NO
YES
YES
NO
...

user output
YES
NO
YES
YES
NO
...

Test 14

Verdict: ACCEPTED

input
KLEFLAALELPKWAPEKKKAPLAEFEKATL...

correct output
NO
YES
YES
YES
YES
...

user output
NO
YES
YES
YES
YES
...

Test 15

Verdict: ACCEPTED

input
ZKGGKUKKKGKGGKUGUUKKGUGGKUOKGG...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 16

Verdict: ACCEPTED

input
RRRRRRRRRRRVRQRRQRRRRRRRRQRRRR...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 17

Verdict: ACCEPTED

input
OYWWPKKSYYCEHRWIKSKSEDPDBABIOF...

correct output
YES
YES
YES
NO
YES
...

user output
YES
YES
YES
NO
YES
...

Test 18

Verdict: ACCEPTED

input
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 19

Verdict: ACCEPTED

input
GGGGGGWGWGGWWGWGWGWWGWWWGWGGGW...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 20

Verdict: ACCEPTED

input
QVQQQVBVQBVQQVIVIVQVQQBQQQBQQV...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 21

Verdict: ACCEPTED

input
STUZEDPGLJKQXBPYTQVKDXSVZAOYPO...

correct output
YES
NO
NO
NO
NO
...

user output
YES
NO
NO
NO
NO
...

Test 22

Verdict: ACCEPTED

input
ZTJZMZMMJDJMMTMJNZDGJDJJMGTNZM...

correct output
NO
NO
NO
YES
NO
...

user output
NO
NO
NO
YES
NO
...

Test 23

Verdict: ACCEPTED

input
JJTJJTTJTJTJTJTJTTTTTJTJJJTTTT...

correct output
YES
YES
YES
YES
NO
...

user output
YES
YES
YES
YES
NO
...

Test 24

Verdict: ACCEPTED

input
QLQQLQQLQQQQQLQLQLLLQQQQLLLLLL...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
YES
YES
YES
...

Test 25

Verdict: ACCEPTED

input
EECBCBBECECBBBCEBEECBCCCECEBBC...

correct output
YES
YES
NO
NO
YES
...

user output
YES
YES
NO
NO
YES
...

Test 26

Verdict: ACCEPTED

input
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 27

Verdict: ACCEPTED

input
GYUIJZOSVBNNHBJFZXJCTAGYHEOEYI...

correct output
YES
YES
YES
YES
NO
...

user output
YES
YES
YES
YES
NO
...

Test 28

Verdict: ACCEPTED

input
PKMQQIWPQNFJFTBCLAMSMAZHLIQOKK...

correct output
YES
NO
YES
YES
NO
...

user output
YES
NO
YES
YES
NO
...

Test 29

Verdict: ACCEPTED

input
UCYZBQRZDPTDFDICDCVZPDCUPGYZZF...

correct output
YES
YES
YES
NO
YES
...

user output
YES
YES
YES
NO
YES
...

Test 30

Verdict: ACCEPTED

input
PPPPPPPPPPPPPPPPPPPPPPPPPDPPDP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 31

Verdict: ACCEPTED

input
EEENNEEEENNNNEENENNNEENENEEENE...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
YES
YES
YES
...

Test 32

Verdict: ACCEPTED

input
FWVMCMYKALJMZEQPKUCRTUGDNUJOHB...

correct output
NO
YES
NO
YES
YES
...

user output
NO
YES
NO
YES
YES
...

Test 33

Verdict: ACCEPTED

input
UUUUUUUUUUUUUUUUUUUUHUUUUUUUUU...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 34

Verdict: ACCEPTED

input
IIIIOIIIFIIIIIIIOOIIIIOOIIIFII...

correct output
NO
NO
YES
NO
YES
...

user output
NO
NO
YES
NO
YES
...

Test 35

Verdict: ACCEPTED

input
PPIPUIBPIIXUCICPIUCIOPXUXIIIUX...

correct output
YES
NO
YES
NO
YES
...

user output
YES
NO
YES
NO
YES
...

Test 36

Verdict: ACCEPTED

input
AYYYYAYAAAAAJAAAWAAYAYAYIAWYYY...

correct output
YES
YES
NO
YES
YES
...

user output
YES
YES
NO
YES
YES
...

Test 37

Verdict: ACCEPTED

input
AAAEAANNANEAEAEAPEAAAAAEAAAEAA...

correct output
NO
NO
YES
NO
YES
...

user output
NO
NO
YES
NO
YES
...

Test 38

Verdict: ACCEPTED

input
PPPPLKPTKZPZPKGPPKZKPPPPPLPPSP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 39

Verdict: ACCEPTED

input
AAOOOOAAOOAAOOAOOOOAAOAAAAAAAO...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
YES
YES
YES
...

Test 40

Verdict: ACCEPTED

input
QSCCSWNRLLTWPQCGJSZCLPJJVUXJJR...

correct output
YES
YES
YES
YES
NO
...

user output
YES
YES
YES
YES
NO
...