2021牛客OI赛前集训营-方格计数【计数,dp】

正题

题目链接:https://ac.nowcoder.com/acm/contest/20107/B


题目大意

给出一个w×hw\times hw×h的网格图,然后要求在上面选出nnn个格点,使得它们在一条直线上且两两之间距离不小于ddd

1≤T≤20,1≤w,h,d≤500,1≤n≤501\leq T\leq 20,1\leq w,h,d\leq 500,1\leq n\leq 501T20,1w,h,d500,1n50


解题思路

先只考虑横竖和斜向右下的直线
显然是枚举直线更加迅速,可以枚举一个斜率ab\frac{a}{b}ba,然后为了防止算重我们考虑起点也就是我们选择的最第一个点,对于起点在(0,0)∼(w−ka,h−kb)(0,0)\sim (w-ka,h-kb)(0,0)(wka,hkb)的矩形内的点,右下角至少还有kkk个点可以选择,我们可以枚举这个kkk,然后暴力统计。这样一次复杂度是O(min{wa,hb})O(min\{\frac{w}{a},\frac{h}{b}\})O(min{aw,bh}),类似于调和级数不是很大。

之后考虑统计选择的方案,设fi,j,kf_{i,j,k}fi,j,k表示选择的两个之间要至少相隔iii,有jjj个可以选,选择kkk个的方案,这个可以直接dpdpdp

就可以过了,时间复杂度:O(whn+Twhlog⁡wh)O(whn+Twh\log {wh})O(whn+Twhlogwh)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=510,P=1e9+7;
ll T,n,w,h,D,ans,d[N][N];
int f[N][N][N];
signed main()
{scanf("%lld",&T);for(ll i=1;i<=500;i++)d[i][0]=d[0][i]=i;for(ll i=1;i<=500;i++)for(ll j=1;j<=i;j++)d[i][j]=d[j][i]=d[j][i%j];for(ll i=1;i<=500;i++){f[i][0][0]=1;for(ll j=1;j<=500;j++){for(ll k=0;k<=500;k++)f[i][j][k]=f[i][j-1][k];if(j>=i)for(ll k=1;k<=500;k++)(f[i][j][k]+=f[i][j-i][k-1])%=P;}}while(T--){scanf("%lld%lld%lld%lld",&n,&w,&h,&D);if(n==1){printf("%lld\n",(w+1)*(h+1)%P);continue;}ans=0;for(ll i=0;i<=w;i++)for(ll j=0;j<=h;j++){if(d[i][j]!=1)continue;ll k,last=0,ub=1;if(i!=0&&j!=0)ub=2;ll dis=ceil(D/sqrt(i*i+j*j));for(k=1;k;k++){if(k*i>w||k*j>h)break;ll L=w-k*i+1;ll R=h-k*j+1;(ans+=L*R%P*(1ll*(f[dis][k][n-1]-f[dis][k-1][n-1]))*ub%P)%=P;}}printf("%lld\n",(ans+P)%P);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可持久化并查集

蒟蒻比较菜&#xff0c;现在才学。。。 P3402 可持久化并查集 其实就是魔改的主席树啦&#xff0c;记录每个点的直接父亲与这棵子树的大小。 合并的时候不用路径压缩&#xff0c;直接暴力跳父亲&#xff0c;\(O(\log^2)\) 找到祖先&#xff0c;之后启发式合并(启发式合并的平均…

[CSP-S Day1,Day2 游记]提高组考后总结及学习编程C++以来的心得体会

怀着沉重而感慨的心情写下了这篇blog考试中暴露的问题Day1Day2综上解决方法学习历程及以来的心得体会职业精神这篇博客我可能会写好几天&#xff0c;我jio得这篇博客对我的学习历程以及态度产生深刻影响考试中暴露的问题 首先先说这次提高组考试的每道题所遇到的各种问题吧 Da…

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...

上篇文章介绍了基于Ids4密码授权模式&#xff0c;从使用场景、原理分析、自定义帐户体系集成完整的介绍了密码授权模式的内容&#xff0c;并最后给出了三个思考问题&#xff0c;本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的&#xff0c;如何验证access_t…

树的应用:括号树

传送门 文章目录解析代码解析 没有做出来。。。 一开始看到了一个&#xff08;自以为&#xff09;很好的性质&#xff0c;再加上之前做一些括号相关题的刻板印象&#xff0c;导致这题没掉了… 我的角度和正解完全背道而驰了 放下乱七八糟的前缀和与st’表&#xff0c;回归朴素…

P5049 [NOIP2018 提高组] 旅行

P5049 [NOIP2018 提高组] 旅行 题意&#xff1a; 一棵树(可能是基环树)&#xff0c;从1出发&#xff0c;每到达一个新的点就记录下编号。求一种走法使得记录下来的编号字典序最小。 1≤n≤500000 mn−1 或 mn 题解&#xff1a; 如果不是基环树&#xff0c;那直接每次走字典…

失配树

名字看起来挺高级的&#xff0c;然而其实就是 \(\text{KMP}\) 上树啦。 我们将每个点的 \(nex[i]\) 与 \(i\) 连边&#xff0c;那么最终 \(border\) 关系会形成一棵树&#xff0c;之后就可以在树上搞事情啦&#xff01; P5829 【模板】失配树 这题比较裸&#xff0c;直接根据定…

P7116-[NOIP2020]微信步数【数学】

正题 题目链接:https://www.luogu.com.cn/problem/P7116 题目大意 有一个kkk维空间&#xff0c;第iii维长度为wiw_iwi​&#xff0c;有nnn步每一步都是让某个维的坐标1/−11/-11/−1&#xff0c;每次走完nnn步都会从111重新走一次&#xff0c;现在求从这个空间的每个点出发走…

[2019CSP-S Day1]提高组Day1题解(格雷码[模拟(k转二进制取反的做法带证明)] + 括号树[DP] + 树上的数(暴力+菊花图+单链))

Day1T1&#xff1a;格雷码题目题解代码实现T2&#xff1a;括号树题目题解代码实现T3&#xff1a;树上的数题目10pts暴力题解代码实现25pts菊花图题解代码实现25pts单链题解代码实现T1&#xff1a;格雷码 题目 通常&#xff0c;人们习惯将所有 n位二进制串按照字典序排列&…

模板:环套树

文章目录前言解析找环代码练习环套树的直径代码thanks for reading&#xff01;前言 环套树者&#xff0c;一个环套一棵树也 解析 定义&#xff1a;n个点&#xff0c;n条边的无向连通图 其实就是树多了一条边&#xff0c;连出了一个环 性质&#xff1a;如果对环套树进行dfs&am…

使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择

在上一篇文章使用PerfView监测.NET程序性能&#xff08;三&#xff09;&#xff1a;分组中&#xff0c;我们使用了Perfview的分组功能。分组功能旨在对某些函数按照某个格式进行分组&#xff0c;以减少视图中的各种无关函数的数量。但仅有分组还不够&#xff0c;有时我们想将一…

P1352 没有上司的舞会

P1352 没有上司的舞会 题意&#xff1a; 给你一个树&#xff0c;每个点都有权值&#xff0c;选择一些点使得权值和最大&#xff0c;要求父亲节点和子节点不能同时选择 题解&#xff1a; 经典树形dp dp[x][0]表示以x为根的子树&#xff0c;且x不参加舞会的最大快乐值 dp[x][…

基础字符串

初三巨佬djwj233 基础字符串

CF536C-Tavas and Pashmaks【凸壳】

正题 题目链接:https://codeforces.com/contest/536/problem/C 题目大意 nnn个人&#xff0c;第iii个人的游泳速度sis_isi​&#xff0c;跑步速度是rir_iri​。如果跑道长度是RRR&#xff0c;泳道长度是SSS那么一个人的用时就是RriSsi\frac{R}{r_i}\frac{S}{s_i}ri​R​si​S​…

带旋treap概念及模板,带例题:普通平衡树

带旋Treap二叉查找树BST(Binary Search Tree)定义Treap定义模板合集&#xff08;均为O(logn)O(logn)O(logn)&#xff09;push_up模板旋转模板插入模板删除模板查找前驱模板查找后驱模板查找键值key模板查找节点的修正值rank模板PS&#xff1a;rd的比较问题例题&#xff1a;普通…

微服务系列实践 .NET CORE

从事这个行业转眼已经6年了&#xff0c;从当初刚毕业的在北京朝八晚十&#xff0c;从二环到五环&#xff0c;仍每天精力充沛的小愤青&#xff1b;再到深圳一点一滴的辛勤在软件行业的耕种&#xff0c;从当初单体应用架构到现在微服务架构的经历&#xff0c;回想起来自己的收获倒…

P2607 [ZJOI2008]骑士

P2607 [ZJOI2008]骑士 题意&#xff1a; n个点n个边&#xff0c;每个点都有权值&#xff0c;相邻的点不能同时选择&#xff0c;问如何选择能使得权值最大 题解&#xff1a; 这个题很有P1352 没有上司的舞会这个题的感觉&#xff0c;唯一的区别是那个题保证是树&#xff0c;…

模板:线段树优化建图

前言 百川到海&#xff0c;天下归一 解析 线段树优化建图是用于对一个区间的点连边时的优化方法 建一棵in树一棵出树分别往上和下指即可 大概长这样 &#xff08;pia的洛谷的照片&#xff09; 建树 正常动态开点即可 void build(int &k,int l,int r){tr[ktot](tree){0…

Binary Search

01 分数划分 什么 01 分数划分&#xff0c;叫 Binary Search 多好。 P1642 规划 可以二分答案 \(x\)&#xff0c;考虑选择 \(n-m\) 个数使得答案 \(\ge x\)。 \[\dfrac{\sum w(i)}{\sum c(i)}\ge x \]\[\sum w(i)\ge \sum (x\times c(i)) \]\[\sum(w(i)-x\times c(i))\ge 0 \]之…

CF1556F-Sports Betting【状压dp,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/CF1556F 题目大意 nnn个点的一张竞赛图&#xff0c;每个点有一个权值aia_iai​&#xff0c;(i,j)(i,j)(i,j)之间的边iii连jjj的概率是aiaiaj\frac{a_i}{a_ia_j}ai​aj​ai​​&#xff0c;否则jjj连iii。 现在期望有多少个点…

[非旋平衡树]fhq_treap概念及模板,例题:普通平衡树,文艺线段树

文章目录概念全套模板push_up模板split拆树模板(按权值拆)split拆树模板(按个数拆)merge合并模板&#xff08;地址版&#xff09;merge合并模板&#xff08;带返回根&#xff09;区间模板insert插入模板delete删除模板find_kth找第k大模板get_rank找排名模板pre找前驱模板suf找…