LOJ10155 數字轉換

2022-05-26 20:48:09 字數 1052 閱讀 8001

題目鏈結

如果乙個數x的約數和(不包括它本身,下同)比它本身小,那麼x可以變成它的約數和;如果對於某個y>x且y的約數和為x,那麼x也可以變成y。例如,4可以變為3,1可以變為7。限定所有的數字變換在不超過n的正整數範圍內進行,求不斷進行數字變換且沒有重複數字出現的最多變換步數。

輸入乙個正整數n。

輸出最少需要花費的時間。

7
3
\(n<=50,000\)。

remove!!!

博主剛開始打時被卡題意了o(╥﹏╥)o,看成了要從\(n\)開始轉換。

假設\(i\)可以變成\(j\)(\(j),那麼\(j\)也可以變成\(i\)。

那麼\(i\)和\(j\)之間可以連一條雙向邊。

因為每個數的約數和是惟一的,而且每個數能變成他的約數和的條件是它的約數和小於它本身,所以把這些可以轉移的約數和排列起來,有沒有像輸入一棵樹時給你每個節點的父親節點?

那麼我們就可以把這些點轉換為一棵樹,問題就變成了求樹的直徑。

樹的直徑怎麼求?兩遍dfs就好了,萌新請自行學習,博主就不在這裡贅述了。

上**:

#include#includeusing namespace std;

int n;

int to[300009];

int ans;

struct aap[50009];

int l,h[50009];

bool k[500009];

int uu,ux;

void add(int x,int y)

void dfs1(int x,int u)

k[x]=1;

for(int j=h[x];j;j=p[j].nxt)

k[x]=0;

}void dfs2(int x,int u)

int main()

if(j!=1 && to[j]} dfs1(1,0);

dfs2(ux,0);

printf("%d",ans);

return 0;

}

LOJ10155 數字轉換

題目描述 如果乙個數 x的約數和 y 不包括他本身 比他本身小,那麼 x 可以變成 y,y 也可以變成 x。例如 4 可以變為 3,1 可以變為 7。限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。輸入格式 輸入乙個正整數 n。輸出格式 輸出不斷進...

LOJ 6274 數字 數字dp

題目描述 nirobc 姐姐腦洞了兩個數字 和 它們滿足 且 nirobc 姐姐想知道 有多少種不同的取值,若有多組 的 值相同,則只算一次。其中 表示按位取或,c c 中寫作 pascal中寫作or 其中 表示按位取與,c c 中寫作 pascal中寫作and 輸入格式 一行,五個非負整數 輸出格...

LOJ10164 數字遊戲

題目描述 科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右各位數字成小於等於的關係,如 123123123,446446446。現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b a,b a,b 問這個區間內有多少個不降數。輸入格式 有多組測試資料。每組只含兩個數字 a,ba...