日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces 524C Idempotent functions

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 524C Idempotent functions 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://codeforces.com/problemset/problem/542/C

題目大意:給定一種運算f,對于輸入的數組來說,一步操作,f(x) = a[x],兩步操作,f^2(x) = a[a[x]]....倘若每次進行k步操作之后,得到的都是同一個數,即k為符合條件的步數。求出能令所有數都符合條件的最小步數。

初步我們可以很快想到,如果能求出每個數的符合條件的最小步數,然后求出這些步數的最小公倍數即可。但是需要注意的是,對于一開始并沒有直接進入循環的情況,即"6"字形的情況,我們要分開求出多余的長度len[i]和循環節長度step[i],選出最長的MAXlen,ans即為MAXlen對所有step[i]的最小公倍數的上取整。

AC代碼:

?

#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <cmath> #include <algorithm> using namespace std; #define MAXN 500 typedef long long LL; int n; int a[MAXN]; LL step[MAXN]; int vis[MAXN], v[MAXN]; int main() {LL ans, maxNum = 0;scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%d", &a[i]);for(int i = 1; i <= n; i++) {memset(vis, 0, sizeof(vis));stack<int> s;int j;for(j = i; !vis[j]; j = a[j]) {vis[j] = 1;s.push(j);}LL num = 1;while(s.top() != j) {s.pop(); num++;}s.pop();step[i] = num;maxNum = max(maxNum, (LL)s.size());}ans = step[1];for(int i = 1; i <= n; i++) {ans = ans / __gcd(ans, step[i]) * step[i];}LL temp = maxNum / ans;if(maxNum % ans || maxNum == 0) temp++;ans = temp * ans;printf("%I64d\n", ans);return 0; }

?

  

?

轉載于:https://www.cnblogs.com/gaoxiang36999/p/4484456.html

總結

以上是生活随笔為你收集整理的Codeforces 524C Idempotent functions的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。