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

Compiler report

input/code.cpp: In function 'll shash(std::__cxx11::string)':
input/code.cpp:35:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < cs.length(); ++i) {
                  ~~^~~~~~~~~~~~~
input/code.cpp: In function 'bool check(int, std::__cxx11::string)':
input/code.cpp:42:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < cs.length(); ++i) {
                  ~~^~~~~~~~~~~~~
input/code.cpp:44:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (si >= s.length()) {
       ~~~^~~~~~~~~~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:67:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < s.length(); ++i) {
                  ~~^~~~~~~~~~~~

Code

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("arch=skylake")

#include <iostream>
#include <string>
#include <vector>
#include <set>

using namespace std;
typedef long long ll;

ll A = 945829483;
ll B = 1000000007;

string s;
int q;
vector<string> pt;
set<int> lens;

set<ll> hashes;

ll h[50005];
ll p[50005];

ll ghash(int a, int b) {
	if (a == 0) return h[b];
	ll cres = (h[b]-h[a-1]*p[b-a+1])%B;
	if (cres < 0) cres += B;
	return cres;
}

ll shash(string cs) {
	ll ch = cs[0];
	for (int i = 1; i < cs.length(); ++i) {
		ch = (ch*A+cs[i])%B;
	}
	return ch;
}

bool check(int sp, string cs) {
	for (int i = 0; i < cs.length(); ++i) {
		int si = i+sp;
		if (si >= s.length()) {
			return false;
		}
		if (s[si] != cs[i]) {
			return false;
		}
	}
	return true;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> s;
	cin >> q;
	for (int i = 0; i < q; ++i) {
		string cs;
		cin >> cs;
		pt.push_back(cs);
		lens.insert(cs.length());
	}
	h[0] = s[0];
	p[0] = 1;
	for (int i = 1; i < s.length(); ++i) {
		h[i] = (h[i-1]*A+s[i])%B;
		p[i] = (p[i-1]*A)%B;
	}

	for (auto cl : lens) {
		for (int i = 0; i < ((int)s.length())-(cl-1); ++i) {
			ll chash = ghash(i, i+(cl-1));
			hashes.insert(chash);
		}
	}

	for (auto cs : pt) {
		ll chash = shash(cs);
		auto it = hashes.find(chash);
		if (it == hashes.end()) {
			cout << "NO\n";
			continue;
		}
		cout << "YES\n";
		//vector<int> cv = (*it).second;

		/*bool fnd = false;
		for (auto cp : cv) {
			if (check(cp, cs)) {
				cout << "YES\n";
				fnd = true;
				break;
			}
		}
		if (!fnd) {
			cout << "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:

input
OYWWPKKSYYCEHRWIKSKSEDPDBABIOF...

correct output
YES
YES
YES
NO
YES
...

user output
(empty)

Test 18

Verdict: ACCEPTED

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
(empty)

Test 20

Verdict:

input
QVQQQVBVQBVQQVIVIVQVQQBQQQBQQV...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 21

Verdict: ACCEPTED

input
STUZEDPGLJKQXBPYTQVKDXSVZAOYPO...

correct output
YES
NO
NO
NO
NO
...

user output
YES
NO
NO
NO
NO
...

Test 22

Verdict:

input
ZTJZMZMMJDJMMTMJNZDGJDJJMGTNZM...

correct output
NO
NO
NO
YES
NO
...

user output
(empty)

Test 23

Verdict:

input
JJTJJTTJTJTJTJTJTTTTTJTJJJTTTT...

correct output
YES
YES
YES
YES
NO
...

user output
(empty)

Test 24

Verdict:

input
QLQQLQQLQQQQQLQLQLLLQQQQLLLLLL...

correct output
YES
NO
YES
YES
YES
...

user output
(empty)

Test 25

Verdict:

input
EECBCBBECECBBBCEBEECBCCCECEBBC...

correct output
YES
YES
NO
NO
YES
...

user output
(empty)

Test 26

Verdict: ACCEPTED

input
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 27

Verdict:

input
GYUIJZOSVBNNHBJFZXJCTAGYHEOEYI...

correct output
YES
YES
YES
YES
NO
...

user output
(empty)

Test 28

Verdict:

input
PKMQQIWPQNFJFTBCLAMSMAZHLIQOKK...

correct output
YES
NO
YES
YES
NO
...

user output
(empty)

Test 29

Verdict:

input
UCYZBQRZDPTDFDICDCVZPDCUPGYZZF...

correct output
YES
YES
YES
NO
YES
...

user output
(empty)

Test 30

Verdict: ACCEPTED

input
PPPPPPPPPPPPPPPPPPPPPPPPPDPPDP...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 31

Verdict:

input
EEENNEEEENNNNEENENNNEENENEEENE...

correct output
YES
NO
YES
YES
YES
...

user output
(empty)

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:

input
IIIIOIIIFIIIIIIIOOIIIIOOIIIFII...

correct output
NO
NO
YES
NO
YES
...

user output
(empty)

Test 35

Verdict:

input
PPIPUIBPIIXUCICPIUCIOPXUXIIIUX...

correct output
YES
NO
YES
NO
YES
...

user output
(empty)

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:

input
PPPPLKPTKZPZPKGPPKZKPPPPPLPPSP...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 39

Verdict:

input
AAOOOOAAOOAAOOAOOOOAAOAAAAAAAO...

correct output
YES
NO
YES
YES
YES
...

user output
(empty)

Test 40

Verdict:

input
QSCCSWNRLLTWPQCGJSZCLPJJVUXJJR...

correct output
YES
YES
YES
YES
NO
...

user output
(empty)