cf 595 补题

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;
}

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);
}

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

时间: 2024-10-09 01:28:32

cf 595 补题的相关文章

我要cf破1000题!!!

我现在cf是292题,还差1000-292=708题. 水平的提高确实和题数不完全相关,但是问题是现在训练强度确实太低了. 我打算在两个月之内达到1000题,也就是说1天至少10题,两个月60天,720/60=12题/天,平均每天做12题就完成任务了. 为了提高效率,我应该不会在一道题卡两个小时以上,会直接看题解,保证平均40分钟补一个题.

4.30-5.1cf补题

//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模,就抽空把最近没做的CF题补了点..毕竟明天开始又要继续上好多课呐...Yes, I can!(? •_•)?……(I can Huá shuǐ~~) codeforces 803 A. Maximal Binary Matrix   [简单构造] 题意:n行和n列填充零矩阵. 您要将k个1放在其中,使得得到

20190303集训队选拔赛1补题报告

今天嘛,打得很糟糕,糟糕到什么程度呢,rank40 一共才55个人,我写了2题,总共尝试了5题,总共8题 写了3题及以上的有27个,剩下的都是2道和1道 小西瓜啊!!! 外因就不找了(其实也没有) 但是我知道有个原因非常重要:刷题量太少了 其他的不说了,再接再厉吧,刚才已经消沉了很久了,也放空了一会,所以开始补题吧 对了,集训队讲座补选上了(因为有的同学觉得太难退课了,感谢颜学长的劝退讲座,让我有机会一边修学分一边被虐) 这也意味着我要有一篇总结报告和三篇解题报告 解题报告要正儿八经地写 不能像

[2015hdu多校联赛补题]hdu5371 Hotaru&#39;s problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5371 题意:把一个数字串A翻过来(abc翻过来为cba)的操作为-A,我们称A-AA这样的串为N-sequence,现在给你一个数字串,问你这个串中最长的N-sequence子串长度 解:可以想到A-A是一个回文串,-AA也是一个回文串,那么首先Manacher跑一遍求出所有回文子串 可以想到任意两个互相覆盖的回文子串都可以表示成N-sequence 然后有三种搞法: 1.时间复杂度O(N*logN

补题 留空

这两道题虽然不是很难,但是目前还不会,在这留个地,省赛之后多刷点这种类型的题,再补上. 1. http://acm.hdu.edu.cn/showproblem.php?pid=3306 矩阵快速幂的题,相加平方和. 2.http://acm.hdu.edu.cn/showproblem.php?pid=3308 线段树 补题 留空,码迷,mamicode.com

[2015hdu多校联赛补题]hdu5348 MZL&#39;s endless loop

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给你一个无向图,要你将无向图的边变成有向边,使得得到的图,出度和入度差的绝对值小于等于1,如果无解输出-1 解:考虑奇数度的点一定会成对出现(因为所有度数和肯定是偶数个->因为一条边产生两度~),那么我们可以将奇数度的点两两一连消除掉(两奇数度点的出度入读差的绝对值都为1, 路径上的点的差绝对值为0) 然后偶数度的点可以成环,那么可以搜出所有的环 1 /* 2 * Problem: 3

hdu5017:补题系列之西安网络赛1011

补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为min(a,b,c) 所以我们需要把原方程化为标准型. 这时候线代就排上用场了,注意到原方程是一个二次型. 化为标准型 1/(k1)*x^2+1/(k2)*y^2+1/(k3)*z^2=1 后  min(k1,k2,k3)即为答案 而这里的1/k1,1/k2,1/k3 就是二次型矩阵的特征值 如何求特

[补题]ACM-ICPC 2017 Asia Xi&#39;an

G: 题意:查询[l,r]子区间异或的和 题解: 按位考虑,每一位统计奇数区间出现的次数算价值即可,线段树区间合并 #include <bits/stdc++.h> #define ll long long const ll mod=1e9+7; const int MAXN=1e5+10; using namespace std; typedef struct node{ int len,llen,rlen,sum;ll ans; }node; node d[21][MAXN*3+10005

2018 HDU多校第三场赛后补题

2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube 题意: 在画布上画一个三维立方体. 题解: 模拟即可. 代码: #include <bits/stdc++.h> using namespace std; int a, b, c, R, C; char g[505][505]; int main () { int T; cin >>