제출 #1187181

#제출 시각아이디문제언어결과실행 시간메모리
1187181aminjon__Matching (CEOI11_mat)C++17
36 / 100
911 ms69420 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define endl '\n' typedef unsigned int uint; typedef unsigned int ll; typedef long double ld; typedef unsigned long long ull; using namespace std; const ll maxn = 1e6; const ll modd = 65537 ; const ll modd2 = 65539; const ll p1 = 10007 ; const ll p2 = 10009; ll P1[maxn + 1]; ll M; ll f_H1(vector<ll> &A) { ll res = 0; for (int i = 0; i < A.size(); i++) { res += (A[i]%modd * P1[i]) % modd; res %= modd; } return res; } ll h1[2+maxn*4]; ll sz[2+maxn*4]; void update(ll need, ll val) { ll cur = M + need - 1; h1[cur] =(val%modd); sz[cur] = (val != 0); cur/=2; while(cur){ h1[cur] = (h1[cur+cur] + (h1[cur+cur+1] * P1[ sz[cur+cur] ])%modd)%modd; sz[cur]=sz[cur+1+cur]+sz[cur+cur]; cur/=2; } } signed main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); ll n, m; cin >> n >> m; P1[0] = 1; ll add1 = 1, add2 = 1; for (int i = 1; i <= 1 + n; i++) { P1[i] = (P1[i - 1] * p1) % modd; if (i < n) { add1 = (add1 + P1[i]) % modd; } } M =m; if( (m & (m-1))){ M = (1 << ll(log2(m)+1) ); } vector<ll> a(n), b(m); map<ll, ll> mp; for (int i = 0; i < n; i++) cin >> a[i]; for (int j = 0; j < m; j++) { cin >> b[j]; mp[b[j]]; } int ind = 0; for (auto &g : mp) { ind++; g.second = ind; } ll Hx1 = f_H1(a); ll kol = 0; vector<ll> ans; for (int j = 0; j < m; j++) { update(mp[b[j]], j + 1); if (sz[1] > n) { update(mp[b[j - n]], 0); Hx1 = (Hx1 + add1) % modd; } if (sz[1] < n) continue; if (h1[1] == Hx1) { ans.push_back(j - n + 2); } } cout << ans.size() << endl; for (auto g : ans) cout << g << ' '; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...