【ccf-csp201512-5】矩阵
试题编号: | 201512-5 |
试题名称: | 矩阵 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
创造一个世界只需要定义一个初状态和状态转移规则。
宏观世界的物体运动规律始终跟物体当前的状态有关,也就是说只要知道物体足够多的状态信息,例如位置、速度等,我们就能知道物体之后任意时刻的状态。 现在小M创造了一个简化的世界。 这个世界中,时间是离散的,物理规律是线性的:世界的初始状态可以用一个m维向量b(0)表示,状态的转移方式用m×m的矩阵A表示。 若已知这个世界当前的状态是b,那么下一时刻就等于b左乘状态转移矩阵A,即Ab。 这个世界中,物体的状态也是离散的,也就是说可以用整数表示。再进一步,整数都可以用二进制编码拆分为有限位0和1。因此,这里的矩阵A和向量b的每个元素都是0或1,矩阵乘法中的加法运算视为异或运算(xor),乘法运算视为与运算(and)。 具体地,设矩阵A第i行第j列的元素为ai, j,向量b的第i个元素为bi。那么乘法Ab所得的第k个元素为 (ak,1 and b1) xor (ak,2 and b2) xor ⋯ xor (ak,m and bm) 矩阵和矩阵的乘法也有类似的表达。 小M发现,这样的矩阵运算也有乘法结合律,例如有A(Ab)=(AA)b=A2b。 为了保证自己创造的世界维度不轻易下降,小M保证了矩阵A可逆,也就是说存在一个矩阵A-1,使得对任意向量d,都有A-1Ad=d。 小M想了解自己创造的世界是否合理,他希望知道这个世界在不同时刻的状态。 具体地,小M有n组询问,每组询问会给出一个非负整数k,小M希望你帮他求出Akb。 输入格式
输入第一行包含一个整数m,表示矩阵和向量的规模。
接下来m行,每行包含一个长度为m的01串,表示矩阵A。 接下来一行,包含一个长度为m的01串,表示初始向量b(0)。(b(0)是列向量,这里表示它的转置) 注意:01串两个相邻的数字之间均没有空格。 接下来一行,包含一个正整数n,表示询问的个数。 最后n行,每行包含一个非负整数k,表示询问Akb(0)。 注意:k可能为0,此时是求A0b(0) =b(0)。 输出格式
输出n行,每行包含一个01串,表示对应询问中Akb(0)的结果。
注意:01串两个相邻的数字之间不要输出空格。 样例输入
3
110 011 111 101 10 0 2 3 14 1 1325 6 124124 151 12312 样例输出
101
010 111 101 110 010 100 101 001 100 评测用例规模与约定
本题使用10个评测用例来测试你的程序。
对于评测用例1,m = 10,n = 100,k ≤ 103。 对于评测用例2,m = 10,n = 100,k ≤ 104。 对于评测用例3,m = 30,n = 100,k ≤ 105。 对于评测用例4,m = 180,n = 100,k ≤ 105。 对于评测用例5,m = 10,n = 100,k ≤ 109。 对于评测用例6,m = 30,n = 100,k ≤ 109。 对于评测用例7,m = 180,n = 100,k ≤ 109。 对于评测用例8,m = 600,n = 100,k ≤ 109。 对于评测用例9,m = 800,n = 100,k ≤ 109。 对于评测用例10,m = 1000,n = 100,k ≤ 109。 |
开始很菜的想法:
//ccf-矩阵 mat^k*b0
#include<iostream>
#include<cmath>
//#include<vector>
using namespace std;
int main()
{
int m, n, i, j; cin >> m;
char ch[]; bool*temp = ;
//vector<int>ma;
//vector<vector<int>> mat;
bool**mat = new bool*[m];
for (i = ; i < m; i++)
mat[i] = new bool[m];
bool b0[];
bool ans[];
unsigned k;
for (i = ; i<m; i++)
{
cin >> ch;//01串之间没有空格
for (j = ; j<m; j++)
mat[i][j] = ch[j] - '';
}
cin >> ch;
for (i = ; i<m; i++)
{
b0[i] = ch[i] - '';
//ans[i]=ch[i];
}
cin >> n;
while (n--)
{
cin >> k;
if (k)
{
for (i = ; i < m; i++)
ans[i] = ;
for (i = ; i < m; i++)
for (j = ; j < m; j++)
ans[i] ^= b0[j] & mat[i][j];
if (--k)
temp = new bool[m];
while (k--)
{
for (i = ; i < m; i++)
{
temp[i] = ans[i];
ans[i] = ;
}
for (i = ; i < m; i++)
for (j = ; j < m; j++)
ans[i] ^= temp[j]& mat[i][j];
}
for (i = ; i < m; i++)
cout << ans[i];
cout << endl; }
else
{
for (i = ; i<m; i++)
cout << b0[i];
cout << endl;
}
}
for (i = ; i < m; i++)
delete[]mat[i];
delete[]mat;
return ;
}
结果正确,但是超时pass
【ccf-csp201512-5】矩阵的更多相关文章
- CCF系列之矩阵(201512-5)
试题名称: 矩阵 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 创造一个世界只需要定义一个初状态和状态转移规则. 宏观世界的物体运动规律始终跟物体当前的状态有关,也就是说只要 ...
- CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
- [CCF] Z字形扫描
CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...
- 2016年CCF第七次测试 俄罗斯方块
//2016年CCF第七次测试 俄罗斯方块 // 这道小模拟题还是不错 // 思路:处理出输入矩阵中含1格子的行数和列数 // 再判是否有一个格子碰到底部,否则整体再往下移动一步,如果有一个格子不能移 ...
- CCF软考---《有趣的数》
脑子一热报了CCF的软测..但是又觉得好像并没有什么卵用,就当为蓝桥杯预热然后顺便去软件学院玩一玩吧,遇到一个有意思的题: time limits : 1s 问题描述 我们把一个数称为有趣的,当且仅当 ...
- CCF考试真题题解
CCF考试认证:题解参考博客http://blog.csdn.net/u014578266/article/details/45221841 问题描述 试题编号: - 试题名称: 图像旋转 时间限制: ...
- CCF计算机职业资格认证考试题解
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201312-4 有趣的数
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...
- CCF CSP 201503-1 图像旋转
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-1 图像旋转 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆 ...
随机推荐
- 【转】TransactionScope事务处理方法介绍及.NET Core中的注意事项
什么是TransactionScope呢? TransactionScope作为System.Transactions的一部分被引入到.NET 2.0.同时SqlClient for .NET Cor ...
- SQL SERVER 2012 OBJECT_ID
原来一个存储过程执行正常,升级sqlserver后提示临时表已存在,后查找资料 sql server 2012 OBJECT_ID('临时表')返回的数值是负数,在 2008r2及前是正数,所以导致 ...
- Filter过滤器技术详解
前言 有这样一个常见的开发场景,我们编写一套系统,或者分析一套系统如何实现的过程中,我们肯定会发现这套系统的拦截机制.比如说京东或者淘宝之类的,存在这种拦截机制,这套拦截机制能够过滤掉哪些错误的登录注 ...
- 远程过程调用——RPC
https://www.jianshu.com/p/5b90a4e70783 清晰明了
- 纯CSS导航栏下划线跟随效果
参考文章 <ul> <li>111</li> <li>2222</li> <li>3333333</li> < ...
- winform使用钩子限制windows热键
新增类KeybordHookProc using System; using System.Collections.Generic; using System.Diagnostics; using S ...
- POJ 1088 DP=记忆化搜索
话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 可以在 MySQL 数据表中设置指定的字段为 PRIMARY K ...
- ab工具压接口的时候post传参问题
ab -n 10000 -c 40 -p [参数所在文件] -T 'application/json' http://xxx 以上命令, 压测需要post json格式的参数的api时, 一定注 ...
- CPU构架和工作原理
-- CPU -- -- CPU 由三部分组成:时钟:控制单元:算术逻辑单元 -- -- -- 时钟:对CPU内部操作与系统其他硬件进行同步: -- -- -- 控制单元:控制机器指令的执行顺序: - ...