计蒜客NOIP模拟赛6 D1T1Diamond-square
Diamond-square 算法是一种能够用于生成噪声的算法,现在我们考虑这个算法的一个变种。
你有一个 2^n\times 2^n2n×2n 的网格,一共有 (2^n+1)^2(2n+1)2个格点,现在给定四个角的初始权值以及一个值 xx。
整个算法由若干个 diamond step 和 square setp 交替进行来构成。
在一个 diamond step 或者 square step 中,会有若干个之前没有被赋值的点被赋值,其值等于之前的某四个或三个点的值的和加上 xx。
xx 的值每进行完一次 diamond step 和一次 square step 之后就会变成原来的二倍。
而具体的过程用图来描述如下,在样例解释中可以看到更详细的文字解释:





现在我们想知道整个矩阵最后的值的和模 10^9+7109+7 等于多少。
输入格式
一行 66 个整数,分别代表 nn,左上角权值,右上角权值,左下角权值,右下角权值,xx 的初始值。
保证初始权值和 xx 都在 [0,10^9+7)[0,109+7)之内。
输出格式
一行一个整数,代表矩阵内所有元素的和模 10^9+7109+7 的值。
数据规模

样例解释
最终矩阵如下:
0 446 112 590 24 590 112 446 0
456 326 976 446 1142 446 976 326 456
122 1046 84 1346 218 1346 84 1046 122
670 506 1446 590 1428 590 1446 506 670
34 1382 258 1578 22 1578 258 1382 34
780 576 1656 700 1728 700 1656 576 780
162 1326 114 1756 298 1756 114 1326 162
646 466 1396 636 1622 636 1396 466 646
10 656 172 860 44 860 172 656 10
如题面图,四个角赋为初始值,随后开始执行算法:
Diamond step:中点被赋值为四个角的和 +x+x。
Square step:四条边的中点被赋值为所在边的两个端点与中点的和 +x+x。
xx 变为原来的两倍。
Diamond step:把整个矩阵分成四个等大小的正方形,这四个正方形的中点被分别赋值为正方形的四角的和 +x+x。
Square step:把整个矩阵分成四个大小相等的正方形,对于每个正方形的每一条边的中点,把他赋值为其向上下左右四个方向找到的第一个已经被赋值的点的和 +x+x(对于整个矩形的边界上的点,会有一个方向不存在,那么这个点被赋值为另外三个方向的和 +x+x)。
xx 变为原来的两倍。
所有点都被赋值,算法结束。
忽略每行输出的末尾多余空格
样例输入
3 0 0 10 10 2
样例输出
55178
不多BB,直接模拟就行了O(4n)
要注意尽可能少枚举多余的状态,如果变成了O(n*4n)就会超时
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
lol Mod=;
lol pw[],a[][],d,n,ans;
int main()
{int i,j,flag,k;
cin>>n;
pw[]=;
for (i=;i<=n;i++)
pw[i]=pw[i-]*;
cin>>a[][]>>a[][pw[n]]>>a[pw[n]][]>>a[pw[n]][pw[n]]>>d;
for (i=n;i>=;i--,(d*=)%=Mod)
{
for (j=;j<pw[n];j+=pw[i])
{
for (k=;k<pw[n];k+=pw[i])
{
int x=j+pw[i-],y=k+pw[i-];
a[x][y]=a[j][k]+a[j+pw[i]][k]+a[j][k+pw[i]]+a[j+pw[i]][k+pw[i]]+d;
a[x][y]%=Mod;
}
}
flag=;
for (j=;j<=pw[n];j+=pw[i-],flag^=)
{
for (k=flag*pw[i-];k<=pw[n];k+=pw[i])
{
if (j-pw[i-]>=)
a[j][k]+=a[j-pw[i-]][k];
if (j+pw[i-]<=pw[n])
a[j][k]+=a[j+pw[i-]][k];
if (k-pw[i-]>=)
a[j][k]+=a[j][k-pw[i-]];
if (k+pw[i-]<=pw[n])
a[j][k]+=a[j][k+pw[i-]];
a[j][k]+=d;
a[j][k]%=Mod;
}
}
}
for (i=;i<=pw[n];i++)
for (j=;j<=pw[n];j++)
ans+=a[i][j],ans%=Mod;
cout<<ans;
}
计蒜客NOIP模拟赛6 D1T1Diamond-square的更多相关文章
- 计蒜客NOIP模拟赛4 D2T1 鬼脚图
鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...
- 计蒜客 NOIP模拟赛(3) D1T1火山喷发
火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...
- 计蒜客NOIP模拟赛(2) D1T1邻家男孩
凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...
- 计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi
那年一个雨季,AmyZhi 在校门外弯身买参考书. 这时 SiriusRen 走过来,一言不合甩给她一道“自认为”很难的题: --------------- 给你一个数字 NN(NN 的范围是 11 ...
- 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...
- 计蒜客NOIP模拟赛4 D1T3 小X的佛光
小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水. 小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X ...
- 计蒜客NOIP模拟赛4 D1T2小X的密室
小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条 ...
- 计蒜客NOIP模拟赛4 D1T1 小X的质数
小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1以外,没有其他因数的数字. 但由于小 X ...
- 计蒜客NOIP模拟赛D2T3 数三角形
刚刚上高中的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决.给定一张无向完全图 G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色.现在,洁洁需要给这张图的多样性进行打分. ...
随机推荐
- CodeBlocks使用介绍
CodeBlocks对单个文件没法调试,需要建工程后才能调试,所以使用CodeBlocks必须先建工程. 一.如何用CodeBlocks建工程文件. 选择File->New->Projec ...
- formidable 表单文件和数据提交
只要涉及文件上传,那么form标签要加一个属性: <form action="http://127.0.0.1/dopost" method="post" ...
- Flask 部署和分发
到目前为止,启动Flask应用都是通过"app.run()"方法,在开发环境中,这样固然可行,不过到了生产环境上,势必需要采用一个健壮的,功能强大的Web应用服务器来处理各种复杂情 ...
- 【nodejs】安装browser-sync 遇到错误提示
首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题: 因为不被允许所以我只能不安装全局了: 但是又出现了如下的新问题 纠结了半个小时,终于知道为什么会出现这个问题了, node只 ...
- nyoj 聪明的kk
聪明的kk 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 聪明的"KK"非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国 ...
- 02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...
- 调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。
解决方案: 其实只要在客户端配置文件中加上如下紫色粗体属性( maxReceivedMessageSize): <?xml version="1.0" encoding=&q ...
- .net mvc 利用分部视图局部刷新.
页面利于$.Ajax: $(function(){ $("#btnpartview").click(function () { var model = []; model.push ...
- 【Learning】 多项式的相关计算
约定的记号 对于一个多项式\(A(x)\),若其最高次系数不为零的项是\(x^k\),则该多项式的次数为\(k\). 记为\(deg(A)=k\). 对于\(x\in(k,+ \infty)\),称\ ...
- Extensions in UWP Community Toolkit - Overview
概述 UWP Community Toolkit 中有一个 Extensions 的集合,它们可以帮助开发者实现很多基础功能,省去自己造轮子的过程,本篇我们先来看一下 Extensions 的功能都 ...