CodeForces 367B Sereja ans Anagrams
2017-07-07 11:02
501 查看
Description
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.
Sample Input
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
思路:
首先map可以直接用等号来判断两个map是否一样。
其次,我们枚举起点,而且外层只用从1枚举到p,内后像队列一样删掉对头,队尾插入来维护map,即可;
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.
Sample Input
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
思路:
首先map可以直接用等号来判断两个map是否一样。
其次,我们枚举起点,而且外层只用从1枚举到p,内后像队列一样删掉对头,队尾插入来维护map,即可;
#include <cstdio> #include <map> #include <algorithm> using namespace std; int n,m,p; int cnt=0,q; int a[2000090]; map<int,int> tmp1,tmp2; int ans[2000090]; int main() { scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int t; for(int i=0;i<m;i++) { scanf("%d",&t); tmp1[t]++; } for(int i=1;i<=p;i++) { tmp2.clear(); for(long long j=0;j<m&&i+j*p<=n;j++) tmp2[a[i+j*p]]++; if(tmp1==tmp2) ans[cnt++]=i; for(long long j=m;i+j*p<=n;j++) { int pre=a[i+(j-m)*p]; if(tmp2[pre]==1) tmp2.erase(pre); else tmp2[pre]--; tmp2[a[i+j*p]]++; if(tmp2==tmp1) ans[cnt++]=i+(j-m+1)*p; } } printf("%d\n",cnt); sort(ans,ans+cnt); for(int i=0;i<cnt;i++) { if(i) printf(" "); printf("%d",ans[i]); } puts(""); return 0; }
相关文章推荐
- CodeForces 367B Sereja ans Anagrams (map)
- codeforces 367B Sereja ans Anagrams
- Codeforces 367B Sereja ans Anagrams 详细题解(map应用+维护长度)
- CodeForces - 367B Sereja ans Anagrams (map)
- Codeforces 367B Sereja ans Anagrams 【map维护queue】
- 解题报告:CodeForces 367B Sereja ans Anagrams
- Codeforces 367B - Sereja ans Anagrams(map)
- CodeForces 367B. Sereja ans Anagrams
- CodeForces 367B. Sereja ans Anagrams(经典STL)
- CodeForces - 367B Sereja ans Anagrams(队列+map)
- CodeForces - 367B Sereja ans Anagrams
- Sereja ans Anagrams - CodeForces 367B 水题
- codeforces 367B
- codeforces 367B
- Sereja ans Anagrams CodeForces - 367B (queue + map)
- Codeforces--367D--D. Sereja ans Anagrams(STL)(模拟)
- CodeForces 276E - Little Girl and Problem on Trees 区间更新..N+1个线段树
- stack+DFS ZOJ 1004 Anagrams by Stack
- codeforces 580D . Kefa and Dishes 状压dp
- CodeForces 612C Replace To Make Regular Bracket Sequence