Skip to content
Snippets Groups Projects
Commit eb72d788 authored by Bruno Freitas Tissei's avatar Bruno Freitas Tissei
Browse files

Add MCAIRO and UVA10679_kmp

parent 5719bbc1
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
/// - search: O(n) /// - search: O(n)
/// Space: O(n + m) /// Space: O(n + m)
/// ///
/// Status: Tested (URI2350) /// Status: Tested (URI2350,UVA10679)
struct KMP { struct KMP {
string patt; string patt;
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
/// - update: O(log^2 n) /// - update: O(log^2 n)
/// - query: O(log^2 n) /// - query: O(log^2 n)
/// Space: O(n^2) /// Space: O(n^2)
///
/// Status: Tested (MCAIRO)
struct BIT2D { struct BIT2D {
int N, M; int N, M;
......
#include <bits/stdc++.h>
#define EPS 1e-6
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define fi first
#define se second
#define pb push_back
#define ende '\n'
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mset(x, y) memset(&x, (y), sizeof(x))
using namespace std;
using ll = long long;
using ii = pair<int,int>;
struct BIT2D {
int N, M;
vector<vector<int>> tree;
BIT2D(int N, int M) :
N(N), M(M), tree(N, vector<int>(M))
{ init(); }
void init() {
for (auto &i : tree)
fill(all(i), 0);
}
int query(int idx, int idy) {
int sum = 0;
for (; idx > 0; idx -= (idx & -idx))
for (int m = idy; m > 0; m -= (m & -m))
sum = max(sum, tree[idx][m]);
return sum;
}
void update(int idx, int idy, int val) {
for (; idx < N; idx += (idx & -idx))
for (int m = idy; m < M; m += (m & -m))
tree[idx][m] = max(tree[idx][m], val);
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t; cin >> t;
for (int cas = 1; cas <= t; ++cas) {
BIT2D bit(1001, 1001);
int n; cin >> n;
vector<int> x(n), y(n);
for (int i = 0; i < n; ++i)
cin >> x[i] >> y[i];
int ans = 0;
for (int i = 0; i < n; ++i) {
int val = 1 + bit.query(x[i], y[i]);
bit.update(x[i], y[i], val);
ans = max(ans, val);
}
cout << ans << ende;
}
return 0;
}
#include <bits/stdc++.h>
#define EPS 1e-6
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define fi first
#define se second
#define pb push_back
#define ende '\n'
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mset(x, y) memset(&x, (y), sizeof(x))
using namespace std;
using ll = long long;
using ii = pair<int,int>;
struct KMP {
string patt;
vector<int> table;
KMP(string patt) :
patt(patt), table(patt.size()+1)
{ preprocess(); }
void preprocess() {
fill(all(table), -1);
for (int i = 0, j = -1; i < patt.size(); ++i) {
while (j >= 0 && patt[i] != patt[j])
j = table[j];
table[i + 1] = ++j;
}
}
bool search(const string &txt) {
bool found = false;
for (int i = 0, j = 0; i < txt.size(); ++i) {
while (j >= 0 && txt[i] != patt[j])
j = table[j];
j++;
if (j == patt.size()) {
found = true;
j = table[j];
}
}
return found;
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t; cin >> t;
for (int cas = 1; cas <= t; ++cas) {
string s; cin >> s;
int q; cin >> q;
for (int i = 0; i < q; ++i) {
string t; cin >> t;
KMP kmp(t);
cout << ((kmp.search(s)) ? "y" : "n") << ende;
}
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment