Sereja ans Anagrams
2017-03-11 00:27
471 查看
Sereja has two sequences a and b and number p. Sequence a consists of n integers a1, a2, …, an. Similarly, sequence b consists of m integers b1, b2, …, bm. As usual, Sereja studies the sequences he has. Today he wants to find the number of positions q (q + (m - 1)·p ≤ n; q ≥ 1), such that sequence b can be obtained from sequence aq, aq + p, aq + 2p, …, aq + (m - 1)p by rearranging elements.
Sereja needs to rush to the gym, so he asked to find all the described positions of q.
Input
The first line contains three integers n, m and p (1 ≤ n, m ≤ 2·105, 1 ≤ p ≤ 2·105). The next line contains n integers a1, a2, …, an (1 ≤ ai ≤ 109). The next line contains m integers b1, b2, …, bm (1 ≤ bi ≤ 109).
Output
In the first line print the number of valid qs. In the second line, print the valid values in the increasing order.
Example
Input
5 3 1
1 2 3 2 1
1 2 3
Output
2
1 3
Input
6 3 2
1 3 2 2 3 1
1 2 3
Output
2
1 2
题意 给出a b两个字符串,还有k间隔。
从a中把每k个间隔的字符连在一起(随便排序),问能组成b的起点位置有多少个。stl的应用,关于map,当map里面的元素相等而且个数相等的时候map类型会完全相等。当元素为0的时候一定要用st.erase(元素值)删除。这样时间复杂度是on
Sereja needs to rush to the gym, so he asked to find all the described positions of q.
Input
The first line contains three integers n, m and p (1 ≤ n, m ≤ 2·105, 1 ≤ p ≤ 2·105). The next line contains n integers a1, a2, …, an (1 ≤ ai ≤ 109). The next line contains m integers b1, b2, …, bm (1 ≤ bi ≤ 109).
Output
In the first line print the number of valid qs. In the second line, print the valid values in the increasing order.
Example
Input
5 3 1
1 2 3 2 1
1 2 3
Output
2
1 3
Input
6 3 2
1 3 2 2 3 1
1 2 3
Output
2
1 2
题意 给出a b两个字符串,还有k间隔。
从a中把每k个间隔的字符连在一起(随便排序),问能组成b的起点位置有多少个。stl的应用,关于map,当map里面的元素相等而且个数相等的时候map类型会完全相等。当元素为0的时候一定要用st.erase(元素值)删除。这样时间复杂度是on
#include <bits/stdc++.h> using namespace std; int n,m,p; bool vis[201010]; int a[201010]; map<int,int> mp,tp; int ans=0; void solve(int s) { tp.clear(); queue<int> Q; for(int i=s;i<=n;i+=p) { Q.push(i);tp[a[i]]++; if(Q.size()==m) { i 4000 f(mp==tp) { vis[Q.front()]=1; ans++; } int v=a[Q.front()];Q.pop(); if(--tp[v]==0) tp.erase(v); } } } int main() { cin>>n>>m>>p; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); vis[i]=false; } for(int i=1;i<=m;i++) { int x; cin>>x; mp[x]++; } ans=0; for(int i=1;i<=p;i++) solve(i); printf("%d\n",ans ); int cnt=0; for(int i=1;i<=n;i++) { if(vis[i]) { if(cnt>0) printf(" "); printf("%d", i); cnt++; } } }
相关文章推荐
- Codeforces Round #215 (Div. 2) D. Sereja ans Anagrams
- Codeforces Round #215_div2_D. Sereja ans Anagrams
- Sereja ans Anagrams
- CodeForces 367B Sereja ans Anagrams (map)
- Codeforces Round #215 (Div. 1) B. Sereja ans Anagrams 匹配
- 解题报告:CodeForces 367B Sereja ans Anagrams
- CodeForces - 367B Sereja ans Anagrams (map)
- Codeforces 367B Sereja ans Anagrams 详细题解(map应用+维护长度)
- Codeforces Round #215 (Div. 2) D.Sereja ans Anagrams(巧用stl+利用之前数据的思想)
- Sereja ans Anagrams CodeForces - 367B (queue + map)
- CodeForces 367B. Sereja ans Anagrams(经典STL)
- B. Sereja ans Anagrams----map维护queue
- CodeForces 367B. Sereja ans Anagrams
- Codeforces 367B Sereja ans Anagrams 【map维护queue】
- CodeForces - 367B Sereja ans Anagrams
- codeforces 367B Sereja ans Anagrams
- Sereja ans Anagrams(map)
- Codeforces--367D--D. Sereja ans Anagrams(STL)(模拟)
- CodeForces - 367B Sereja ans Anagrams(队列+map)
- Codeforces Round #215 (Div. 2) D. Sereja ans Anagrams