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. VCL Tclientsocket, Tserversocket控件安装方法

    菜单component->Install Packets 按Add按钮,选择delphi目录里的bin目录下的dclsockets70.bpl(delphi2010是dclsockets140. ...

  2. how to use automapper in c#, from cf~

    [DataContract] public class GroupDto { [DataMember] public int id { get; set; } [DataMember] public ...

  3. Ruby调用Excel相关的函数

    require 'win32ole'myexcel = WIN32OLE.new("excel.application")#WIN32OLE.open 方法打开用例文件,用Call ...

  4. ini,config文件的读取修改

    修改ini配置文件 // 声明INI文件的写操作函数 WritePrivateProfileString() [System.Runtime.InteropServices.DllImport(&qu ...

  5. CCF真题之网络延时

    201503-4 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为1.其他的交换机都连接 ...

  6. paper 83:前景检测算法_1(codebook和平均背景法)

    前景分割中一个非常重要的研究方向就是背景减图法,因为背景减图的方法简单,原理容易被想到,且在智能视频监控领域中,摄像机很多情况下是固定的,且背景也是基本不变或者是缓慢变换的,在这种场合背景减图法的应用 ...

  7. logstash中的redis插件

    redis作为logstash中的官方broker,既有input插件,还有output插件. redis input插件 data_type属性: 有三种类型, list -> BLPOP - ...

  8. PAT乙级 1011. A+B和C (15)

    1011. A+B和C (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 给定区间[-231, 231 ...

  9. 关于在windows下使用mingw并行编译wxwidgets时的错误

    清理用的命令:mingw32-make -j4 -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 clean 2>nul ...

  10. 【LAMP】在Debian系linux下安装LAMP

    一.安装基本的编译环境 apt-get install build-essential 二.安装MySQL apt-get install mysql-server 三.安装Apache apt-ge ...