【BZOJ2659】算不出的算式,打表找规律

传送门
写在前面:迷惘
思路:听从CA爷的打表大法,发现答案就是
p!=q—>(p-1)(q-1)/4
p==q—>(p-1)(q+1)/4
至于证明……

对于p=7,q=11,我们首先画出(p,q),连接(0,0),那么这条直线斜率是q/p,所求式子的前一半就相当于这条直

线下面点的纵坐标之和;

对于所求式子的后一半,我们把坐标轴反一下,可以看出他是直线上方点的横坐标之和。

显然,直线上不会有点。

对于(2,3)这个点,他对答案的贡献是3,那么可以看作(2,1)(2,2)(2,3)这三个点分别对答案贡献了1,其他同理。

那么这个式子就转化成了求(1,1)-((p-1)/2,(q-1)/2)这个矩阵中有多少个整数点,因此答案就是(p-1)*(q-1)/4了。

感觉灰常神奇啊= =
注意:用longlong
代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL ans,p,q;
main()
{
    scanf("%lld%lld",&p,&q);
    if (p==q) printf("%lld",(p>>1)*(1+q>>1));
    else printf("%lld",(p>>1)*(q>>1));
}

你可能感兴趣的:(【BZOJ2659】算不出的算式,打表找规律)