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. java.注释类型

    单行注释  //注释内容 多行注释 /*注释内容*/ 文档注释 /**注释内容*/

  2. flot_js_$用法解释

    $用法解释 $在JS中本身只是一个符号而异,在JS里什么也不是.但在JS应用库JQUERY的作者将之做为一个自定义函数名了,这个函数是获取指定网页元素的函数,使用非常之频繁,所以好多新手不知道,还以为 ...

  3. spark streaming - kafka updateStateByKey 统计用户消费金额

    场景 餐厅老板想要统计每个用户来他的店里总共消费了多少金额,我们可以使用updateStateByKey来实现 从kafka接收用户消费json数据,统计每分钟用户的消费情况,并且统计所有时间所有用户 ...

  4. $.toJSON的使用方法

    我们都会使用jQuery的ajax方法取得json数据但是我们有的时候也要使用json数据给PHP传值,这个怎么做哪? 首先去http://code.google.com/p/jquery-json/ ...

  5. vscode icon in elementary os

    chmod +x /home/shenfeng/vscode/code /home/shenfeng/vscode/code sudo ln -s /home/shenfeng/vscode/code ...

  6. Delphi Xe 中如何把日期格式统一处理,玩转 TDatetime

    日期格式的处理总是会很复杂,因为不同的环境日 期格式也不一样.为了程序统一处理,  最好把格式给统一了: 可以在程序的初始化段: FormatSettings.ShortDateFormat := ' ...

  7. 161031、java.util.StringTokenizer使用及源码

    import java.util.StringTokenizer; public class TestStringTokenizer { public static void main(String[ ...

  8. 2014.12.05(解决eclipse的adb打不开)

    一.问题如下图所示 The connection to adb is down, and a severe error has occured.You must restart adb and Ecl ...

  9. 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)

    用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...

  10. 【转载】Perl异常处理方法总结

    程序脚本在运行过程中,总会碰到这样那样的问题,我们会预知一些问题并为其准备好处理代码,而有一些不能预知.好的程序要能尽可能多的处理可能出现的异常问题,本文就总结了一些方法来解决这些异常,当然perl在 ...