UVa 1393 (容斥原理、GCD) Highways
2015-01-03 16:49
429 查看
题意:
给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点。
代码君
给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点。
#include <cstdio> #include <algorithm> const int maxn = 300; int dp[maxn+1][maxn+1], ans[maxn+1][maxn+1]; int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b); } void Init() { for(int i = 1; i <= maxn; ++i) for(int j = 1; j <= i; ++j) { if(i == j) dp[i][j] = dp[i][j-1] * 2 - dp[i-1][j-1] + (gcd(i, j) == 1); else dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + (gcd(i, j) == 1); } for(int i = 1; i <= maxn; ++i) for(int j = 1; j <= i; ++j) { if(i == j) ans[i][j] = ans[i][j-1] * 2 - ans[i-1][j-1] + dp[i][j] - dp[i/2][j/2]; else ans[i][j] = ans[i][j-1] + ans[i-1][j] - ans[i-1][j-1] + dp[i][j] - dp[i/2][j/2]; } } int main() { Init(); int n, m; while(scanf("%d%d", &n, &m) == 2 && n) { if(n < m) std::swap(n, m); printf("%d\n", ans[n-1][m-1]*2); } return 0; }
代码君
相关文章推荐
- UVA 1393 - Highways (容斥原理计数)
- uva 1393 - Highways(容斥原理)
- UVA 1393 Highways(数学思想)
- 1393 - Highways(问题抽象)(容斥原理计数)
- UVA - 1393 Highways
- uva1393 Highways
- UVALive 3720 UVA 1393 Highways
- UVA 1393 Highways
- uva 1393 - Highways(容斥原理)
- Highways UVA - 1393
- UVA 1393 - Highways
- UVa:1393 Highways
- uva1393 Highways
- Uva 1393 - Highways 解题报告(递推)
- UVA - 1393 Highways
- UVA 1393 - Highways
- UVA 1393 Highways
- uva1393 - Highways
- UVA - 1393 Highways(枚举包围盒大小,包围盒只有对角线穿过两个点)
- uva 1393 Highways