jzoj 3631 【汕头市选2014】三角(triangle)
2017-03-13 21:31
211 查看
Description
统计点对A(x1,y1),B(x2,y2),C(x3,y3) 的数量,满足: • x1,x2,x3, y1,y2,y3 都是整数 • 0 <= x1, x2, x3 < n,0 <= y1, y2, y3 < m • 三角形ABC 的面积不是整数
Input
2 个整数N;M。
Output
1 个整数,表示所求的值除以(10^9 + 7) 的余数。
Sample Input
2 2
Sample Output
24
Data Constraint
• 对于50% 的数据,N,M <= 10; • 对于100% 的数据,1 <= N,M <= 10^9。
解题思路
由于数据范围太大,暴力只能拿50分,正解用数学方法计算(开始因为没看到是小于n,m,暴力一直过不了样例(╯﹏╰)[蓝瘦香菇]) 计算三角形面积用叉积, S=[(x2-x1)(y3-y1)-(x3-x1)(y2-y1)]/2 因为要求S不为整数的,即(x2-x1)(y3-y1)-(x3-x1)(y2-y1)是奇数,那么(x2-x1)(y3-y1)和(x3-x1)(y2-y1),一个是奇数,另一个是偶数才满足情况。 假设由某一点开始,横轴方向上有(n+1)/2个偶数长度向量,(n/2)个奇数长度向量,纵轴方向有(m+1)/2个偶数长度向量,(m/2)个奇数长度向量,那么一个点就有(n+1)/2*(n/2)*(m+1)/2*(m/2)个方案。 最后,乘点数n*m和6(A,B,C可以交换位置)就是答案。
Source Code
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> using namespace std; const int p=1000000007; int main() { freopen("triangle.in","r",stdin); freopen("triangle.out","w",stdout); long long n,m; scanf("%lld%lld",&n,&m); long long i,j; i=(n+1)/2; j=(m+1)/2; long long ans; ans=i*(n-i)%p*j%p*(m-j)%p*6%p*n%p*m%p; printf("%lld\n",(ans+p)%p); fclose(stdin); fclose(stdout); return 0; }
相关文章推荐
- JZOJ 3631. 【汕头市选2014】三角(triangle)
- 【JZOJ3631】三角(triangle)
- JZOJ3630. 【汕头市选2014】分叉(fork)
- 【汕头市选2014】舞伴 jzoj 3632 状压dp
- JZOJ 3632. 【汕头市选2014】舞伴
- JZOJ 1842——【汕头市选2014】平均
- 【JZOJ3633】【汕头市选2014】数数(count) (栈)
- 【jzoj3632】【汕头市选2014】【舞伴】【状态压缩动态规划】
- 【jzoj3630】【汕头市选2014】【分叉】【树形动态规划】
- jzoj P1842【汕头市选2014】平均
- 【汕头市选2014】三角
- jzoj P1843【汕头市选2014】小球
- 【汕头市选2014】分叉 jzoj 3630 dfs
- JZOJ3632【汕头市选2014】舞伴(perm)
- jzoj P1845【汕头市选2014】约数
- jzoj3630 【汕头市选2014】分叉(树上统计)
- [BZOJ3631] [JLOI2014] 松鼠的新家
- [BZOJ3631]JLOI2014松鼠的新家|树上差分
- BZOJ 3631: [JLOI2014]松鼠的新家( 树链剖分 )
- 【树链剖分】【JLOI 2014】【bzoj 3631】松鼠的新家