1. 程式人生 > >luoguP4132 [BJOI2012]算不出的等式 數論

luoguP4132 [BJOI2012]算不出的等式 數論

傳送門

以前的題

當時集訓的時候老師連著笑話一起講的

這題自己先找規律打表就猜是(p-1)*(q-1)/4

沒有∑套∑ 先把式子分成兩個(其實是一樣的)

然後考慮這個式子求和前的每一項 

對於每一個k求的都是y=q/p*x下的整點數

然後另一邊就是互補的一側

(該式兩部分分別是一個([p/2],[q/2])方格圖主對角線分成的兩部分的整點數.)[]表示下取整

dao一下洛谷的圖

圖大概長這樣

由於p,q是質數 所以只有相等的時候會有p個點會少算(邊界)

Code:

 1 #include<cstdio>
 2 #include<cstring>
 3
#include<algorithm> 4 #include<queue> 5 #define ms(a,b) memset(a,b,sizeof a) 6 #define rep(i,a,n) for(int i = a;i <= n;i++) 7 #define per(i,n,a) for(int i = n;i >= a;i--) 8 #define inf 1000000007 9 using namespace std; 10 typedef long long ll; 11 typedef double D; 12 #define eps 1e-8 13
ll read() { 14 ll as = 0,fu = 1; 15 char c = getchar(); 16 while(c < '0' || c > '9') { 17 if(c == '-') fu = -1; 18 c = getchar(); 19 } 20 while(c >= '0' && c <= '9') { 21 as = as * 10 + c - '0'; 22 c = getchar(); 23 } 24 return
as * fu; 25 } 26 //head 27 ll p,q,ans; 28 int main() { 29 p = read(),q = read(); 30 ans = (p>>1)*(q>>1); 31 if(p == q) ans += p>>1; 32 printf("%lld\n",ans); 33 return 0; 34 }
View Code