?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
188271462 |
Practice: DaiRuiChen007 |
1553E - 14 | C++14 (GCC 6-32) | Accepted | 358 ms | 11056 KB | 2023-01-07 05:56:37 | 2023-01-07 05:56:37 |
// LUOGU_RID: 98890409 #include<bits/stdc++.h> using namespace std; const int MAXN=3e5+1; int n,m,a[MAXN],cnt[MAXN]; bool vis[MAXN]; vector <int> G[MAXN]; inline void dfs(int p) { vis[p]=true; for(int v:G[p]) if(!vis[v]) dfs(v); } inline bool check(int k) { for(int i=1;i<=n;++i) G[i].clear(),vis[i]=false; for(int i=1;i<=n;++i) { G[(i+n-k)%n==0?n:(i+n-k)%n].push_back(a[i]); } int cnt=0; for(int i=1;i<=n;++i) { if(!vis[i]) ++cnt,dfs(i); } return (n-cnt)<=m; } inline void solve() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); ++cnt[(i+n-a[i])%n]; } vector <int> ans; for(int i=0;i<n;++i) { if(cnt[i]>=n-2*m&&check(i)) ans.push_back(i); } printf("%d ",(int)ans.size()); for(int i:ans) printf("%d ",i); puts(""); } signed main() { int T; scanf("%d",&T) ; while(T--) solve(); return 0; }
?
?
?
?