算出每個迴圈塊的長度,直接相乘肯定是不行的,需要分解質因數,每個因子取每次分解出來數量的最大值,然後用下快速冪優化下乘法就好了,比賽時腦子短路了,一直wa
#include#include#includeusing namespace std;
const int n=3e6+10;
const long long mod=3221225473;
int n;
int a[n];
bool vis[n];
int b[n],ma;
long long res=1;
void rd(int&x)
long long solve(long long x,long long y)
return res;
}int main()
memset(vis,0,sizeof vis);
memset(b,0,sizeof b);
bool find=false;
for(int i=1;i<=n;i++)
int tmp=cnt;
for(int i=2;i*i<=tmp;i++)b[i]=max(b[i],num);}
if(cnt==1) break;
}if(cnt>1) b[cnt]=max(b[cnt],1);
} res=1;
if(!find)
for(int i=2;i<=ma;i++) if(b[i])res=(res*solve(i,b[i]))%mod;
cout<
uva 539 簡單回溯)
題目大意 輸入兩個數n,m 表示有0到n 1個節點,m條邊 問?從某乙個節點從出發最多能走多少條邊 每條邊只能走一次 題目分析 列舉所有節點,回溯計算從該節點出發最多能經過幾條邊 for i 0 to n 1 列舉所有節點 dfs i,0 回溯計算從該節點出發所能經過的最大邊數 那麼dfs函式中的內...
loj539 旅遊路線
考慮列舉加油的位置,當確定某次在第 i 個位置加油後,且下一次到 j 加油,那麼 i 到 j 必然會選擇不超過 c 條邊且最長的路徑,記作 d 如果能求出 d 再設 f 表示 q 元 恰好用完 從 i 出發的最長路,列舉 i 之後那一次加油點即可轉移,由於 q le n 因此這裡的複雜度為 o n ...
539 最小時間差
給定乙個 24 小時制 小時 分鐘 hh mm 的時間列表,找出列表中任意兩個時間的最小時間差並以分鐘數表示。鴿巢原理優化 資料規模大於24 60 1440時,直接返回0 import j a.util.collections import j a.util.list class solution ...