Pagini recente » Cod sursa (job #2790562) | Cod sursa (job #3174179) | Cod sursa (job #320344) | Cod sursa (job #494695) | Cod sursa (job #3165694)
/*
"care a facut teste cu Lattice reduction attack e ciudat"
"linistiti va putin"
- 2023 -
*/
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
using namespace std;
struct Node
{
int freq;
int traffic;
int muchii[26];
};
vector<Node> trie;
void ins(string s, int pos, Node &node)
{
node.traffic++;
//debug(s);
//debug(pos);
//debug(node.traffic);
if (node.muchii[s[pos]-'a'+1]==0)
{
trie.push_back({0,0,0});
node.muchii[s[pos]-'a'+1]=trie.size()-1;
}
if (pos!=(s.size()-1))
ins(s,pos+1,trie[node.muchii[s[pos]-'a'+1]]);
else
node.freq++;
}
void ers(string s, int pos, Node &node)
{
node.traffic--;
if (pos!=(s.size()-1))
ers(s,pos+1,trie[node.muchii[s[pos]-'a'+1]]);
else
node.freq--;
}
int ans;
void app(string s, int pos, Node node)
{
if (pos!=(s.size()-1) && node.muchii[s[pos]-'a'+1]!=0)
app(s,pos+1,trie[node.muchii[s[pos]-'a'+1]]);
else
{
ans=node.freq;
return;
}
}
int lungime;
void lgpref(string s, int pos, Node node)
{
if (node.traffic>1)
lungime++;
else
return;
if (pos!=(s.size()-1))
lgpref(s,pos+1,trie[node.muchii[s[pos]-'a'+1]]);
else
return;
}
int main()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int type;
string s;
trie.push_back({0,0,0});
while (fin >> type >> s)
{
if (type==0)
{
ins(s,0,trie[0]);
}
if (type==1)
{
ers(s,0,trie[0]);
}
if (type==2)
{
ans=0;
app(s,0,trie[0]);
fout << ans << "\n";
}
if (type==3)
{
lungime=0;
ans=0;
app(s,0,trie[0]);
if (ans==0)
{
ins(s,0,trie[0]);
lgpref(s,0,trie[0]);
ers(s,0,trie[0]);
}
else
{
lgpref(s,0,trie[0]);
}
fout << lungime << "\n";
}
}
}