PKU 1977 Odd Loving Bakers
来源:互联网 发布:弹窗广告拦截软件 编辑:程序博客网 时间:2024/04/26 22:13
一个矩阵乘法的问题, 迭代矩阵用二分的方法, 要注意只需考虑奇偶性, 所以用01矩阵就够了.
题目是从0开始计算, 所以迭代次数为t-1.
PS. 动态申请空间果然很慢, 还是模版好.
用new动态申请空间时:
Accepted 6960K 1063MS (没有delete)
Accepted 1860K 1235MS (加了delete)
使用静态二维数组+memcpy:
Accepted 360K 219MS
源码:
/********************************* matrix multiply. divide mat[]^n into (mat[]^(n/2))^2, the thought of dichotomy.*********************************/#include<iostream>#include<string>using namespace std;const int maxn=100+5;int n,t,len;string str,name[maxn];int a[maxn],r[maxn];int find(){for(int i=0;i<len;++i){if(name[i]==str) return i;}name[len++]=str;return len-1;}void mul_matrix(int (*x)[maxn], int (*y)[maxn]){int i,j,k,tmp[maxn][maxn];for(i=0;i<n;++i)for(j=0;j<n;++j){tmp[i][j]=0;for(k=0;k<n;++k){tmp[i][j]+=x[i][k]*y[k][j];tmp[i][j]&=1;}}memcpy(x,tmp,sizeof(tmp));}void cal_matrix(int m,int (*x)[maxn]){int i,tmp[maxn][maxn];memset(tmp,0,sizeof(tmp));for(i=0;i<n;++i) tmp[i][i]=1;while(m){if(m&1) mul_matrix(tmp,x);mul_matrix(x,x);m>>=1;}memcpy(x,tmp,sizeof(tmp));}int main(){//freopen("1.txt","r",stdin);int i,j,k,tc,loc,to,res;int x[maxn][maxn],y[maxn][maxn];cin>>tc;while(tc--){res=0;memset(x,0,sizeof(x));memset(y,0,sizeof(y));cin>>n>>t;len=0;for(i=0;i<n;++i){cin>>str;loc=find();cin>>a[loc]>>k;a[loc]&=1;for(j=0;j<k;++j){cin>>str;to=find();//x[loc][to]++;x[loc][to]=1;}}for(i=0;i<n;++i){//cout<<a[i]<<" ";x[i][i]=1-(x[i][i]&1);}cal_matrix(t-1,x);/*for(i=0;i<n;++i){for(j=0;j<n;++j)cout<<x[i][j]<<" ";cout<<endl;}*/for(i=0;i<n;++i){r[i]=0;for(j=0;j<n;++j)r[i]+=a[j]*x[j][i];//cout<<r[i]<<" ";if(r[i]&1) res++;}printf("%d/n",res);}return 0;}/******************15 2a 234 4 b c d eb 586 1 cc 97 1 ed 768 3 a e de 798 4 b e c a******************/
这个矩阵幂的函数要收下了, 嗯嗯~
- PKU 1977 Odd Loving Bakers
- PKU 1977 Odd Loving Bakers
- pku 1977 Odd Loving Bakers(矩阵快速幂)
- POJ 1977 Odd Loving Bakers
- Poj 1977 Odd Loving Bakers//矩阵
- poj 1977 Odd Loving Bakers(矩阵)
- loving
- loving
- Loving Knowledge
- to my loving cccc
- Still loving you
- Loving with an Open Hand
- I'm loving my job~~
- hdu 5229 ZCC loving string
- i'm still loving you 怀念babyvox
- 10 Ways to Start Loving Life
- loving the person,is it difficut?
- pku 1018 && pku 1095
- 近期
- 骗子!大家千万不要买asp.net+sql server项目开发全程实录
- 国外软件测试职业发展的各个阶段
- 开通了
- [InfoPath] 如何配置实现InfoPath的大小类的联动和信息查询?
- PKU 1977 Odd Loving Bakers
- alert,confirm,prompt的用法
- asp.net Web 程序设计 (基础知识)
- 深圳的实习生活(5)
- iptable
- jbpm源代码研究(一)-------IOC容器
- 当时就是这样了
- linux设备驱动加载方式
- 一个人走真的好难