题解 LA3720
题目大意 多组数据,每组数据给定两个整数 \(n,m\),请求出 \(n\times m\) 的点阵(即 \((n-1)\times(m-1)\) 的方格)中有多少条非水平竖直的经过至少两个格点的不同直线。
分析 这道题有多种解法,这里给出最经典的,使用容斥原理的解法。
令 \(dp[i][j]\) 表示 \(i\times j\) 的方格中,经过 \((0,0)\) 顶点的所有至少经过两个点的不同直线数(比如 \(dp[3][2]=5\))。
不难发现,\(dp\) 数组满足可加可减性,也即可以用容斥原理来递推。且点 \((i,j)\) 当且仅当 \(GCD(i,j)=1\) 时可以为 \(dp[i][j]\) 贡献 \(1\)。所以有
\]
现在考虑如何用 \(dp\) 数组来递推出最终答案。我们记 \(i\times j\) 方格中从左下到右上的不同直线数为 \(ans[i][j]\),则最终答案为 \(2\times ans[i][j]\)(比如 \(ans[3][2]=14\))。
不难看出,\(ans\) 数组也满足可加可减性,可以用容斥原理来递推。且点 \((i,j)\) 构成的新直线当且仅当它在 \(dp[i][j]\) 中而不在 \(dp[i/2][j/2]\) 中才有贡献,这是因为如果它在被重复计算过则一定在 \(dp[i/2][j/2]\) 中被计算过(为什么),所以有
\]
#include<bits/stdc++.h>
using namespace std;
const int maxn = 305;
const int maxm = 305;
int n, m;
int dp[maxn][maxm];
int ans[maxn][maxm];
void Init(int N, int M)
{
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M; ++j)
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 <= N; ++i)
for(int j = 1; j <= M; ++j)
ans[i][j] = ans[i - 1][j] + ans[i][j - 1] - ans[i - 1][j - 1] + dp[i][j] - dp[i / 2][j / 2];
}
int main()
{
Init(300, 300);
while(~scanf("%d%d", &n, &m) && n && m)
printf("%d\n", 2 * ans[n - 1][m - 1]);
}
题解 LA3720的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- uni-app学习记录06-Vuex简单使用
import Vue from 'vue' // 这里引入vuex import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Stor ...
- 读取Flex AIR应用程序设置
说明: 本人之前做过一年的Flex AIR移动跨平台开发,在之前学习过程中,一直是将笔记记在了Evernote上,有的笔记是自己写的,也有的笔记是在网上看到,顺手记下了的. 所以在这里声明下,如果在网 ...
- CSS 个性化滚动条样式
页面中有许多内容过多时,为了不影响整体布局,总会有滚动效果代替.but,许多情况浏览器自带的滚动条样式与整体UI 界面不搭啊,怎么办,当然作为界面的化妆师CSS就出手啦~ 滚动条样式由多个伪类组成 下 ...
- H3C 环路避免机制六:触发更新
- 1471 - Defense Lines
After the last war devastated your country, you - as the king of the land of Ardenia - decided it wa ...
- CF1146G Zoning Restrictions
CF1146G Zoning Restrictions 网络流 h<=50? 直接都选择最大的,ans=n*h*h 最小割 考虑舍弃或者罚款 有一个>x就要罚款? 经典取值限制的模型:切糕 ...
- Java中try catch finally执行
直接上代码实例: public static void main(String[] args) { System.out.println(test1()); } static int test1 ...
- tet-2
一.html和css部分 1.如何理解CSS的盒子模型? 标准盒子模型:宽度=内容的宽度(content)+ border + padding 低版本IE盒子模型:宽度=内容宽度(content+ ...
- GitHub上传项目到远程库
写文章 GitHub上传项目到远程库 GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...
- node-sass安装报错
npm install --save-dev node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.ta ...