Codeforces 835C - Star sky - [二维前缀和]
题目链接:http://codeforces.com/problemset/problem/835/C
题意:
在天空上划定一个直角坐标系,有 $n$ 颗星星,每颗星星都有坐标 $(x_i,y_i)$,星星初始亮度为 $s_i$,所有星星的亮度有个上限 $c$。
在时刻 $0$,每颗星星都是初始亮度 $s_i$,然后每过一个单位时间,星星亮度都增加 $1$,如果亮度一旦超过 $c$ 就立刻变为 $0$。
现在有 $q$ 次观察天空的机会,观察时刻为 $t_i$,观察的视野为左下角为 $(x_{1i},y_{1i})$,右上角为 $(x_{2i},y_{2i})$ 的平行于坐标轴的长方形。要求出每次观察时,在视野中的星星的亮度和。
题解:
首先星星亮度是周期变化的,周期长度是 $c+1$,所以我们只需要求出周期内每个时刻星星的亮度。
然后我们再用一个二维前缀和,就能 $O(1)$ 查出每个时刻任意长方形范围的星星亮度和。
注意一点,可能多个星星重叠在一个坐标上。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
const int C=;
const int X=, Y=;
int n,q,c;
struct Star{
int x,y,s;
}star[N];
int sum[C][X][Y];
int main()
{
ios::sync_with_stdio();
cin.tie(), cout.tie(); cin>>n>>q>>c;
for(int i=;i<=n;i++) cin>>star[i].x>>star[i].y>>star[i].s; memset(sum,,sizeof(sum));
for(int t=;t<=c;t++)
{
for(int i=;i<=n;i++)
sum[t][star[i].x][star[i].y]+=(star[i].s+t)%(c+); for(int x=;x<=;x++)
for(int y=;y<=;y++)
sum[t][x][y]+=sum[t][x-][y]+sum[t][x][y-]-sum[t][x-][y-];
} for(int i=,t,x1,y1,x2,y2;i<=q;i++)
{
cin>>t>>x1>>y1>>x2>>y2;
cout<<sum[t%(c+)][x2][y2]-sum[t%(c+)][x2][y1-]-sum[t%(c+)][x1-][y2]+sum[t%(c+)][x1-][y1-]<<"\n";
}
}
Codeforces 835C - Star sky - [二维前缀和]的更多相关文章
- Star sky 二维前缀和
C. Star sky time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- C. Star sky 二维前缀和
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- CodeForces 835C - Star sky | Codeforces Round #427 (Div. 2)
s <= c是最骚的,数组在那一维开了10,第八组样例直接爆了- - /* CodeForces 835C - Star sky [ 前缀和,容斥 ] | Codeforces Round #4 ...
- Codeforces 838A - Binary Blocks(二维前缀和+容斥)
838A - Binary Blocks 思路:求一下前缀和,然后就能很快算出每一小正方块中1的个数了,0的个数等于k*k减去1的个数,两个的最小值就是要加进答案的值. 代码: #include< ...
- Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)
题意是需要求最大的扩散时间,最后输出的是一开始的火源点,那么我们比较容易想到的是二分找最大值,但是我们在这满足这样的点的时候可以发现,在当前扩散时间k下,以这个点为中心的(2k+1)2的正方形块内必 ...
- Codeforces 1080C 题解(思维+二维前缀和)
题面 传送门 题目大意: 有一个黑白的棋盘,现在将棋盘上的一个子矩形全部染成黑色,另一个子矩形全部染成白色 求染完色后黑,白格子的总数 分析 我们可以发现,对于一个(1,1)到(x,y)的矩形,若xy ...
- C - Monitor CodeForces - 846D (二维前缀和 + 二分)
Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
随机推荐
- 阿里云服务器Centos7.4开放80端口的记录
问题: 阿里云服务器安装的是centos7, 搭建网站安装lnmp1.5后发现访问不了, 不明所以, 在一论坛找到关于80端口未开放的原因. 需求: 开放80端口.于是有了下面第一,二,三部分关于开放 ...
- [Aaronyang] 写给自己的WPF4.5 笔记9[复杂数据处理三步曲,数据展示ListView泪奔2/3]
我的文章一定要做到对读者负责,否则就是失败的文章 --------- www.ayjs.net aaronyang技术分享 作者留言: 小小的推荐,作者的肯定,读者的支持. ...
- JS 全屏代码
// 推断各种浏览器,找到正确的方法 function launchFullscreen(element) { if(element.requestFullscreen) { element.requ ...
- 电子证书 DER & PEM & CRT & CER
原文链接: http://blog.csdn.net/zqt520/article/details/26966603 证书与编码 本至上,X.509证书是一个数字文档,这个文档根据RFC 5280来编 ...
- 在 Visual Studio 生成项目时,会发现一些 dll 并没有被复制到输出目录,导致最终程序的执行错误
发现与解决 检查了一下项目文件,发现是因为这些 dll 文件的引用其中一个叫做 嵌入互操作类型(EmbedInteropTypes)的属性被设为了 True,此时 复制本地 属性会被强制设为 Fals ...
- HDU_3746 Cyclic Nacklace(KMP)
题目请点我 题解: 题目大意:有一个字符串s.能够在前后加入字符,使字符串成为一个循环次数至少为2的循环字符串.输出最少须要加入的字符数目. 首先能够证明题目能够等价为仅仅在末尾加入字符使满足题意.要 ...
- [docker]docker自带的overlay网络实战
overlay网络实战 n3启动consul docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -b ...
- Spring-boot(二)yml文件的使用
上一章创建了一个简单的springboot项目,配置可以说非常的简单. 不过,在实际开发中不可能都用默认的配置,还是需要根据自己的实际项目需求有自定义的配置的. 比如:端口号需要变更,模板引擎的缓存开 ...
- 【测量实战技术】Cad中导入坐标高程点并可以提取坐标带高程
一般咱们都是导入cad的是坐标不带高程,那么怎么在cad中导入坐标高程的三维坐标呢,在不需要cass的情况下还能计算方量呢?而且还能批量提取出这些坐标高程的三维参数. 这些都是工作中非常常用的技能,不 ...
- Java知多少(8)类库及其组织结构
Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API. API(Application Programming Interfac ...