常州培训 day4 解题报告
第一题:(简单的模拟题)
给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数。N,M<=5000000;
数据保证最高位不会进位或退位。
解题过程:
1.一开始以为是裸的高精度,但是数据范围肯定做不到那么大。考虑二进制运算的特殊性,题目又有”数据保证最高位不会进位或退位“,那么二进制数的最高位已经定了,只要做一个尾指针r,如果*就r++,如果除就r--,就是模拟左移右移的过程。
2.考虑到1011111111111111111111111111111的情况,如果+1,那么就要改变很多位,而N又很大,担心超时,于是做了一个累加器cnt,如果碰到‘+’,就cnt++,碰到‘-’就cnt--。碰到‘*'的时候考虑cnt的值,如果比较大(自己设一个边界),那么就先做一次加法(减法),把cnt清0;碰到除法比较恶心,需要考虑2种特殊情况;
A.如果cnt为负奇数,且被减数x为偶数,那么 比如(10-5)/2=2, 就不能简单的把被减数和减数都除以2,因为(10/2-5/2)=3,所以需要多减一个1。
B.如果cnt为正奇数,x是奇数,那么比如 (11+5)/2=8, 就不能简单的把x和cnt都除以2,因为(11/2+5/2)=7,所以需要多加一个1。
这样就不用每次都处理整个数,只有当计数器累积的值比较大的时候才做一次,大大减小了计算次数。
考试的时候处理乘法的时候,边界写错,结果爆0了。。自己写的小数据没能找出错。
3.修改后的代码速度却很不理想,竟然不如最朴素的算法,碰到‘+’就+1,碰到‘-’就-1,碰到‘*'就右移一位,碰到’/'就左移一位。。一开始优化了半天,还是不如人家的朴素算法,最后才发现是 int 和char 速度的区别,用char 表示二进制数速度可以快一倍,不过2中的优化就没法用了。但是相比之下char比int要快的多得多。 简单才是最美额。
另外在考试的时候发现一个非常奇妙的东西,就是对于负数,右移一位不等价于除以2.
(-7)/2=-3;
(-7)>>1=-4;
考试时百思不得其解,搜了些资料
http://www.cnblogs.com/myblesh/articles/2431806.html
大致是 -7 的存储是用补码,也就是11111.......11001;右移一位就变成了111111....11100;转换回来就是10000....100;也就是-4。 以后碰到负数还是老老实实用‘/’吧。。
第二题:
题目大意:给出n*m的棋盘,给出棋盘上k个皇后(可以控制行列和对角线)的坐标,求出没有被控制的点的个数。 N,M<=50000,K<=500;
解题过程:
1.最容易想到的是开一个二维数组,然后依次判断每个点是否被控制,但是空间显然不够。
2.很快能想到可以倒过来做,求出被控制的点的个数,用m*n来减就是答案。用hash数组保存每行每列以及对角线的情况,然后依次加入一个个皇后,对于每一个皇后,沿着行列和对角线走一遍,统计增加的被控制的点即可。复杂度O(nk),常数也比较小;
3.300分的AK大神 上去讲了个思路,挺巧妙的,不过感觉效率可能还不如 2中的方法:从上往下一行行扫描,对于每一个皇后,可以求出它能控制到的这行的那些点,用一个hash并统计被控制的点的个数。。复杂度应该也是(nk),但是常数估计比较大,因为处理完每一行,hash数组都要memset一遍。
4.讲课的大神的方法:把同一行的60个格子压成一个long long,加上hash即可。。不过感觉具体实现起来有些麻烦。
第三题:
题目大意:求出满足相邻数字不超过2的 K位数的个数。 K<=10^18;结果mod 1000000007;
解题过程:
1.这题数据太大了,30%的都是10^6;写了个动规,F[i][j]表示以i结尾的j位数的个数,F[i][j]=sum(F[k][j-1]),(i-2<=k<=i+2,0<=k<=9);
怕超时,把递推改成记忆化了,结果爆栈,只骗到了一个k=1的数据。
2.正解思路基本也是这样,不过要用矩阵乘法优化;参考国家集训队论文,现学了点矩阵乘法的东西。
只在yzoi上写了个矩阵乘法版斐波那契,算是勉强入门了。
再来看这题,首先根据递推公式,发现 F[i][j]只和F[i-2...i+2][j] 有关,因此构造这样一个矩阵:
1 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0
0 1 1 1 1 1 0 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 1 1 1 1 1 0
0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 1 1 1
初始矩阵为 0 1 1 1 1 1 1 1 1 1
分别表示以i开头长度为1的 方案数。利用结合律先让 第一个矩阵自乘n-2次,再和第二个矩阵乘一次 即为答案。
常州培训 day4 解题报告的更多相关文章
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 常州培训 day6 解题报告
第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...
- 常州培训 day3 解题报告
第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...
- 常州培训 day2 解题报告
第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...
- 常州培训 day1 解题报告
第一题:(骗分容易,AC难.) 题目大意: 给出一个字符串,找出满足条件A的区间的个数.A:字符A,B,C的出现次数相同. 都出现0次也算,区间的长度可以是0(就是只有一个数).30% |S| ≤ 1 ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
随机推荐
- 09 高效的PL/SQL程序设计
程序包 Package 断开了依赖链 实验依赖关系: <1> 首先不使用包 -- 创建表 CREATE table t (x int); -- 创建视图 create view v as ...
- python的最最最最最基本语法(3)
模块:在Python中,一个.py文件就称之为一个模块(Module). 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package).例如两个名不hello.py的模块分 ...
- android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...
- mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database
新安装的mysql密码是空的. ./mysql -u root -p use mysql SELECT `Host`,`User` FROM user; UPDATE user SET `Host` ...
- Win7/8下提示OpenSCManager failed 拒绝访问
在我们日常使用命令行安装一些工具的时候经常提示如下错误提示,这是上市Win7或者Win8操作系统权限的原因 工具/原料 Win7,Win8操作系统 方法/步骤 1 以Win8为例,按WIN+Q ...
- 【服务器防护】VPN的ip变更,导致无法连接服务器,解决方法【阿里云ECS】
在阿里云的管理控制台,云服务器ECS - 对应服务器 - 选“管理” - “连接管理终端” 通过这个入口,可以进入Linux云服务器,修改防火墙限制的IP即可
- tomcat字符,文档,数据库配置
修改tomcat目录下conf目录下的server.xml tomcat容器的解码配置 URIEncoding="UTF-8" <Connector port="8 ...
- 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
/** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移 ...
- html list <==> unformatted list
两者的区别很大不得不擦呢,任何两个东西的差别都很大,不得混淆.---一个有ul/ol的选择,一个没有
- armp启动
1.启动apahcehttpd.exe -k starthttpd.exe -k restart 重启httpd.exe -k install 安装 2.php启动apache.conf文件添加:Lo ...