Neka su date dve binarne niske \(S\) i \(T\). Prebrojati koliko postoji cikličnih permutacija niske \(T\) takvih da sa niskom \(S\) primenom operacije XOR daju rezultat 0.
Sa standardnog ulaza se unose 2 niske \(S\) i \(T\).
Na standardni izlaz ispisati broj cikličnih permutacija koje zadovoljavaju navedeni uslov.
101 101
1
U ovom bloku se opisuje glavno rešenje zadatka.
#include<iostream>
#include<vector>
using namespace std;
int> calculate_z_array(const string &s) {
vector<int n = s.size();
int> z(n);
vector<int l = 0;
int r = 0;
for (int i = 1; i < n; i++) {
// Ako je tekuca pozicija unutar opsega [l,r] koristimo prethodno izracunatu vrednost za inicijalizaciju
if (i <= r) {
1, z[i - l]);
z[i] = min(r - i +
}
// Preskacemo proveru karaktera od pozicije i do pozicije z[i].
// Poredimo karakter po karakter u niski i sve dok se karakteri poklapaju povecavamo vrednost z[i]
while (i + z[i] < n && s[z[i]] == s[i + z[i]]) {
z[i]++;
}
// Ako je nova vrednost desnog kraja intervala poklapanja veca od prethodne vrednosti, azuriramo interval [l,r]
if (i + z[i] - 1 > r) {
l = i;1;
r = i + z[i] -
}
}
return z;
}
int main(){
string s, t;
cin >> s >> t;
0, t.size() - 1);
string t1 = t + t.substr(
"#" + t1;
string s1 = s +
int> z_array = calculate_z_array(s1);
vector<
int counter = 0;
for (int x : z_array) {
if (x == s.size()) {
counter++;
}
}
std::cout << counter << "\n";
return 0;
}