CF1602B Divine Array

CF传送门

思路:用一个二维数组\(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;
}

posted @ 2021-12-14 16:33  Wraith-Fiee  阅读(43)  评论(0)    收藏  举报