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{
const 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) {
[i] = min(r - i + 1, z[i - l]);
z}
// 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]]) {
[i]++;
z}
// Ako je nova vrednost desnog kraja intervala poklapanja veca od
// prethodne vrednosti, azuriramo interval [l,r]
if (i + z[i] - 1 > r) {
= i;
l = i + z[i] - 1;
r }
}
return z;
}
int main()
{
, t;
string s>> s >> t;
cin
auto text = s + "#" + t + t.substr(0, t.size() - 1);
auto z_array = calculate_z_array(text);
int counter = 0;
for (int x : z_array) {
if (x == s.size()) {
++;
counter}
}
<< counter << endl;
cout
return 0;
}