P10035题解

P10035题解

此题是一道找规律题

将 A,B,C 前六位列出:

  • A : 101010
  • B : 010101
  • C : 001001

我们可以发现:对于 A,B,C 中前六位的匹配字符的个数是相同的(均为三位)。

所以说,对于每一个 N ,也就是 $3^N$ 级台阶,我们都只需要判断最后三位求出最小的位数在加上前 $6 \times n$ 中的匹配数字个数即可(其中 n 指满足 $6 \times n$ 小于 $3 ^ N$ 的 n 最大值)。

同样的,我们易知前三位中 A 与 C 的匹配个数最少,仅为一个。

故 $ans = \frac {3 ^ N - 1} {2}$。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T, n, Mod = 1e9 + 7;
ll qmi(ll a, ll b)					//快速幂
{
    ll res = 1 % Mod;
    while (b)
	{
        if (b & 1) res = res * a % Mod;
        a = a * a % Mod;
        b >>= 1;
    }
    return res;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> T;
	while(T -- )
	{
		cin >> n;
		ll a = (qmi(3, n) - 1) * qmi(2, Mod - 2);	//经典快速幂求逆元
		a %= Mod;
		cout << a << "\n";
	}
	return 0;
}
posted @ 2024-01-02 00:07  汪俊杰  阅读(10)  评论(0)    收藏  举报
https://blog-static.cnblogs.com/files/xiaokang01/js.js color="240,230,140" opacity="1" count="75"