個人賽1 F 階乘問題

2021-08-24 20:53:23 字數 1012 閱讀 4167

題目 f. 階乘除法

輸入兩個正整數 n, m,輸出 n!/m!,其中階乘定義為 n!= 1*2*3*…*n (n>=1)。

比如,若 n=6, m=3,則 n!/m!=6!/3!=720/6=120。

是不是很簡單?現在讓我們把問題反過來:輸入 k=n!/m!,找到這樣的整數二元組(n,m)

(n>m>=1)。

如果答案不唯一,n 應該盡量小。比如,若 k=120,輸出應該是 n=5, m=1,而不是 n=6,

m=3,因為 5!/1!=6!/3!=120,而 5<6。

輸入包含不超過 100 組資料。每組資料報含乙個整數 k (1<=k<=109 )。

對於每組資料,輸出兩個正整數 n 和 m。無解輸出」impossible」,多解時應讓 n 盡量小。

一開始還覺得是不是不能暴力,和逼哥討論了乙個多小時的遞推式啊,公式啊啥的,結果發現暴力好像也沒問題,不過暴力時還是有情況沒考慮到,還是得多加小心啊~

解題思路:從2開始,到sqrt(k)為止,遍歷所有的階乘情況,找到最小的情況輸出就行;對於階乘大於k的或是奇數,他們的組成情況就只可能是k,k-1了

#include 

#include

#include

#include

using namespace std;

typedef long long ll;

intindex=1;

void solve(ll k)

if(temp>k)break;

}if(isfind)

break;

}if(isfind)printf("case %d: %i64d

%i64d\n",index++,m,n-1);

else

printf("case %d: %i64d

%i64d\n",index++,k,k-1);

}}int main()

return

0;}

2023年1月17日sdut vj個人賽

題目鏈結 簽到題。include using namespace std const int n 1e6 10 int n,k int a n int main else maxx max maxx,cnt cout maxx endl return0 題目鏈結 找能裁剪的最大的正方形,邊長從1開始...

2016XTU演算法專題個人賽1 題解

題意 n個團隊,每個團隊1 4人,搭可以坐4人的車,每個團隊的人必須在同一輛車上,問最少需要多少輛車?解法 4人團隊每個一輛車 1個3人團隊 1個1人團隊拼一輛 2人團隊每2個一輛車,單出的和2個1人團隊拼 剩下的1人團隊4個拼一輛。題意 給出一些閉區間,把它們合併,要求合併成的區間數量最少,並按公...

2023年1月30日個人賽補題報告

c題 這個題的資料開到了10 18,很明顯不能暴力。正確的做法是從1到n進行二分查詢,對於每乙個查詢的值進行暴力模擬。之前只是單純的寫過二分演算法,但並沒有在實際做題中應用過。如下 include include include include include using namespace std...