#Description
帕秋莉·诺蕾姬,有着“不动的大图书馆” 的称号,擅长使用各种各样的属性魔法。
——《东方求闻史记》
一如既往地,帕秋莉在图书馆中研究着魔法。今天,她在研究一本魔法书中的法阵。
这个法阵可以看成是按下面的规则生成一个规模为n(n 为非负整数) 的图形:

  1. 在直角坐标系xOy 中,画4 条线段:[(0,0), (2^n,0)], [(0, 0), (-2^n, 0)],[(0, 0), (0, 2^n)], [(0, 0), (0,-2^n)]。
  2. 对于所有的i = 1, 2, …, n,画两个正方形,一个以(0, 2^i), (0,-2i),(2i, 0), (-2^i, 0) 为顶点,另一个以(-2i-1,-2i-1),(-2i-1,2i-1), (2i-1,-2i-1)(2i-1,2i-1) 为顶点。
  3. 画一个以(1, 0), (-1, 0), (0,-1), (0, 1) 为顶点的正方形。
    比如,当n = 0 时的法阵是这样的:

    当n = 2 时的法阵是这样的:

    帕秋莉已经画出了这个巨大的法阵, 并且她能够同时控制k 种不同的属性元素。接下来,她要将这k 种元素分别依次灌注进法阵中的k 个不重叠不相交的三角形中,即这k 个三角形要灌注进不同的元素。这样,这个法阵就会被激活。
    然而,灌注的方法有许多种。为了能最大限度地进行实验,帕秋莉想把所有的方法都实验一遍。而摆在她面前的问题是,总共有多少种不同的灌注方法呢?
    注意,由于是法阵,看起来是中心对称或轴对称的两个三角形,也是实质不等同的。或者说,假如两个方案A 和B,只有通过旋转、翻转或二者组合才能使所有相同位置的三角形被灌注的元素相同,A 和B 仍然是不同的方案。只有本来所有相同位置的三角形被灌注的元素相同才算是相同的方案。
    由于方法数会很大,帕秋莉只需要你输出模1,000,000,007(10^9 + 7) 的结果就可以了。

#Input
输入文件magic.in。
一共一行两个整数n,k,意义如题中所述。

#Output
输出文件magic.out。
一共一行一个整数res,表示灌注方案数模1,000,000,007(109 + 7) 得到的结果。

#Sample Input
输入1:
0 0
输入2:
0 1
输入3:
0 2
输入4:
1 1

#Sample Output
输出1:
1
输出2:
8
输出3:
32
输出4:
32

#Data Constraint
对于15% 的数据,k <= 1。
对于30% 的数据,k <= 2。
另外,有15% 的数据,满足n <= 2。
对于100% 的数据,0<= n <= 200,0<= k <= min(200, 8n + 4)。

#题解
我这个语文渣都读懂了的题,就不写题意了吧。

首先,我们发现这题是一道很明显的DP
然后,我们发现不可做。
最后,我们弃疗了。

别急,老中医还没来呢!你的心脑方不要了吗?

当然,直接放弃是不对的,我们不可能直接做出一道未给任何思路的题。
除非你抄标
废话结束。
那么我们就来从n=0的情况中找思路。
我们画一个不优美的图,来介绍各种染色情况对答案的贡献:

那么我们发现总共有10种情况来对于n=0时的计算。

那如果要放大?n=1、2、3、200?
那么我们还是从小的看起来:
n=1

我们把三角形分成3个等级:
1)红色,定义为这个三角形顶点为原点,也就是可拓展的三角形。
2)绿色,定义为边长为1的三角形
3)黄色,定义为两个2级三角形拼成的三角形。

为什么?
我们要往外拓展一层,那么不管内部结构,于是只有这三种等级。
定义这3个等级的三角形有什么用?
当然是计算啦。
怎么保证?
我们在计算方案数时要保证不能重复选择,而这三种三角形之间是会相互影响的。
怎么办?
当我们忽略内部结构,只考虑能够继续扩展的三种三角形组成的形状。我们发现,这些可以拓展的三角形一定与上面 10 种方案中的某一种同构!
是不是很神奇?
这表明,只要用方案的编号,就能将能继续扩展的三角形的集合描述出来了。
f[i][j][k] 表示到第 i 层,总共选取了 j 个三角形,能继续扩展的源三角形组成的形状的编号为k时选取三角形的方案数。
然后我们再打表记录方案数,有:
1)变化方案flag[i][j]
2)三角形三的个数d1[i]
3)三角形二的个数d2[i]
然后根据下列的决策来枚举——

  1. 枚举将哪些能够扩展的三角形向外扩展。
  2. 在之前的基础上,枚举选取几个三级三角形。
  3. 在之前的基础上,枚举选取几个二级三角形。

设s2为下一个状态,s1为当前状态。考虑递推,然后我们可以推出步骤:
变化方案 * 三角形三的个数的方案 * 三角形二的个数的方案 * 原来的方案
也就是下面的方程:
f[i+1][j+k+l][s2]+=f[i][j][s1]∗flag[s1][s2]∗C(d2[s2],k)∗C(d1[s2]−k∗2,l)f[i+1][j+k+l][s2]+=f[i][j][s1]∗flag[s1][s2]∗C(d2[s2],k)∗C(d1[s2]−k∗2,l)
(自GMH的方程)
我绝对不告诉你我懒得打。

然后就是注意边界条件。
然后就是初始化。(自己分析图片即可得到)
然后就是细节。(尤其是mo数,我不小心打成1000000009,还无伤大雅地调了半个小时)
然后就是提交AC。

标程:

vari,j,k,l,x,y,n,m:longint;flag:array [1..10,1..10] of longint=((1,0,0,0,0,0,0,0,0,0),(1,1,0,0,0,0,0,0,0,0),(1,0,1,0,0,0,0,0,0,0),(1,2,0,1,0,0,0,0,0,0),(1,2,0,0,1,0,0,0,0,0),(1,1,1,0,0,1,0,0,0,0),(1,0,2,0,0,0,1,0,0,0),(1,3,0,2,1,0,0,1,0,0),(1,2,1,1,0,2,0,0,1,0),(1,4,0,4,2,0,0,4,0,1));d1:array[1..10] of longint=(12,9,6,6,6,3,0,3,0,0);d2:array[1..10] of longint=(4,2,1,1,0,0,0,0,0,0);f:array[0..200,0..200,1..10] of int64;c:array[0..20,0..20] of int64;ans,mo:int64;
beginassign(input,'magic.in');reset(input);assign(output,'magic.out');rewrite(output);readln(n,m);mo:=1000000007;f[0,0,1]:=1;f[0,1,2]:=4;f[0,1,3]:=4;f[0,2,4]:=4;f[0,2,5]:=2;f[0,2,6]:=8;f[0,2,7]:=2;f[0,3,8]:=4;f[0,3,9]:=4;f[0,4,10]:=1;c[0,0]:=1;for i:=1 to 20 dobeginc[i,0]:=1;c[i,i]:=1;c[i,1]:=i;for j:=2 to i-1 dobeginc[i,j]:=(c[i-1,j-1]+c[i-1,j]) mod mo;end;end;for i:=0 to n-1 dobeginfor j:=0 to m dobeginfor k:=1 to 10 dobeginfor l:=1 to 10 dobeginif (f[i,j,k]>0) and (flag[k,l]>0)  thenbeginfor x:=0 to d2[l] dobeginfor y:=0 to d1[l]-x*2 dobeginif j+x+y<=m thenbeginf[i+1,j+x+y,l]:=(f[i+1,j+x+y,l]+f[i,j,k]*flag[k,l]*c[d2[l],x]*c[d1[l]-x*2,y]) mod mo;end;end;end;end;end;end;end;end;for k:=1 to 10 dobeginans:=(ans+f[n,m,k]) mod mo;end;for i:=1 to m do ans:=(ans*i) mod mo;writeln(ans);
end.

转载于:https://www.cnblogs.com/RainbowCrown/p/11148409.html

2018.07.12【2018提高组】模拟B组 【NOIP2015模拟10.27】魔法阵相关推荐

  1. 网吧服务器全部进不了系统,2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程...

    原标题:2018.07.12某网吧因为服务器系统盘健康度导致全体卡死重启的故障分析处理过程 导读: 天晚上20:54接到某网吧电话,说整个网吧大部分电脑自动重启了,而且进不去系统了.立即用电脑远程登录 ...

  2. 2018.07.12【2018提高组】模拟B组 【NOIP2015模拟10.27】魔道研究

    #Description "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --<The Grimoire of Ma ...

  3. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//

    嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)             是否有无操作系统:     2. 移植操作系统的好处有哪些 ...

  4. 【一周头条盘点】中国软件网(2018.11.12~2018.11.16)

    每一个企业级应用的人都置顶了中国软件网 中国软件网为你带来最新鲜的行业干货 一周热点 华为获得全球首个微模块产品PUE测试证书 近日,第四届数据中心基础设施峰会在西安成功召开,会上,TGG(中国)副主 ...

  5. 【跃迁之路】【522天】程序员高效学习方法论探索系列(实验阶段279-2018.07.12)...

    @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后,将 ...

  6. JZOJ2018.07.12【2018提高组】模拟B组 魔道研究

    4270. [NOIP2015模拟10.27]魔道研究 题目描述 "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --&l ...

  7. JZOJ2018.07.12【2018提高组】模拟B组 挑竹签

    4269. [NOIP2015模拟10.27]挑竹签 题目描述 挑竹签--小时候的游戏 夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏. 挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签 ...

  8. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  9. 阿里云基础产品技术月刊 2018年12月 1

    [关注最新商用产品技术] TOP1 阿里云弹性计算块存储产品"ESSD云盘"获2018年度云存储产品金奖 12月11日,在第十四届中国存储与数据峰会(Data & Stor ...

最新文章

  1. Fetch API 初步解读
  2. Windows PowerShell in Action
  3. java集合(List,Set,Map)详细总结
  4. strust2控制标签(二) merge标签,generator标签,subset标签,sort标签
  5. java skype 类库_Skype4Java 用 实现的 ,内附具体的开发文档和使用说明 Develop 238万源代码下载- www.pudn.com...
  6. python 监控jvm脚本
  7. 万年自学党聊聊如何选择编程学习资源?
  8. ubuntu20.04安装mysql_Ubuntu 20.04安装MySQL 8.0.20记
  9. sql 上亿 查询_在文件上使用 SQL 查询的示例
  10. Python批量下载抖音大V主页视频
  11. 数商云渠道分销管理系统方案:分销渠道系统趋势、作用、功能、业务场景
  12. 高斯函数的傅里叶变换
  13. 较好游戏型计算机配置单,i3-6100配什么显卡比较好?4000元i3-6100独显均衡游戏电脑配置推荐...
  14. 淘宝产品,为什么转化率还是这么低?
  15. 利用k8s集群部署第一个容器化应用
  16. 毕业论文发表在什么期刊
  17. Linus 批评英特尔的 LAM 代码,拒绝将其合并到内核
  18. Android 选择图片、上传图片之ImagePicker
  19. python点阵显示数字_Python实现点阵字体读取与转换的方法
  20. 诺奖得主本庶佑:真正一流的工作往往没有在顶级刊物上发表!

热门文章

  1. 04_好莱坞百万级电影评论数据分析
  2. 思博伦Spirent TestCenter _如何使用抓包过滤功能抓取特定的帧_双极未来
  3. 100个台阶,一次走一步,走两步,走三步,有多少种可能
  4. 苹果Mac电脑清理垃圾软件卸载工具CleanMyMac X
  5. OpenCV—Python PyLibTiff_psd 图像基本操作以及图像格式转换
  6. 数组的指针、指针数组以及指向指针的指针
  7. SAP CO01(创建生产订单)/MIGO(发货投料)前台操作
  8. java 数组 协变类型6_Java漫谈-协变返回类型
  9. 代工大战改变台积电独霸地位?
  10. 如何利用SQLyog数据库管理工具生成各表的关系视图