前缀和--分布函数--cf835c star sky
来源:互联网 发布:江苏远洋数据 编辑:程序博客网 时间:2024/06/06 03:19
给定星星的位置,和起始亮度,求t时间后,位于x1,y1,x2,y2矩形内星星总亮度和,在边界上也算。
t时刻星星的亮度为起始亮度(si + t) % (c + 1),c为最大亮度。
重点是要快速求出给定矩形内的星星。
神奇的题解。。。
用cnt[s][x][y]记录起始亮度为s,(1,1)至(x,y)矩形内星星总数。
则给定矩形(x1,y1)至(x2,y2)内的星星数,可以用s从0到c,对cnt[s][x2][y2] - cnt[s][x1 - 1][y1] - cnt[x2][y1 - 1] + cnt[s][x1 - 1][y1 - 1]求和。
注意,应为边界也算在矩形,所以记得-1.
初始化时也是,cnt[s][x][y] = (x,y)处的亮度为s的星星数 + cnt[s][x - 1][y] + cnt[s][x][y - 1] - cnt[s][x - 1][y - 1]
#include <iostream>
#include <cstdio>
#include <cstring>
using namespacestd;
const int maxn =100 + 5;
const int maxc =11;
int cnt[maxc][maxn][maxn];
int s[maxn][maxn];
int main()
{
int n,q,c;
scanf("%d%d%d",&n,&q,&c);
int x,y,si;
memset(cnt,0,sizeof(cnt));
for (int i =0; i < n; i ++) {
scanf("%d%d%d",&x,&y,&si);
cnt[si][x][y] ++;
}
for (int i =1; i < maxn; i ++) {
for (int j =1; j < maxn; j ++) {
for (int k =0; k <= c; k ++) {
cnt[k][i][j] =cnt[k][i][j] + cnt[k][i -1][j] + cnt[k][i][j -1] - cnt[k][i -1][j - 1];
}
}
}
int t,x1,y1,x2,y2;
int sum =0 ;
for (int i =0; i < q; i ++) {
scanf("%d%d%d%d%d",&t,&x1,&y1,&x2,&y2);
sum = 0;
for (int k =0; k <= c; k ++) {
sum += (cnt[k][x2][y2] -cnt[k][x1 - 1][y2] -cnt[k][x2][y1 - 1] +cnt[k][x1 - 1][y1 -1]) * ((k + t % (c + 1)) % (c + 1));
}
printf("%d\n",sum);
}
return0;
}
- 前缀和--分布函数--cf835c star sky
- CF835C Star sky(模拟+二维前缀和)
- CF835C-Star sky
- codeforces Star sky(二维前缀和)
- Codeforces835C-Star sky(二维前缀和+思维)
- C. Star sky【前缀和预处理】
- codeforces 835-C. Star sky(dp+前缀和)
- codeforces 835C Star sky (二维数组前缀和)
- Codeforces 835 C Star sky(前缀和)
- Codeforces 853C Star sky(二维前缀和)
- Codeforces Round #427 (Div. 2)-C. Star sky(二维前缀和)
- Codeforces Round #427 (Div. 2) C. Star sky 二维前缀和
- Codeforces 835C Star sky【思维+暴力预处理二维前缀和】
- Codeforces Round #427 (Div. 2) C. Star sky(前缀和)
- Codeforces Round #427 (Div. 2) C. Star sky(前缀和)
- Codeforces Round #427 (Div. 2) C.Star sky【模拟、二维前缀和】
- cfStar sky DP(前缀和)
- C. Star sky Codeforces
- 设计模式之工厂模式
- 应用jquery操作元素样式(一)
- Codeforces 835B
- ADB命令
- +、-、*、/、%的使用
- 前缀和--分布函数--cf835c star sky
- Oracle之多表查询
- HDU 6045 Is Derek lying?【】
- Hive基础到高级
- ==、~=、>、<、<=的使用
- 7月31日云栖精选夜读:金融安全资讯精选 2017年第一期:云战略下的安全思维转型与新认知
- hdu 5532 (最长上升子序列)nlogn
- 关于datatables隐藏显示列多次提交后台刷新数据的问题
- 职场不是电视剧,面试学罗子君铁定完蛋!