【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 图像旋转 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆 ...
随机推荐
- 自学Java第五章——《面向对象基础》
5.1 类与对象 1.类:一类具有相同特性的事物的抽象描述. 对象:类的一个个体,实例,具体的存在. 类是对象的设计模板. 2.如何声明类? [修饰符] class 类名{ 成员列表:属性.方法 ...
- (一)IOC基础推导及理论
环境准备:见java环境搭建,新建maven项目 1.写一个UserDao接口 public interface UserDao { public void getUser(); } 2.再写Dao的 ...
- java web实现在线编辑word,并将word导出(一)
前段时间领导交代了一个需求:客户需要一个能够web在线编辑文字,如同编辑word文档一样,同时能够将编辑完成的内容导出为word文档并下载到本地. 我们选择了前台使用富文本插件的形式用于编辑内容,使用 ...
- 第7章,c语言控制语句:分支和跳转
7.1 if语句 通用形式:if(expression) statment 7.2 if else语句 通用形式:if(expression) startment else startment2 7. ...
- idea以yarn-client 提交任务到yarn
鉴于很多小白经常问我如何用idea提交任务到yarn,这样测试的时候不用频繁打包. 昨天,晚上健身回来录了一个小视频,说是小视频但是耗时也比较长,将近40min.可能是健身脱水太多,忘了补充盐分,无力 ...
- Sequence Models Week 1 Improvise a Jazz Solo with an LSTM Network
Improvise a Jazz Solo with an LSTM Network Welcome to your final programming assignment of this week ...
- 面试题:你使用过concurrent包下的那些类?
1.executor接口,使用executor接口的子接口ExecutorService用来创建线程池2.Lock接口下的ReentrantLock类,实现同步,比如三个线程循环打印ABCABCABC ...
- 代码review还是需要再仔细点-一次crash异常分析的总结
版本发布之后,外网新增了一些crash, 从mini dump看,的确是有异常的,619行crash了. 代码如下: 奔溃的地方如下 可以看到是Zip add的时候指针空了, 为什么呢? 结合代码,可 ...
- 初学者学习JavaScript的实用技巧!
Javascript是一种高级编程语言,通过解释执行.它是一门动态类型,面向对象(基于原型)的直译语言.它已经由欧洲电脑制造商协会通过ECMAScript实现语言标准化,它被世界上的绝大多数网站所使用 ...
- Linux无法连接网络解决方案
上次在VM中装好Linux以后,用xshell可以连接上Linux,可是今天在启动虚拟机打开Linux以后,发现又没有网络连接了,因为要用xshell连接的话首先要知道Linux的ipv4地址,在li ...