CF1602B Divine Array
思路:用一个二维数组\(a[k][i]\)记录第\(k\)步之后的\(a_i\)的值,用\(c[i]\)记录\(k-1\)步时数组\(a\)的每个值的个数,更新\(a[k][i]=c[a[k-1][i]]\)
\(PS\):当\(k>n\)时,\(a\)的值不再发生变化
Code:
#include <bits/stdc++.h>
using namespace std;
const int N=2000+10;
typedef long long ll;
int n,q,a[N][N],c[N];
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[0][i];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) c[j]=0;
for(int j=1;j<=n;j++) c[a[i-1][j]]++;
for(int j=1;j<=n;j++) a[i][j]=c[a[i-1][j]];
}
cin>>q;
while(q--){
int x,k;
cin>>x>>k;
cout<<a[min(k,n)][x]<<endl;
}
}
return 0;
}