【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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值