题目链接  ECNU Monthly 2018.10 Problem E

从开场写到结束……

显然要把三角形分成上下两部分。

把每一部分分成三部分,以上部分为例。

上面和右边,以及左下角的正方形。

也就是两个小三角形和一个正方形合起来。

处理正方形的时候稍微麻烦一些。

然后直接倍增就可以了。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define rep(i, a, b) for (int i(a); i <= (b); ++i)
  6. #define dec(i, a, b) for (int i(a); i >= (b); --i)
  7. #define fi first
  8. #define se second
  9. #define MP make_pair
  10.  
  11. typedef long long LL;
  12.  
  13. const int N = 1e3 + 10;
  14.  
  15. bitset <102> f[N][N][10], g[N][N][10], ff[N][N][10], gg[N][N][10];
  16. int n, m, q;
  17. int T;
  18. int lg[N + 10];
  19.  
  20. inline int check(int x, int y){
  21. return x >= 1 && x <= n && y >= 1 && y <= m;
  22. }
  23.  
  24. int main(){
  25.  
  26. lg[1] = 0;
  27. rep(i, 2, 1001) lg[i] = lg[i >> 1] + 1;
  28. scanf("%d%d", &n, &m);
  29.  
  30. rep(i, 1, n){
  31. rep(j, 1, m){
  32. int x;
  33. scanf("%d", &x);
  34. f[i][j][0].set(x);
  35. g[i][j][0].set(x);
  36. ff[i][j][0].set(x);
  37. gg[i][j][0].set(x);
  38. }
  39. }
  40.  
  41. rep(k, 1, 9){
  42. rep(i, 1, n){
  43. rep(j, 1, m){
  44. int xx, yy, zz = 1 << (k - 1);
  45. f[i][j][k] |= f[i][j][k - 1];
  46. xx = i - zz;
  47. yy = j;
  48.  
  49. if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1];
  50.  
  51. xx = i;
  52. yy = j + zz;
  53. if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1];
  54.  
  55. xx = i - zz;
  56. yy = j + zz;
  57. if (check(xx, yy)) f[i][j][k] |= f[xx][yy][k - 1];
  58.  
  59. ff[i][j][k] |= ff[i][j][k - 1];
  60.  
  61. xx = i + zz;
  62. yy = j;
  63. if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1];
  64.  
  65. xx = i;
  66. yy = j + zz;
  67. if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1];
  68.  
  69. xx = i + zz;
  70. yy = j + zz;
  71. if (check(xx, yy)) ff[i][j][k] |= ff[xx][yy][k - 1];
  72.  
  73. }
  74. }
  75. }
  76.  
  77. rep(k, 1, 9){
  78. rep(i, 1, n){
  79. rep(j, 1, m){
  80. int xx, yy, zz = 1 << (k - 1);
  81. g[i][j][k] |= f[i][j][k - 1];
  82. xx = i - zz;
  83. yy = j;
  84. if (check(xx, yy)) g[i][j][k] |= g[xx][yy][k - 1];
  85.  
  86. xx = i;
  87. yy = j + zz;
  88. if (check(xx, yy)) g[i][j][k] |= g[xx][yy][k - 1];
  89.  
  90. gg[i][j][k] |= ff[i][j][k - 1];
  91. xx = i + zz;
  92. yy = j;
  93. if (check(xx, yy)) gg[i][j][k] |= gg[xx][yy][k - 1];
  94.  
  95. xx = i;
  96. yy = j + zz;
  97. if (check(xx, yy)) gg[i][j][k] |= gg[xx][yy][k - 1];
  98.  
  99. }
  100. }
  101. }
  102.  
  103. scanf("%d", &q);
  104. while (q--){
  105. int x, y, z;
  106. scanf("%d%d%d", &x, &y, &z);
  107.  
  108. if (z == 1){
  109. puts("1");
  110. continue;
  111. }
  112.  
  113. int c = lg[z];
  114.  
  115. bitset <102> ret;
  116.  
  117. int xx, yy, zz = 1 << c;
  118.  
  119. xx = x - z + zz;
  120. yy = y;
  121.  
  122. ret |= g[xx][yy][c];
  123.  
  124. xx = x;
  125. yy = y + z - zz;
  126.  
  127. ret |= g[xx][yy][c];
  128.  
  129. int t = (z) >> 1;
  130.  
  131. int l = lg[t], ll = 1 << l;
  132.  
  133. ret |= f[x][y][l];
  134.  
  135. xx = x - t + ll;
  136. yy = y;
  137. ret |= f[xx][yy][l];
  138.  
  139. xx = x;
  140. yy = y + t - ll;
  141. ret |= f[xx][yy][l];
  142.  
  143. xx = x - t + ll;
  144. yy = y + t - ll;
  145. ret |= f[xx][yy][l];
  146.  
  147. xx = x + z - zz;
  148. yy = y;
  149. ret |= gg[xx][yy][c];
  150.  
  151. xx = x;
  152. yy = y + z - zz;
  153. ret |= gg[xx][yy][c];
  154.  
  155. ret |= ff[x][y][l];
  156. xx = x + t - ll;
  157. yy = y;
  158. ret |= ff[xx][yy][l];
  159.  
  160. xx = x;
  161. yy = y + t - ll;
  162. ret |= ff[xx][yy][l];
  163.  
  164. xx = x + t - ll;
  165. yy = y + t - ll;
  166. ret |= ff[xx][yy][l];
  167.  
  168. printf("%d\n", (int)ret.count());
  169. }
  170.  
  171. return 0;
  172.  
  173. }

ECNU 2018 10月月赛 E 盖房子 (bitset + 倍增)的更多相关文章

  1. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

  2. 洛谷 T28312 相对分子质量【2018 6月月赛 T2】 解题报告

    T28312 「化学」相对分子质量 题目描述 做化学题时,小\(F\)总是里算错相对分子质量,这让他非常苦恼. 小\(F\)找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也 ...

  3. 洛谷10月月赛Round.3

    Rank11:260=60+100+100 P2409 Y的积木 题目背景 Y是个大建筑师,他总能用最简单的积木拼出最有创意的造型. 题目描述 Y手上有n盒积木,每个积木有个重量.现在他想从每盒积木中 ...

  4. 洛谷10月月赛Round.1| P3398 仓鼠找sugar[LCA]

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  5. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  6. 洛谷10月月赛Round.1| P3399 丝绸之路 [DP]

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  7. csu 10月 月赛 H 题 A Very Hard Problem

    Description CX老湿经常被人黑,被黑得多了,自己也就麻木了.于是经常听到有人黑他,他都会深情地说一句:禽兽啊! 一天CX老湿突发奇想,给大家出了一个难题,并且声称谁能够准确地回答出问题才能 ...

  8. csu 10月 月赛 I 题 The Contest

    Description 殷犇有很多队员.他们都认为自己是最强的,于是,一场比赛开始了~ 于是安叔主办了一场比赛,比赛有n个题目,每个题目都有一个价值Pi和相对能力消耗Wi,但是有些题目因为太坑不能同时 ...

  9. csu 10月 月赛 J 题

    Description CSU又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧). 在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非 ...

随机推荐

  1. sql cmd命令执行sqlserver的sql文件

    有的时候,我们通过Log Explorer工具根据日志生成的回滚脚本,或者其他情况我们得到的脚本文件,通过sqlserver打开脚本文件的方式不爽,我们可以这样: 方式一: osql -S . -U ...

  2. elasticsearch client

    你可以用client做很多事情: 在集群中执行index, get, delete, search,update 操作 在集群中执行administrative tasks 如果你想再程序中嵌入ela ...

  3. 修改Maven仓库地址

    在%USERPROFILE%\.m2\settings.xml例如:C:\Users\LongShu\.m2\settings.xml 可以自定义Maven的一些参数, 复制%M2_HOME%\con ...

  4. 【BZOJ1560】【JSOI2009】火星藏宝图 [DP]

    火星藏宝图 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Samp ...

  5. codeforces——contest 864 problemE

    Polycarp is in really serious trouble — his house is on fire! It's time to save the most valuable it ...

  6. 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage

    [算法]搜索 [题意]给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点). [题解] 真是一道奥妙重重的题目. 每个点不能到达结点1, ...

  7. 【HDU】3068 最长回文

    [算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...

  8. Quick-Cocos2dx-Community_3.6.3_Release 编译时libtiff.lib 无法解析

    Quick-Cocos2dx-Community_3.6.3_Release 使用VS2012编译,报错: libtiff.lib lnk2001 无法解析的外部符号 ltod3 类似于上面这种,刚才 ...

  9. VMware Workstation Pro 14 序列号

    VMware Workstation Pro 14 序列号: AA702-81D8N-0817Y-75PQT-Q70A4 YC592-8VF55-M81AZ-FWW5T-WVRV0 FC78K-FKE ...

  10. ribbon设置url级别的超时时间

    序 ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间.这里hack一下,实现url基本的ribbon超时时间设置.具体的思路就是重 ...