ECNU 2018 10月月赛 E 盖房子 (bitset + 倍增)
题目链接 ECNU Monthly 2018.10 Problem E
从开场写到结束……
显然要把三角形分成上下两部分。
把每一部分分成三部分,以上部分为例。
上面和右边,以及左下角的正方形。
也就是两个小三角形和一个正方形合起来。
处理正方形的时候稍微麻烦一些。
然后直接倍增就可以了。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define fi first
#define se second
#define MP make_pair typedef long long LL; const int N = 1e3 + 10; bitset <102> f[N][N][10], g[N][N][10], ff[N][N][10], gg[N][N][10];
int n, m, q;
int T;
int lg[N + 10]; inline int check(int x, int y){
return x >= 1 && x <= n && y >= 1 && y <= m;
} int main(){ lg[1] = 0;
rep(i, 2, 1001) lg[i] = lg[i >> 1] + 1;
scanf("%d%d", &n, &m); rep(i, 1, n){
rep(j, 1, m){
int x;
scanf("%d", &x);
f[i][j][0].set(x);
g[i][j][0].set(x);
ff[i][j][0].set(x);
gg[i][j][0].set(x);
}
} rep(k, 1, 9){
rep(i, 1, n){
rep(j, 1, m){
int xx, yy, zz = 1 << (k - 1);
f[i][j][k] |= f[i][j][k - 1];
xx = i - zz;
yy = j; if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1]; xx = i;
yy = j + zz;
if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1]; xx = i - zz;
yy = j + zz;
if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1]; ff[i][j][k] |= ff[i][j][k - 1]; xx = i + zz;
yy = j;
if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1]; xx = i;
yy = j + zz;
if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1]; xx = i + zz;
yy = j + zz;
if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1]; }
}
} rep(k, 1, 9){
rep(i, 1, n){
rep(j, 1, m){
int xx, yy, zz = 1 << (k - 1);
g[i][j][k] |= f[i][j][k - 1];
xx = i - zz;
yy = j;
if (check(xx, yy)) g[i][j][k] |= g[xx][yy][k - 1]; xx = i;
yy = j + zz;
if (check(xx, yy)) g[i][j][k] |= g[xx][yy][k - 1]; gg[i][j][k] |= ff[i][j][k - 1];
xx = i + zz;
yy = j;
if (check(xx, yy)) gg[i][j][k] |= gg[xx][yy][k - 1]; xx = i;
yy = j + zz;
if (check(xx, yy)) gg[i][j][k] |= gg[xx][yy][k - 1]; }
}
} scanf("%d", &q);
while (q--){
int x, y, z;
scanf("%d%d%d", &x, &y, &z); if (z == 1){
puts("1");
continue;
} int c = lg[z]; bitset <102> ret; int xx, yy, zz = 1 << c; xx = x - z + zz;
yy = y; ret |= g[xx][yy][c]; xx = x;
yy = y + z - zz; ret |= g[xx][yy][c]; int t = (z) >> 1; int l = lg[t], ll = 1 << l; ret |= f[x][y][l]; xx = x - t + ll;
yy = y;
ret |= f[xx][yy][l]; xx = x;
yy = y + t - ll;
ret |= f[xx][yy][l]; xx = x - t + ll;
yy = y + t - ll;
ret |= f[xx][yy][l]; xx = x + z - zz;
yy = y;
ret |= gg[xx][yy][c]; xx = x;
yy = y + z - zz;
ret |= gg[xx][yy][c]; ret |= ff[x][y][l];
xx = x + t - ll;
yy = y;
ret |= ff[xx][yy][l]; xx = x;
yy = y + t - ll;
ret |= ff[xx][yy][l]; xx = x + t - ll;
yy = y + t - ll;
ret |= ff[xx][yy][l]; printf("%d\n", (int)ret.count());
} return 0; }
ECNU 2018 10月月赛 E 盖房子 (bitset + 倍增)的更多相关文章
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
- 洛谷 T28312 相对分子质量【2018 6月月赛 T2】 解题报告
T28312 「化学」相对分子质量 题目描述 做化学题时,小\(F\)总是里算错相对分子质量,这让他非常苦恼. 小\(F\)找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也 ...
- 洛谷10月月赛Round.3
Rank11:260=60+100+100 P2409 Y的积木 题目背景 Y是个大建筑师,他总能用最简单的积木拼出最有创意的造型. 题目描述 Y手上有n盒积木,每个积木有个重量.现在他想从每盒积木中 ...
- 洛谷10月月赛Round.1| P3398 仓鼠找sugar[LCA]
题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...
- 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]
题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...
- 洛谷10月月赛Round.1| P3399 丝绸之路 [DP]
题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...
- csu 10月 月赛 H 题 A Very Hard Problem
Description CX老湿经常被人黑,被黑得多了,自己也就麻木了.于是经常听到有人黑他,他都会深情地说一句:禽兽啊! 一天CX老湿突发奇想,给大家出了一个难题,并且声称谁能够准确地回答出问题才能 ...
- csu 10月 月赛 I 题 The Contest
Description 殷犇有很多队员.他们都认为自己是最强的,于是,一场比赛开始了~ 于是安叔主办了一场比赛,比赛有n个题目,每个题目都有一个价值Pi和相对能力消耗Wi,但是有些题目因为太坑不能同时 ...
- csu 10月 月赛 J 题
Description CSU又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧). 在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非 ...
随机推荐
- 数据结构&图论:图
在这里对图的存储和遍历进行一个规范,为以后更复杂的数据结构学习打下基础 首先是邻接矩阵的形式,适合于存稠密图,如果是全连接图就再合适不过了 int a[maxn][maxn]; 一个二维数组就可以搞定 ...
- 耐心排序Patience Sorting
这个排序的关键在建桶和入桶规则上 建桶规则:如果没有桶,新建一个桶;如果不符合入桶规则那么新建一个桶 入桶规则:只要比桶里最上边的数字小即可入桶,如果有多个桶可入,那么按照从左到右的顺序入桶即可 举个 ...
- 51nod 1806 wangyurzee的树
基准时间限制:1 秒 空间限制:131072 KB wangyurzee有n个各不相同的节点,编号从1到n.wangyurzee想在它们之间连n-1条边,从而使它们成为一棵树.可是wangyur ...
- 基本控件文档-UISlider属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/C ...
- Spring理论基础-控制反转和依赖注入
第一次了解到控制反转(Inversion of Control)这个概念,是在学习Spring框架的时候.IOC和AOP作为Spring的两大特征,自然是要去好好学学的.而依赖注入(Dependenc ...
- 【洛谷 P2763】 试题库问题(最大流)
题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...
- 移动端页面使用rem布局
阿里团队的高清布局方案代码 所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时 ...
- Fiddler-- 安装HTTPs证书
1. 现在很多带有比较重要信息的接口都使用了安全性更高的HTTPS,而Fiddler默认是抓取HTTP类型的接口,要想查看HTTPS类型接口就需要安装fiddler证书. 2.打开Fiddler, ...
- nmap导出处理脚本
import sys log = open("result.gnmap","r") xls = open("output.csv",&quo ...
- 调试应用程序(Debugging Applications)
调试应用程序(Debugging Applications)¶ Phalcon中提供了提供了几种调试级别即通知,错误和异常. 异常类 Exception class 提供了错误发生时的一些常用的调试信 ...