A 序列
题目描述:
有一个长度为n的序列a,已知a[1]=a[n]=1,且对于2 <= x <= n,a[x] / a[x-1]是以下三个数字之一 [ 1,-2,0.5 ],问有多少种不同的序列满足题意。
两个序列不同当且仅当它们有至少一个位置上的数字不同,序列a可以为任何实数。
输入描述:
一个整数 表示n (1<= n <= 1e3);
输出描述:
一个整数 表示答案模109+7;
示例1:
输入
5
输出
7
思路:
本题有个比较明显的规律 -2和0.5要同时出现并且-2要出现两次所以0.5要出现两次。并且他们的位置随意。所以先求出有多少个即n/4;然后枚举i从0到 n/4;
代码:
1 | #include<bits/stdc++.h> |
总结:这题虽然找到要成对出现但我没有想到他出现的位置可以随意。
C 异或和
题目描述:
有一个nm的网格图,给出小B出现在每个位置的可能性,用一个nm的01矩阵表示,小B等概率出现在所有1的位置。求小A在每个位置上与小B期望曼哈顿距离的异或和,先把期望取模之后再异或
输入描述:
第一行读入两个整数 n,m (n,m <= 2000)
接下来n行,每行读入一个长度为m的01字符串。
输出描述:
输出一个整数表示答案模 109+7
示例1
输入
1 3
101
输出
1
说明
小A出现在(1,1)的时候期望曼哈顿距离是1
小A出现在(1,2)的时候期望曼哈顿距离是1
小A出现在(1,3)的时候期望曼哈顿距离是1
答案是这三者的异或和。
思路:
分别求x方向对点的贡献度,y方向对点的贡献度
然后求出期望再异或和(注意:异或和不要取模)。
代码:
1 | #include<bits/stdc++.h> |
总结:这道题关键是分开求x,y的贡献度这也给了我一个解题经验。