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又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧). 在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非 ...
随机推荐
- sql cmd命令执行sqlserver的sql文件
有的时候,我们通过Log Explorer工具根据日志生成的回滚脚本,或者其他情况我们得到的脚本文件,通过sqlserver打开脚本文件的方式不爽,我们可以这样: 方式一: osql -S . -U ...
- elasticsearch client
你可以用client做很多事情: 在集群中执行index, get, delete, search,update 操作 在集群中执行administrative tasks 如果你想再程序中嵌入ela ...
- 修改Maven仓库地址
在%USERPROFILE%\.m2\settings.xml例如:C:\Users\LongShu\.m2\settings.xml 可以自定义Maven的一些参数, 复制%M2_HOME%\con ...
- 【BZOJ1560】【JSOI2009】火星藏宝图 [DP]
火星藏宝图 Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Samp ...
- codeforces——contest 864 problemE
Polycarp is in really serious trouble — his house is on fire! It's time to save the most valuable it ...
- 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage
[算法]搜索 [题意]给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点). [题解] 真是一道奥妙重重的题目. 每个点不能到达结点1, ...
- 【HDU】3068 最长回文
[算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...
- Quick-Cocos2dx-Community_3.6.3_Release 编译时libtiff.lib 无法解析
Quick-Cocos2dx-Community_3.6.3_Release 使用VS2012编译,报错: libtiff.lib lnk2001 无法解析的外部符号 ltod3 类似于上面这种,刚才 ...
- VMware Workstation Pro 14 序列号
VMware Workstation Pro 14 序列号: AA702-81D8N-0817Y-75PQT-Q70A4 YC592-8VF55-M81AZ-FWW5T-WVRV0 FC78K-FKE ...
- ribbon设置url级别的超时时间
序 ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间.这里hack一下,实现url基本的ribbon超时时间设置.具体的思路就是重 ...