您的位置:首页 > 其它

矩阵——vijos1194 Domino

2017-05-03 22:18 288 查看
https://vijos.org/p/1194

首先感谢Matrix67

这道题目在《十个利用矩阵乘法解决的经典题目》里面有详细的解答;

这种方法巧得不行;



代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Ll long long
using namespace std;
struct jv{
int n,m;
int a[32][32];
jv(){n=m=0;memset(a,0,sizeof a);}
}a;
int v[10]={0,3,6,12,15,24,27,30};//这个是竖放的各种结果
int n,m,mo;
jv cheng(jv a,jv b){
jv c;c.n=a.n;c.m=b.m;
for(int i=0;i<=c.n;i++)
for(int k=0;k<=a.m;k++)if(a.a[i][k])
for(int j=0;j<=c.m;j++)
c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mo;
return c;
}
jv ksm(int k){
jv ans=a,c=a;
for(k--;k;k>
e6c9
;>=1,c=cheng(c,c))
if(k&1)ans=cheng(ans,c);
return ans;
}
int main()
{
scanf("%d%d%d",&n,&m,&mo);
m=1<<m;m--;
a.n=a.m=m;
for(int i=0;i<=m;i++)
for(int j=0;j<=m;j++)
if(((~i)&j)==((~i)&m))//横放
for(int k=0;k<8;k++)a.a[i][j]=a.a[i][j]||(i&j)==v[k];//竖放
printf("%d",ksm(n).a[m][m]);
}


这里谈谈我对资源共享的想法;

我们绍兴一中,是不允许资源在互联网上共享的;

我们学生自己做的ppt,是不可以在互联网上共享的;

虽然,我们的PPT大都是从互联网上各个博客里面取精华而合成的;

我们的原创题时不允许在互联网上共享的;

虽然,这些题目很都在bzoj上有基本一样的题目和数据;

我以前学莫比乌斯,真的是一脸懵逼;

然后看到了popoqqq的ppt,才如梦初醒;

现在做矩阵,一头雾水;

看到Matrix67的论文,才恍然大悟;

我们在学习时,是各地的神犇的资源救了我们;

为什么我们有发现有创新的时候,要藏着掖着;

我上次看到了某中学的学生的博客,凡是《对于XXXX的总结》,都设了密码;

我感到恶心;

如果信息学竞赛要依靠垄断学习资源来获取胜利,那么中国会埋没很多人才(没指我);

不过从国人的素质角度来考虑的话,自己有的资源不外传好像是必然的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: