【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
代码:
写在前面:迷惘
思路:听从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)); }
相关文章推荐
- 读《世界是数字的》有感
- android日常学习3-23 实现打字游戏
- HDU1272-小希的迷宫
- DBGridEh基本操作
- js+jq实现图片预览,支持到ie9+ff+chrome
- andorid 表格布局
- 【计算机视觉】积分图和积分直方图
- cocos2d-x 精灵 Sprite
- LeetCode#102. Binary Tree Level Order Traversal My Submissions Question
- PAT 乙级 1028.人口普查
- 简单客服系统
- HDU Today
- 单片机学习步骤工程师的经验分享
- Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)
- TCP、UDP、HTTP、SOCKET介绍
- 2.3-string类型常用命令
- 侧拉菜单
- mybatis入门
- 世界是数字的读后感
- GCC 编译详解