7.21-2014新生暑假个人排位赛04

居然有两次都把  把long long写成%d的   scanf和printf交上去了。。。。。wa了两次。。。

A.B题以后不能再这么2了。

--------------------------(我是可爱的分界线)我的目标是:谁都看得懂-------------------------

C.崔逗逗的难题

题意:给正方形边长求深紫面积,浅紫面积,粉红色。

解法:1.面积小学生都会求,关键是精度。

           2.使用long double类型的变量,输出的时候用%Lf。

           3.如果把表达式直接放到printf中,也可以水过去,这就要看人品了,反正我是没水过去,唉。



D.崔逗逗给你信心

题意:给n,求0<=x<=n的范围内,有多少个数满足(x)^(2x)^(3x)==0 。结果对1000000009取余。

输入样例

1
2

输出样例

2


解法:

首先,要知道什么叫异或。就是把a和b转换成二进制,a异或b(即a^b)就是把二进制列出来,不同就是1,同样就是0。比如11^23。11就是1101,23就是10111。两者异或就是01010。

其次,要知道什么情况下异或为0,那肯定是两个数完全一样,异或才能一个1都不出现。只有000000000.

所以,x^2x^3x==0等价于x^2x==3x.

再来看看异或和加法的区别。a,b当前位置一个为0,一个为1,那么异或为1,加法也是1,a,b当前位置为两个0,异或为0,加法也为0.。。。。。。只有a.b当前位置两个都是1,异或才和加法不同。显然X+2X=3X,所以现在我们的目标是,找出异或和加法完全一样的数字。

2x相当于x的二进制左移一位。比如3,二进制为11,它的两倍6,二进制为110.也就是说把某个数字,二进制左移一位,它和左移之前的相异或,不出现两个都为1,这样的数字在0到n有几个?也就是1不能和1相邻。

开一个数组f,存进去二进制只有一位时有几种可能,二进制有两位时有几种可能,很容易发现这是一个斐波那契数列,也就是f(n)=f(n-1)+f(n-2)的数列。

现在给出一个n,比如它的二进制为10100,那就令第一位为0,剩下四位随便,也就是res=res+f(4),再接着找下一个1,下一个1在第三个,那就是res=res+f(2),加入最后只剩最后一位。res=res+1;

实现有点麻烦,要用递归。


E. 焦级长搭积木

题意:积木数N,层数H,最底层M个。除最底层,每一层的积木数是它下一层积木数+1或-1且每层积木不超过10个。输出方案数,给出K,要求给出顺序排列的第K种方案(最小的排列为第一种)。

输入样例

13 6 2
1
3
-1

输出样例

3
2 1 2 3 2 3
2 3 2 3 2 1


解法:

1.开一个三维数组dp[n][h][m]表示n个积木有h层最底层为m个的情况。

2.把h=1而且n=m的情况初始化为1,其余初始化为0.......dp[n][h][m]=dp[n-m][h-1][m+1]+dp[n-m][h-1][m-1];相当于抽掉最底层后剩下的状态转移方程。

3.给你一个k。你把[n-m][h-1][m-1]拥有的积木数x和[n-m][h-1][m+1]拥有的积木数比较,如果k比前者小,那就把前者作为下一个状态,如果k比后者大,那就把后者变为下一个状态此时的k变为k-x,一直转移下去直到最顶层。

4.这题的代码还没交。。。。明天提交试试。。。。。





完整地写完了。我觉得自己真是太棒了哈哈哈。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值