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的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
随机推荐
- windows下vbs脚本隐藏控制台
每次想写python代码时,都需要打开IDE进行编写,并且需要创建许多小文件.如果使用jupyter就能够直接书写.但是jupyter需要手动通过控制台打开,这不够方便.通过把jupyter note ...
- java 字符串中参数化符号${}的解析
我们在很多地方都能看到代表参数意义的符号${},可能我们在写一些框架的时候,有时候也需要用到这个符号,但他们是如何精确解析的?或者说需要我们自已写的时候,如何写?我们先来看以下的几个场景: 1.字符串 ...
- linux nfs共享文件
linux文件共享可以有多种方式:samba,nfs,ftp等等 nfs在linux之间效率高些: function nfs(){ share_folder="/data1 192.168. ...
- Centos7安装SVN服务器
1.关闭防火墙systemctl stop firewalld.service 2.安装svn服务器yum install subversion 3.创建放置项目project的地方mkdir /sv ...
- Android Gallery实现3D相册(附效果图+Demo源码)
今天因为要做一个设置开机画面的功能,主要是让用户可以设置自己的开机画面,应用层需要做让用户选择开机画面图片的功能.所以需要做一个简单的图片浏览选择程序.最后选用Gallery作为基本控件.加入了一些炫 ...
- Error: parent directory is world writable but not sticky
在本地安装pyenv的时候,出现了如下的报错: ➜ brew install pyenv ==> Downloading https://github.com/yyuu/pyenv/archiv ...
- java中的数据加密2 对称加密
对称加密 也叫私钥加密. 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对 ...
- [备份]EntityFramework
本视频和分步演练介绍通过 Code First 开发建立新数据库.这个方案包括建立不存在的数据库(Code First 创建)或者空数据库(Code First 向它添加新表).借助 Code Fir ...
- Git 删除操作
Tom 更新了自己的本地存储库并进入src目录下找到编译后的二进制.查看提交信息后,他意识到,编译后的二进制是由Jerry加入的. . [tom@CentOS src]$ pwd /home/tom/ ...
- hdoj:2032
#include <iostream> #include <string> using namespace std; int main() { int n; ][]; ; i ...