题目信息

题目传送门

解题思路


在此图中,A表示xa,B表示xb,C表示xc,D表示xd,那么这四个点就能组成一个魔法阵。
令k = xd - xc
根据题目条件可得:

  • xb - xa = 2k
  • xc - xb > 6k

综上,可求出:
1 ≤ k ≤ n / 9
所以我们可以枚举k和d的位置,这样就可以确定C和D的值了。
定义sumi为第i中方案数(算完了记录后马上改变),那么:

  • sumd = suma * sumb * sumc
  • sumc = suma * sumb * sumd

同理,我们继续枚举a的位置,确定A和B的值,可得:

  • suma = sumb * sumc * sumd
  • sumb = suma * sumc * sumd

对于每一个xi,我们输出对应的az[i], bz[i], cz[i]和dz[i]即可。
时间复杂度:O(n2),即O((n / 9) 2)

代码实现

#include <bits/stdc++.h>
using namespace std;
const int N = 40005, M = 15005;
int x[N], z[N][5], sum[M];
int main() {int n, m;cin >> n >> m;for (int i = 1; i <= m; ++i) {cin >> x[i];++sum[x[i]];}for (int k = 1; k * 9 < n; ++k) {int pre = 0;int a, b, c, d;// 枚举dfor (d = k * 9 + 2; d <= n; ++d) {a = d - 9 * k - 1;b = d - 7 * k - 1;c = d - k;// 前缀和pre += sum[b] * sum[a];z[c][3] += sum[d] * pre;z[d][4] += sum[c] * pre;}pre = 0;// 枚举afor (a = n - k * 9 - 1; a >= 1; --a) {b = a + 2 * k;c = a + k * 8 + 1;d = a + k * 9 + 1;pre += sum[c] * sum[d];z[a][1] += sum[b] * pre;z[b][2] += sum[a] * pre;}} for (int i = 1; i <= m; ++i) {cout << z[x[i]][1] << ' ' << z[x[i]][2] << ' ' << z[x[i]][3] << ' ' << z[x[i]][4] << '\n';}return 0;
}

NOIP2016普及组T4(魔法阵)题解相关推荐

  1. C++——NOIP2016普及组 t4——魔法阵

    题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有 m 个魔法物品,编号分别为 1,2,...,m  .每个物品具有一个魔法值,我们用 xi 表示编号为  ...

  2. 【2016NOIP普及组】T4:魔法阵 试题解析

    [16NOIP普及组]魔法阵 时间限制: 1000 ms         内存限制: 262144 KB [题目描述] 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法量. 大魔法 ...

  3. NOIP2016普及组复赛第一题的AC程序加题解pascal

    P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...

  4. NOIP2016 普及组 总结+题目吐槽+代码+简单题解

    提高组回来之后,像往年一样,做了一下普及组的题 先吐槽一下 T1 这题一眼看上去以为可以用不同种类的铅笔,没想到只能用一种种类,我240B搞定 #include<cstdio> int m ...

  5. 【做题记录】[NOIP2016 普及组] 魔法阵

    P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...

  6. P1909 [NOIP2016 普及组] 买铅笔

    P1909 [NOIP2016 普及组] 买铅笔 提交308.01k 通过130.89k 时间限制1.00s 内存限制125.00MB 提交答案加入题单复制题目 做题计划(首页) 个人题单 团队题单 ...

  7. 洛谷——P1909 [NOIP2016 普及组] 买铅笔

    P1909 [NOIP2016 普及组] 买铅笔 题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不 ...

  8. NOIP2018(普及组 ) 赛后感想 题解

    本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可. 文章目录 NOIP2018(普及组 ) 赛后感想 & 题解 #1. 标题统计 #2. 龙虎斗 #3. 摆渡车 Lemma ...

  9. NOIP2012 普及组 T4 文化之旅

    文化之旅 (NOIP2012 普及组 T4 ) 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文 ...

  10. P2058 [NOIP2016 普及组] 海港

    题目背景 NOIP2016 普及组 T3 题目描述 小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小 K 对这些到达海港的船只非常感兴趣,他按照时间记 ...

最新文章

  1. Spring Cloud第五章:服务网关Zuul
  2. 給曾經的三年,寫點什么吧。-紀念華軟
  3. 操作iframe里面的标签内容
  4. 吴恩达给 74 岁老父亲发证了!8 年完成 146 门课程!
  5. java 正则表达式的使用
  6. 互联网日报 | 6月7日 星期一 | 华为已捐献鸿蒙全部基础能力;芝麻信用7年免押金4000亿;奈雪的茶通过港交所上市聆讯...
  7. krpano html5略缩图边框颜色,krpano加载场景缩略图列表
  8. VirtualBox一类系统只能出现一个?
  9. 小米手机第三方卡刷软件_小米4第三方recovery刷入教程 小米4卡刷必备程序
  10. QTTabBar 汉化 给资源管理器添加标签、文件批量重命名依据扩展名选中等功能
  11. urlpatterns的写法和patterns函数
  12. [转载]8种防盗链的方法
  13. 怎么批量给多个 PPT 添加自定义的水印?
  14. 读书笔记:在改变的时代改变自己
  15. 为什么亿万资产的投资者依旧对加密货币长期走势持乐观态度?
  16. 网易实习面经中的算法题(java版本含注释)
  17. Mobius 莫比乌斯
  18. 战地1如何修改服务器,战地1修改服务器地址
  19. sideEffects导致的全局样式消失
  20. 联想拯救者 R7000 Ubuntu 16.04 系统和显卡驱动安装踩坑教程

热门文章

  1. 我连鼠标光标都是爱你的形状——MATLAB自定义光标及png转化为光标数组
  2. 雨过天晴电脑保护系统校园版
  3. python ipaddr库_python访问纯真IP数据库的代码
  4. DirectShow介绍-1
  5. Android应用开发入门教程(经典版)
  6. 贴片工字电感的封装及结构
  7. 基于Rsoft的Beamprop模块进行光电子自聚焦透镜设计
  8. 使用COMSOL提取指定时刻固体火箭发动机内的流体域(观点)
  9. GeoTools操作shapefile
  10. java 字符串占位符动态替换值工具类