码迷,mamicode.com
首页 > 其他好文 > 详细

cf 595 补题

时间:2019-10-26 17:27:58      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:cout   一个人   close   ext   图片   c++   运用   ==   eve   

1.B2   Books Exchange (hard version)

  题意:有n(1~n)个孩子看书,定义一个数组,记录了每个孩子看完??,把书给的下一个人

     T个样例,输出孩子重新拿到自己的书需要的传递次数

  思路:easy  : i=a[ i ] ;直到 i ==本身,记录次数

        hard :   递归找环 ,运用递归,减少遍历次数,就是说一次递归把环上的所有点的次数全部找到。

技术图片
#include<bits/stdc++.h>
using namespace std;
const int MA=2e5+5;

int a[MA];
int book[MA];
//递归找环 
int solve(int init,int now,int next,int step){
    if(init==next)
        return book[now]=step;
    else return book[now]=solve(init,next,a[next],step+1);
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    
    int n,t;
    cin>>t;
    while(t--){
        memset(book,0,sizeof(book));
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++){
            if(book[i]==0){
                solve(i,i,a[i],1);
            }
        }
        for(int i=1;i<n;i++){
            cout<<book[i]<<" "; 
        }
        cout<<book[n]<<endl;
    }
    
    return 0; 
}
View Code
int solve(int init,int now,int next,int step){
    if(init==next)
        return book[now]=step;
    else 
        return book[now]=solve(init,next,a[next],step+1);
}

 

cf 595 补题

标签:cout   一个人   close   ext   图片   c++   运用   ==   eve   

原文地址:https://www.cnblogs.com/w-w-t/p/11743427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!