1. 程式人生 > 實用技巧 >入門:LG P2181 對角線

入門:LG P2181 對角線

對角線:一秒鐘就應該做出來的題,結果花了一個小時還多。

先是寫到了n=5,然後就沒轍了。

然後想到每一條新增對角線的交點,發現要在該條對角線兩側各取一個連上,答案+1,搞出遞推。推通項的時候錯了幾次,公式是對的,但是double精度不夠、longlong範圍不夠、unsigned long long範圍也不夠,翻了題解。

發現就是簡單地選四個點連X形,然後結果在unsigned ll裡面,但是需要及時除。運用一點點同餘的知識即可得到答案。

總之就是太菜了。

附帶一些小知識點:long double 不要用、lf只在輸入double的時候用,輸出浮點數都用%f;longlong很多時候還是會被卡,沒有正負需求就直接上unsigned保險;double範圍賊大但是精度不夠(只有15位)。Unsigned ll大概在4.2e18,int在2.1e9。

#include<cstdio>
using namespace std;
int main(){
	unsigned long long n;
	scanf("%lld",&n);
	//n = ((n+1)*(n*n-7*n+18)/24-1)*n;
	n = n*(n-1)/2*(n-2)/3*(n-3)/4; 
	printf("%lld\n",n);
	return 0; 
}