您的位置:首页 > 其它

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

2016-03-24 21:14 260 查看
传送门

写在前面:迷惘

思路:听从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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: