BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
来源:互联网 发布:网络打鱼游戏赌博案件 编辑:程序博客网 时间:2024/05/29 08:07
题目大意:自己看= =
容易发现所有的变换都是线性变换,用矩乘模拟
循环那个用个栈来模拟嵌套关系就行了
#include <map>#include <string>#include <cstdio>#include <cstring>#include <sstream>#include <iostream>#include <algorithm>#define M 110#define MOD 1000000007using namespace std;map<string,int> var_map;int stack[M],top;int tot;int Hash(string s){ int &re=var_map[s]; if(!re) re=++tot; return re;}struct Matrix{ int a[M][M]; Matrix() {} Matrix(int val) { memset(a,0,sizeof a); for(int i=0;i<=tot;i++) a[i][i]=val; } int* operator [] (int i) { return a[i]; } friend Matrix operator * (Matrix x,Matrix y) { Matrix z(0); for(int i=0;i<=tot;i++) for(int j=0;j<=tot;j++) for(int k=0;k<=tot;k++) (z[i][j]+=(long long)x[i][k]*y[k][j]%MOD)%=MOD; return z; } friend Matrix Quick_Power(Matrix x,int y) { Matrix re(1); while(y) { if(y&1) re=re*x; x=x*x; y>>=1; } return re; }}matrix[M];int main(){ string buffer; new (&matrix[0])Matrix(1); while(1) { static char s[360]; gets(s); istringstream stream(s); stream>>s; if(s[0]>='a'&&s[0]<='z') { static int b[M]; int left=Hash(s); memset(b,0,sizeof b); while(stream>>s) { if(s[0]>='a'&&s[0]<='z') { int right=Hash(s); for(int i=0;i<=tot;i++) (b[i]+=matrix[top][right][i])%=MOD; } else if(s[0]>='0'&&s[0]<='9') { int right=atoi(s); (b[0]+=right)%=MOD; } } for(int i=0;i<=tot;i++) matrix[top][left][i]=b[i]; } else if(s[0]>='0'&&s[0]<='9') { stack[++top]=atoi(s); new (&matrix[top])Matrix(1); } else if(s[0]=='}') { matrix[top-1]=Quick_Power(matrix[top],stack[top])*matrix[top-1]; top--; } else if(s[0]=='R') { stream>>s; int val=Hash(s); int ans=0; for(int i=0;i<=tot;i++) (ans+=matrix[0][val][i])%=MOD; cout<<ans<<endl; break; } } return 0;}
0 0
- BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
- bzoj4778[Usaco2017 Open]COWBASIC 矩阵乘法
- BZOJ 4776 Usaco2017 Open Modern Art
- BZOJ 4780 Usaco2017 Open Modern Art 2
- BZOJ 4781 Usaco2017 Open Paired Up
- BZOJ 4782 Usaco2017 Open Bovine Genomics
- BZOJ 4781: [Usaco2017 Open]Paired Up 贪心
- bzoj 4781: [Usaco2017 Open]Paired Up
- 【BZOJ 2738】 矩阵乘法
- [BZOJ 2738]矩阵乘法
- BZOJ 1297 矩阵乘法
- BZOJ 2738: 矩阵乘法
- BZOJ 2738: 矩阵乘法
- bzoj 2738 矩阵乘法
- BZOJ 4777 Usaco2017 Open Switch Grass Kruskal+线段树
- BZOJ 4779 Usaco2017 Open Bovine Genomics Trie树
- BZOJ 4776([Usaco2017 Open]Modern Art-想法题)
- bzoj 4780: [Usaco2017 Open]Modern Art 2 (模拟)
- iOS中的Runtime
- HYSBZ 4596 黑暗前的幻想乡
- Android 内存优化 第二章
- cmd批处理 nul 部分用法
- zookeeper+Kafka集群部署
- BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
- 妙味课堂VIP课程
- Linux 环境部署-- JDK安装
- 实验:C++实验3-个人所得税计算器
- bitbucket基本操作
- 映射/子转换、参数——kettle实战(4)
- sqlserver重启的行命令脚本,并且可以产生执行日志,可用于定时重启
- c++函数概念
- JavaScript的正则表达式