NBUT OJ 1643 階乘除法 打表

2021-07-17 00:27:18 字數 706 閱讀 7850

這道題一開始想錯了。。想當然了。。。想著因為10!<10^9,理所當然的認為答案的n也是在10以內,,,而且在計算的時候還數錯了一位。。明明11!才大於10^9,因此要計算到10,最後還是在別人的提醒之下才明白打表的方法,因為11!大於10^9,所以兩個階乘做除法之後的剩下的元素個數一定會小於等於10,我們只需要列舉剩下的元素是2個,3個。。。。。10個的情況就好了,放在乙個map裡面,輸入k的時候去查,查不到就是輸出k和k-1。

大概是利用了階乘的增長飛快的特點吧,因此打表的話,元素也不會很多,正是階乘增長的飛快,所以在處理階乘這一類問題的時候是比較考驗技巧的。

#include#include#includeusing namespace std;

const int inf=1000000000;

map>ma;

long long k,times=1;

int main()

}while(scanf("%i64d",&k)!=eof)

map>::iterator be=ma.find(k);

if(be==ma.end())

printf("%i64d %i64d\n",k,k-1);

else

printf("%d %d\n",be->second.first,be->second.second);

}return 0;

}

NBUT 1643 階乘除法

階乘除法crawling in process.crawling failedtime limit 5000msmemory limit 65535kb64bit io format submit status practice nbut 1643 description input output ...

階乘除法 CSU 1781

csu 1781 輸入兩個正整數 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 應該盡量小。比如,...

CSU 1781 階乘除法(列舉)

description 輸入兩個正整數 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 應該盡量小...