這道題一開始想錯了。。想當然了。。。想著因為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 應該盡量小...