http://acdream.info/problem?pid=1093

女神的正多面体

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Others)

Problem Description

EOF女神灰常喜欢整齐的东西,例如多面体中最喜欢的就是正多面体。正多面体的定义为:指每个面都是全等的正多边形的多面体。欧拉大人告诉我们,正多面体只有正四面体(正三棱锥),正六面体(立方体),正八面体(钻石?),正十二面体,还有正二十面体。后面两种太复杂了,EOF女神不喜欢。下面是前三种多面体的图片,EOF女神给每个多面体的每个顶点都编号了。

EOF女神想知道,如果从其中一个点出发,每一步可以沿着棱走到另一个顶点,k步之内从到达指定的顶点有多少种走法?(P.S.路径中只要有一个顶点不一样即视为不同的走法)。EOF女神知道结果会很庞大,因此只要知道除以1000000007的余数就可以了。

Input

先输入一个正整数T,表示测试数据的组数。

接下来是T行,每行包括四个正整数n,k,i,j,其中n∈{4,6,8},表示正多面体的种类,i为起点的编号,j为终点的编号,k为步数(k<=10^18)

Output

    输出T行,每行输出一个整数,表示方法数。(记得要取余哦~)

Sample Input

3
6 1 8 4
6 2 3 1
8 3 2 4

Sample Output

1
2
12

Hint

第二组样例,有3->2->1与3->4->1两种方法

第三组样例,有2->1->4、2->3->4、2->5->4、2->6->4、2->1->3->4、2->1->5->4、2->3->1->4、2->3->6->4、2->5->1->4、2->5->6->4、2->6->3->4、2->6->5->4这12种方法

Source

mathlover

Manager

 
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef long long LL;
const LL p = ;
struct Matrix
{
LL mat[][][];
void init(int x,int n)
{
int i,j;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(i==j)mat[x][i][j]=;
else mat[x][i][j]=;
}
void mem(int x)
{
memset(mat[x],,sizeof(mat[x]));
}
};
Matrix multiply(Matrix cur,Matrix ans,int x,int n)
{
Matrix now;
now.mem(x);
int i,j,k;
for(i=;i<=n;i++)
{
for(k=;k<=n;k++)
{
if(cur.mat[x][i][k]==)continue;
for(j=;j<=n;j++)
{
if(ans.mat[x][k][j]==)continue;
now.mat[x][i][j]=now.mat[x][i][j]+cur.mat[x][i][k]*ans.mat[x][k][j];
now.mat[x][i][j]%=p;
}
}
}
return now;
}
Matrix add(Matrix cur,Matrix ans,LL x,LL n)
{
Matrix now;
now.mem(x);
int i,j;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
now.mat[x][i][j]=ans.mat[x][i][j]+cur.mat[x][i][j];
if(now.mat[x][i][j]>=p) now.mat[x][i][j]-=p;
}
}
return now;
}
void solve(Matrix hxl,LL n,LL len,LL x,LL st,LL ed)
{
Matrix p1=hxl,p2=hxl,ret;
ret.init(x,len);
LL dp[],dlen=,i;
while(n)
{
dp[++dlen]=(n&);
n=n>>;
}
for(i=dlen-;i>=;i--)
{
p1=multiply(p1,add(p2,ret,x,len),x,len);
p2=multiply(p2,p2,x,len);
if(dp[i]==)
{
p2=multiply(p2,hxl,x,len);
p1=add(p2,p1,x,len);
}
}
printf("%lld\n",p1.mat[x][st][ed]);
}
int main()
{
int T,i,j;
LL n,k,st,ed;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&n,&k,&st,&ed);
if(n==)
{
Matrix hxl;
memset(hxl.mat,,sizeof(hxl.mat));
for(i=;i<=;i++)
for(j=;j<=;j++)
{
if(i==j)continue;
hxl.mat[][i][j]=;
}
solve(hxl,k,,,st,ed);
}
else if(n==)
{
Matrix hxl;
memset(hxl.mat,,sizeof(hxl.mat));
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
solve(hxl,k,,,st,ed);
}
else if(n==)
{
Matrix hxl;
memset(hxl.mat,,sizeof(hxl.mat));
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;hxl.mat[][][]=;
solve(hxl,k,,,st,ed);
}
}
return ;
}

acdream 1093 女神的正多面体的更多相关文章

  1. ACdream区域赛指导赛之专题赛系列(1)の数学专场

    Contest : ACdream区域赛指导赛之专题赛系列(1)の数学专场 A:EOF女神的相反数 题意:n(<=10^18)的数转化成2进制.翻转后(去掉前导零)输出十进制 思路:water ...

  2. [ACdream] 女神教你字符串——三个气球

    Problem Description 女神邀请众ACdream开联欢会,显然作为ACM的佼佼者,气球是不能少的~.女神准备了三种颜色的气球,红色,黄色,绿色(交通信号灯?) 有气球还不能满足女神,女 ...

  3. [ACdream]女神教你字符串——导字符串

    Problem Description 正如大家知道的,女神喜欢字符串,而在字符串中,女神最喜欢回文字符串,但是不是所有的字符串都是回文字符串,但是有一些字符串可以进行“求导”来变成回文字符串. 字符 ...

  4. [ACdream]女神教你字符串——违和感

    题目描述: 女神最喜欢字符串了,字符串神马的最有爱了. 女神是一个重度强迫症患者,面对不是对称的东西,她会觉得太违和了,就会爆炸.所以她手上的字符串都是回文的,像什么a,b,aabaa,abcba,上 ...

  5. kali linux之窥看女神上网隐私(ettercap+wireshark+zenmap +dsniff)

    作者:小波 http://www.cnblogs.com/xiaobo-Linux/ 无聊就玩了玩,不要干一些坏事哟~~网上也有一些文章关于kali linux的,就实战了一番.kali是用的debi ...

  6. 海洋女神建新installshield交流群了,原来的老群都满了,请加新群哦,记得认真填写验证信息

    群号511751143 海洋女神installshield群

  7. 南邮CTF隐写之丘比龙的女神

    刚开始下载下图片来 习惯性的binwalk一下 没发现东西 formost一下也没分离出来 扔进c32asm中发现有nvshen.jpg 于是改后缀名字为.zip 解压nvshen.jpg发现无法解压 ...

  8. 找女神要QQ号码

    引言 我们组来了个美女程序员,我心里窃喜,哈哈这下机会来了.我在想怎么下手呢?好吧,还是从QQ号码开始,找到女神要到QQ号,哈哈,我真是个天才~~~ 是这样子滴 想法是美好的,现实是残酷的,找女神要Q ...

  9. 美女程序员是如何将QQ转换成题目中那串数字的--读博文《找女神要QQ号码》

    我只能说好好的端午节你们不约么?,还在这里写代码?我也是够无聊的,下班了不走也在这跟风写着玩!<找女生要QQ号码原文>原文链接http://www.cnblogs.com/iforever ...

随机推荐

  1. 关于内存 GetMemory( ) 笔试分析

    1. #include<stdio.h>#include<string.h>void GetMemory(char *p){ p=(char *)malloc(100); }i ...

  2. Win2008 IIS7日期时间格式更改最简便方法

    windows2008 这么高级的系统不可能改个系统的日期时间显示格式还要进注册表啊.于是有baidu,google了下终于发现了,原来还有不需要注册表的更简便方法. windows2008默认时间格 ...

  3. Oracle中的MD5加密

    一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...

  4. linux下的终端模拟器urxvt的配置

    内容所在的文件: ~/.Xdefaults 文件的内容: URxvt.background:[90]#000000URxvt.foreground:#ffffffURxvt.colorBD:Gray9 ...

  5. php防止刷新(流量攻击)的一段代码

    <?php//查询禁止IP$ip =$_SERVER['REMOTE_ADDR'];$fileht=".htaccess2";if(!file_exists($fileht) ...

  6. android 学习随笔十八(广播与服务 )

    1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...

  7. PHP判断客户端是PC web端还是移动手机端方法

    PHP判断客户端是PC web端还是移动手机端方法需要实现:判断手机版的内容加上!c550x260.jpg后缀变成缩略图PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 ...

  8. xhr dojo load

    require(["dojo/_base/xhr"], function(xhr) { // Execute a HTTP GET request xhr.get({ // The ...

  9. listview 滑动以后设置最上面一行为整行展示

    需求: listview显示的第一行永远为整行,不能为半行. 参考: android listview 每次滑动整行 1. 添加 listview 的 setOnScrollListener() 事件 ...

  10. oracle 自动关闭 数据库连接

    数据库启动后过一会自动断开连接(大概10分钟)    方法一.直接修改资源配置文件     分三个步骤在sqlplus环境下完成.     第一步,查询资源文件,找到CONNECT_TIME所在的pr ...