格路计数的一类(降维?)技巧

news/2025/11/22 15:34:33/文章来源:https://www.cnblogs.com/Wy-x/p/19256925

模拟赛考到了,记录一下。

题面:

给你二维平面上 \(n\) 个点,定义移动:$(x,y) \to (x+1,y) / (x-1,y) / (x,y+1) / (x,y-1) $(一个点可以移动到上下左右与这个点相邻的点)。移动每个点 \(m\) 次,使得最后这些点的终点是同一个点,求移动的合法方案数。\(\bmod\ {10^9+7}\),限制坐标绝对值 \(\le 10^5\)\(n\le 50,m \le 10^5\)


Sol:

暴力做法:

枚举二维平面上每个点作为终点,再枚举 \(\Delta x\),然后 \(O(m)\) 枚举贡献。时间复杂度 \(O(m^3)\),空间复杂度 \(O(m^2)\)。祭天了。。。。但是你拼上 \(ans=0\) 的答案你会得到整整 \(80\) 分的高分???甚至 \(ans=0\) 一共是 \(50\) 分????????????

std:

考虑将点旋转 \(45\) 度。设新点坐标 \((x',y')\)

然后发现我们的移动变成了:

\((x',y') \to (x'+1,y'+1) / (x'+1,y'-1)/(x'-1,y'+1) /(x'-1,y'-1)\)

然后发现 \(x,y\) 独立了,可以分开两维,对每一维分别暴力枚举值域计算贡献,最后将两部分贡献乘起来即可。

#include<bits/stdc++.h>
#include<bits/extc++.h>
using __gnu_pbds::cc_hash_table;
#define int long longusing namespace std;const int Size=(1<<20)+1;
char buf[Size],*p1=buf,*p2=buf;
char buffer[Size];
int op1=-1;
const int op2=Size-1;
#define getchar()                                                              \
(tt == ss && (tt=(ss=In)+fread(In, 1, 1 << 20, stdin), ss == tt)     \? EOF                                                                 \: *ss++)
char In[1<<20],*ss=In,*tt=In;
inline int read()
{int x=0,c=getchar(),f=0;for(;c>'9'||c<'0';f=c=='-',c=getchar());for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);return f?-x:x;
}
inline void write(int x)
{if(x<0) x=-x,putchar('-');if(x>9)  write(x/10);putchar(x%10+'0');
}#ifndef ONLINE_JUDGE
#define ONLINE_JUDGE
#endif
#define ull unsigned long longconst ull mod=1e9+7;
const int N=4e5+5;
ull frac[N],g[N];
ull ksm(ull x,int p)
{ull ans=1;while(p){if(p&1) (ans*=x)%=mod;(x*=x)%=mod;p>>=1;}return ans;
}int n,m;
int x[N],y[N];
ull ks[N];ull C(int n,int m)
{if(m<0||n<0||n-m<0) return 0;return frac[n]*g[m]%mod*g[n-m]%mod;
}
int calc(int dx)
{if(dx>m) return 0;if((m-dx)&1) return 0;int last=(m-dx)/2;return C(m,last);
}int dodp(int *a)
{int minn=0x3f3f3f3f,maxn=-0x3f3f3f3f;int ans=0;for(int i=1;i<=n;i++) minn=min(minn,a[i]),maxn=max(maxn,a[i]);for(int i=minn-1e5;i<=maxn+1e5;i++){int nw=1;for(int j=1;j<=n;j++) (nw*=calc(abs(i-a[j])))%=mod;(ans+=nw)%=mod;}return ans;
}signed main()
{freopen("wolf.in","r",stdin);	freopen("wolf.out","w",stdout);ks[0]=1;frac[0]=g[0]=1;for(int i=1;i<N;i++) ks[i]=ks[i-1]*2%mod,frac[i]=frac[i-1]*i%mod,g[i]=ksm(frac[i],mod-2);n=read();m=read();for(int i=1;i<=n;i++) x[i]=read(),y[i]=read(); if(n==1) { cout<<ksm(4,m); return 0; }for(int i=1;i<=n;i++){int a=x[i],b=y[i];x[i]=a-b;y[i]=a+b;}cout<<dodp(x)*dodp(y)%mod;return 0;
}

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

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

相关文章

百度PaddleOCR-VL:基于0.9B超紧凑视觉语言模型,支持109种语言,性能超越GPT-4o等大模型 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

hadoop处理mysql数据的性能瓶颈

Hadoop处理MySQL数据时可能会遇到多个性能瓶颈,主要包括以下几个方面:数据导入速度慢:将MySQL中的数据导入Hadoop需要经过抽取、转换和装载(ETL)的过程。如果数据量较大,ETL过程可能会耗费较长时间,导致性能瓶颈…

hadoop在linux的安装

在 Linux 系统上安装 Hadoop 需要以下几个步骤:一、系统环境准备确保你的 Linux 系统满足以下要求:Linux 发行版:如 Ubuntu 20.04 LTS、CentOS 7/8、Debian 11 等。Java:Hadoop 需要 Java 8 或更高版本。磁盘空间:…

hadoop与mysql的综合应用解决方案

Hadoop与MySQL的综合应用解决方案通常涉及大数据处理与关系型数据库的整合。以下是一个综合应用解决方案的概述: 1. 数据存储层Hadoop HDFS:用于存储海量非结构化数据,如日志文件、图像、视频等。HDFS具有高容错性和…

hadoop与mysql的数据同步方法

Hadoop与MySQL的数据同步可以通过多种方法实现,以下是其中两种常见的方法:使用Sqoop进行数据同步:Sqoop是一个开源的数据导入导出工具,它允许将数据从一个关系型数据库(如MySQL)导入到Hadoop的HDFS(Hadoop Dist…

详细介绍:2. 容器常用操作

详细介绍:2. 容器常用操作pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

2025年上海黑臭水体修复服务权威推荐榜单:黑臭水体治理方案/河道水净化公司/河道治理服务商精选

黑臭水体治理作为城市环境治理的重要环节,其技术先进性与工程实施能力直接关系到治理效果与长效保持。专业修复服务商正成为上海改善水环境质量的关键力量。 随着城市化进程加快与水环境治理要求提高,上海黑臭水体修…

2025年KBK刚性组合式起重机供应商权威推荐榜单:KBK起重机/KBK柔性组合式起重机/KBK刚性吊源头厂家精选

KBK刚性组合式起重机作为现代工业物料搬运的关键设备,其结构稳定性、模块化程度与负载能力直接关系到生产效率和作业安全。选择专业供应商成为企业优化生产流程的重要环节。 KBK刚性组合式起重机系统由标准化的刚性轨…

珠海爱尔眼科医院联系方式:常见眼病防治建议

一、官方联系方式 珠海爱尔眼科医院电话:0756-3331677 微信号:18998173482 官网:http://www.aier0756.com 二、使用建议与提醒 在就诊前建议通过电话或官网了解科室设置与专家排班信息,合理安排时间。医院提供全生…

一条SQL的完整执行过程:小明查询员工信息的完整冒险故事

MySQL执行SQL的全流程,从"接待"到"找数据"再到"返回结果",让你彻底理解数据库背后的秘密第一章:敲门入室——连接层的"前台接待" 故事开场:小明(应用程序)想要查询公司…

LangGraph 官方教程:聊天机器人之三 - 实践

LangGraph 官方教程:聊天机器人之三 - 实践2025-11-22 15:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

2025年不锈钢管锯片供货厂家权威推荐榜单:切H型钢/角钢切割/切碳素钢锯片源头厂家精选

在制造业转型升级的推动下,不锈钢管锯片以其高切割精度和卓越的耐用性,正成为金属加工、管道安装和建筑行业不可或缺的工具。 随着制造业的发展,市场对不锈钢管锯片的需求持续增长。据行业报告显示,2025年全球工业…

2025年一体式泵站生产厂家权威推荐榜单:污水一体化泵站/预制泵站/雨水泵站源头厂家精选

在城市化进程和环保要求不断提高的背景下,一体式泵站以其安装便捷、智能高效的特点,正成为市政排水、污水处理领域的优选方案。 根据行业报告,全球一体式泵站市场在2025-2031年间预计将保持稳定增长,其中智能化、模…

gzip linux

gzip 是一个用于压缩和解压缩文件的命令,它属于 GNU 压缩工具集的一部分。gzip 通常用于压缩文件(如 .txt、.log、.dat 等)并将其转换为 .gz 格式。? 常用 gzip 命令1. 压缩文件gzip filename作用:将指定文件压缩…

gz文件 linux

当然可以!关于 gz 文件(即 gzip 压缩文件),以下是一些常见的 Linux 命令和脚本,用于解压、压缩、查看 gz 文件内容等操作。一、压缩文件(.gz)1. 使用 gzip 命令压缩文件gzip filename.txtfilename.txt 是要压缩…

hadoop for linux 安装

安装 Hadoop 在 Linux 系统上是一个常见的分布式计算任务。Hadoop 是一个基于 Java 的开源框架,用于分布式存储和计算。以下是安装 Hadoop 的常见步骤,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。…

WPF 数据绑定通过 ElementName 失效后改为 Reference 正常

WPF 数据绑定通过 ElementName 失效后改为 Reference 正常原代码如下,运行正常:<Grid><Grid x:Name="gridMenus" Visibility="Collapsed"><Grid.ContextMenu><ContextMenu&…

2025年塑胶跑道面层环境测试舱直销厂家权威推荐榜单:塑胶跑道环境舱/2舱塑胶跑道环境舱/4舱塑胶跑道环境舱源头厂家精选

在校园体育设施与绿色建筑标准不断提升的今天,塑胶跑道面层环境测试舱作为材料环保性能验证的关键设备,其检测精度与数据可靠性直接关系到跑道产品的环境安全性与合规性。 塑胶跑道面层环境测试舱是模拟特定温度、湿…

Doubao-Seed-Code VS Kimi K2 VS DeepSeek评测体验:国内首个支持视觉理解能力的编程模型

Doubao-Seed-Code VS Kimi K2 VS DeepSeek评测:国内首个支持视觉理解能力的编程模型,专为 Agentic Coding 任务深度优化的全新代码模型 摘要 本文基于火山引擎体验中心,同步评测对比 Doubao-Seed-Code preview-2510…

selenium: 找到页面上的指定元素并点击

一,代码: from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import Byimport t…