当前位置: 首页 > news >正文

ABC331D Tile Pattern

原题

题目描述

有一个 10^9 乘 10^9的方格网格。让 (i,j)表示从上往下数第 (i+1)行、从左往右数第 (j+1) 列的方格

每个方格要么是黑色要么是白色。方格 (i,j)的颜色由字符 P[i mod N][j mod N]表示,其中B表示黑色,W表示白色。这里,a mod b表示a除以b的余数。

回答 Q个查询。

每个查询给出四个整数 A,B,C,D要求你找出以 (A,B)为左上角、(C,D)为右下角的矩形区域内包含的黑色方格数量。

题目思路

令f(x,y)为满足条件的黑色方格的个数,则所求的答案就是f(c+1,d+1)-f(a,d+1)-f(c+1,b)+f(a,b)。但是如直接计算肯定比较麻烦,可以利用他的一些性质。当x=8,y=7时,如右图所示,可以将其分解为A*(x/n)*(y/n)、B*(y/n)、C*(x/n),D。其中A=f(n,n),B=f(x%n,n),C=f(y%n,n),D=f(x%n,y%n)。即可以将其分解为f(n,n)*(x/n)*(y/n) + (y/n)*f(x%n,n) + (x/n)*f(n,y%n) + f(x%n,y%n)。最后f(1,1)~f(n,n)可以使用前缀和的方式快速求出。

#include<bits/stdc++.h> using namespace std; using LL=long long;//给long long去个别名LL const int N=1010; int n,q,h[N][N]; LL f(LL x,LL y){ if(x<=n&&y<=n){ return h[x][y]; } return f(n,n)*(x/n)*(y/n)+(x/n)*f(n,y%n)+(y/n)*f(x%n,n)+f(x%n,y%n); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char c; cin>>c; h[i][j]=(c=='B')+h[i-1][j]+h[i][j-1]-h[i-1][j-1]; } } //前缀和优化↑ while(q--){//处理q次查询 int a,b,c,d; cin>>a>>b>>c>>d; c++; d++; cout<<f(c,d)-f(a,d)-f(c,b)+f(a,b)<<"\n"; } return 0; }
http://www.jsqmd.com/news/84344/

相关文章:

  • js之事件系统
  • 第二章-依赖属性
  • 量子计算驱动的分布式云存储系统在数据安全与高效检索中的创新应用 - 教程
  • css3如何引入外部字体
  • ARM 架构中的数据内存屏障指令 DMB
  • 【视频导图大师】3秒批量导出视频所有画面为高清图片/序列帧/视频截图/视频转图片
  • test tagstest tags - itnews
  • 终极指南:解锁Quansheng对讲机隐藏功能的完整方案
  • 终极指南:CinoLib——免费开源的通用网格处理神器
  • test tags2 - itnews
  • 光隔离探头
  • 窗口相关操作的总结
  • TileLang终极指南:45分钟内打造你的首个高性能GPU算子
  • 5分钟掌握Transition.css:让你的网页动起来
  • AI大模型之Agent,RAG,LangChain(二)
  • 技术周报 | 特朗普签令统一AI监管;长三角启动应用征集;多场开发者大会本周密集召开
  • 恢复条码至compvalue里
  • 北京陪诊服务权威推荐榜单 - 品牌排行榜单
  • HNOI2019《序列》
  • 峰值检测电路
  • 基于Java的安全生产投诉智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 【Godot】【入门】Godot 是什么?适合做哪些类型的游戏(附路线图+避坑清单)
  • 北京上门收画服务权威推荐榜单​ - 品牌排行榜单
  • 从零到一:构建一个实时语音翻译应用(Vue3 + Web Speech API)
  • 前端性能与监控指标采集系统设计方案
  • PWA资产生成器终极教程:5分钟快速创建专业级图标和启动画面
  • 基于PyTorch的深度学习基础课程之十:损失函数
  • 学习Linux要注意的地方
  • 43、Python 并发与网络编程全解析
  • Spark:革命性的命令行数据可视化工具,让DevOps监控更高效