CSES - E4590 2018 5 - Results
Submission details
Task:Family chronicle
Sender:natalia
Submission time:2018-10-13 15:54:31 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.03 sdetails
#5ACCEPTED0.02 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.03 sdetails
#8ACCEPTED0.01 sdetails
#90.02 sdetails
#10ACCEPTED0.02 sdetails
#110.02 sdetails
#120.02 sdetails
#130.01 sdetails
#140.02 sdetails
#150.04 sdetails
#160.06 sdetails
#170.14 sdetails
#180.09 sdetails
#190.15 sdetails
#200.16 sdetails
#210.06 sdetails
#220.16 sdetails
#230.15 sdetails
#240.15 sdetails
#250.10 sdetails
#260.05 sdetails
#270.16 sdetails
#280.15 sdetails
#290.07 sdetails
#300.06 sdetails
#310.15 sdetails
#320.06 sdetails
#330.12 sdetails
#340.07 sdetails
#350.17 sdetails
#360.06 sdetails
#370.05 sdetails
#380.15 sdetails
#390.15 sdetails
#400.06 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:78:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
        for(int x = 0; x < name_length; x++){
                       ~~^~~~~~~~~~~~~

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 l = str.length(), hash = 0;
	for(unsigned int i = 0; i < l; i++){
		hash += str[i] * pow(A, (l - i - 1));
		hash %= B;
	}
	return hash;
}

void string_hash_preprocessing(std::string str, unsigned int* h, unsigned int* p, unsigned int A, unsigned int B){
	unsigned int l = str.length();
	h[0] = str[0];
	p[0] = 1;
	for(unsigned int i = 1; i < l; 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);
				//std::cout << " hash (" << j << "," << j + name_length << ") = " << hashes[j] << "\n";
			}

			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);
					//std::cout << "my_hash=" << my_hash << "\n";

					for(unsigned int k = 0; k < l - name_length + 1; k++){
						if(my_hash == hashes[k]){
							bool real_mathch = true;
							for(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:

input
SXSXXXXXXXXXXXXXSXXXXXXXXXXXXX...

correct output
YES
YES
YES
YES
YES

user output
YES
YES
NO
NO
NO

Test 10

Verdict: ACCEPTED

input
EWLWHMLGWWLBOZNDUOANXGJUDTFUVJ...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
YES
YES
YES
...

Test 11

Verdict:

input
RRPPRRPPPPPRRPPPPPPPPPPRPRRRPP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 12

Verdict:

input
ZWPOBWAZUUXXOHBHAPPLOOBAHZWPGO...

correct output
NO
YES
NO
NO
YES
...

user output
NO
YES
NO
NO
NO
...

Test 13

Verdict:

input
KQOANBJEFBYZKANIJUCUXAUEPKJFGO...

correct output
YES
NO
YES
YES
NO
...

user output
NO
NO
YES
YES
NO
...

Test 14

Verdict:

input
KLEFLAALELPKWAPEKKKAPLAEFEKATL...

correct output
NO
YES
YES
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 15

Verdict:

input
ZKGGKUKKKGKGGKUGUUKKGUGGKUOKGG...

correct output
YES
YES
YES
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 16

Verdict:

input
RRRRRRRRRRRVRQRRQRRRRRRRRQRRRR...

correct output
YES
YES
YES
YES
YES
...

user output
NO
YES
YES
YES
YES
...

Test 17

Verdict:

input
OYWWPKKSYYCEHRWIKSKSEDPDBABIOF...

correct output
YES
YES
YES
NO
YES
...

user output
NO
NO
NO
NO
NO
...

Test 18

Verdict:

input
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 19

Verdict:

input
GGGGGGWGWGGWWGWGWGWWGWWWGWGGGW...

correct output
YES
YES
YES
YES
YES
...

user output
NO
YES
NO
YES
YES
...

Test 20

Verdict:

input
QVQQQVBVQBVQQVIVIVQVQQBQQQBQQV...

correct output
YES
YES
YES
YES
YES
...

user output
NO
NO
YES
YES
NO
...

Test 21

Verdict:

input
STUZEDPGLJKQXBPYTQVKDXSVZAOYPO...

correct output
YES
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 22

Verdict:

input
ZTJZMZMMJDJMMTMJNZDGJDJJMGTNZM...

correct output
NO
NO
NO
YES
NO
...

user output
NO
NO
NO
YES
NO
...

Test 23

Verdict:

input
JJTJJTTJTJTJTJTJTTTTTJTJJJTTTT...

correct output
YES
YES
YES
YES
NO
...

user output
YES
NO
YES
YES
NO
...

Test 24

Verdict:

input
QLQQLQQLQQQQQLQLQLLLQQQQLLLLLL...

correct output
YES
NO
YES
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 25

Verdict:

input
EECBCBBECECBBBCEBEECBCCCECEBBC...

correct output
YES
YES
NO
NO
YES
...

user output
NO
NO
NO
NO
NO
...

Test 26

Verdict:

input
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

correct output
YES
YES
YES
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 27

Verdict:

input
GYUIJZOSVBNNHBJFZXJCTAGYHEOEYI...

correct output
YES
YES
YES
YES
NO
...

user output
YES
NO
YES
NO
NO
...

Test 28

Verdict:

input
PKMQQIWPQNFJFTBCLAMSMAZHLIQOKK...

correct output
YES
NO
YES
YES
NO
...

user output
NO
NO
NO
NO
NO
...

Test 29

Verdict:

input
UCYZBQRZDPTDFDICDCVZPDCUPGYZZF...

correct output
YES
YES
YES
NO
YES
...

user output
NO
NO
NO
NO
NO
...

Test 30

Verdict:

input
PPPPPPPPPPPPPPPPPPPPPPPPPDPPDP...

correct output
YES
YES
YES
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 31

Verdict:

input
EEENNEEEENNNNEENENNNEENENEEENE...

correct output
YES
NO
YES
YES
YES
...

user output
YES
NO
NO
NO
NO
...

Test 32

Verdict:

input
FWVMCMYKALJMZEQPKUCRTUGDNUJOHB...

correct output
NO
YES
NO
YES
YES
...

user output
NO
YES
NO
NO
NO
...

Test 33

Verdict:

input
UUUUUUUUUUUUUUUUUUUUHUUUUUUUUU...

correct output
YES
YES
YES
YES
YES
...

user output
NO
NO
NO
NO
YES
...

Test 34

Verdict:

input
IIIIOIIIFIIIIIIIOOIIIIOOIIIFII...

correct output
NO
NO
YES
NO
YES
...

user output
NO
NO
NO
NO
NO
...

Test 35

Verdict:

input
PPIPUIBPIIXUCICPIUCIOPXUXIIIUX...

correct output
YES
NO
YES
NO
YES
...

user output
NO
NO
YES
NO
NO
...

Test 36

Verdict:

input
AYYYYAYAAAAAJAAAWAAYAYAYIAWYYY...

correct output
YES
YES
NO
YES
YES
...

user output
NO
NO
NO
NO
NO
...

Test 37

Verdict:

input
AAAEAANNANEAEAEAPEAAAAAEAAAEAA...

correct output
NO
NO
YES
NO
YES
...

user output
NO
NO
YES
NO
NO
...

Test 38

Verdict:

input
PPPPLKPTKZPZPKGPPKZKPPPPPLPPSP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
NO
NO
...

Test 39

Verdict:

input
AAOOOOAAOOAAOOAOOOOAAOAAAAAAAO...

correct output
YES
NO
YES
YES
YES
...

user output
NO
NO
YES
NO
YES
...

Test 40

Verdict:

input
QSCCSWNRLLTWPQCGJSZCLPJJVUXJJR...

correct output
YES
YES
YES
YES
NO
...

user output
NO
NO
NO
NO
NO
...