代码应该不会有人想看我的吧,都应该去看y总的了
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
LL p;
//龟速乘(解决相乘爆longlong的问题)
LL qmul(LL a, LL b) {
LL res = 0;
while (b) {
if (b & 1) res = (res + a) % p;
a = (a + a) % p;
b >>= 1;
}
return res;
}
//计算2x2矩阵相乘,c=a*b
void mul(LL c[][2], LL a[][2], LL b[][2]) {
static LL t [2][2];
memset(t, 0, sizeof t);
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
for (int k = 0; k < 2; ++k) {
t[i][j] = (t[i][j] + qmul(a[i][k], b[k][j])) % p;
}
}
}
memcpy(c, t, sizeof t);
}
//快速幂(解决求斐波那契数列第n项的问题)
LL F(LL n) {
if (!n) return 0;
LL f[2][2] = {1, 1}; //f(1)=f(2)=1
LL a[2][2] = {
{0, 1},
{1, 1}
};
//快速幂
for (LL k = n - 1; k; k >>= 1) {
if (k & 1) mul(f, f, a); //f = f * a
mul(a, a, a); //a = a * a
}
return f[0][0];
}
//(F(m-1) * F(n mod m) - 1) mod F(m)
LL H(LL m, LL k) {
if (k % 2) return F(m - k) - 1;
else {
if (k == 0 || m == 2 && m - k == 1) return F(m) - 1;
else return F(m) - F(m - k) - 1;
}
}
//求(F(n) - 1)mod F(m)
LL G(LL n, LL m) {
//m是偶数
if (m % 2 == 0) {
//n/2m也是偶数
if (n / m % 2 == 0) {
if (n % m == 0) return F(m) - 1;
else return F(n % m) - 1;
}
//n/2m是奇数
else {
return H(m, n % m);
}
}
//m是奇数
else {
//n/m是偶数,且n/2m是偶数
if (n / m % 2 == 0 && n / 2 / m % 2 == 0) {
if (n % m == 0) return F(m) - 1;
else return F(n % m) - 1;
}
//n/m是偶数,且n/2m是奇数
else if (n / m % 2 == 0 && n / 2 / m % 2) {
if (m == 2 && n % m == 1) return F(m) - 1;
else return F(m) - F(n % m) - 1;
}
//n/m是奇数,且n/2m是偶数
else if (n / m % 2 && n / 2 / m % 2 == 0) {
return H(m, n % m);
}
//n/m是奇数,且n/2m是奇数
else {
if (n % m % 2) {
if (m == 2 && m - n % m == 1) return F(m) - 1;
else return F(m) - F(m - n % m) - 1;
} else {
return F(m - n % m) - 1;
}
}
}
}
int main() {
LL n, m;
while (cin >> n >> m >> p) cout << (G(n + 2, m) % p + p) % p << endl;
return 0;
}
看了一下,我就知道我可以直接跳过了
俺也一样。
俺也一样
俺也一样
俺也一样
俺也一样
一下午没了,泪目 T^T
哈哈哈哈就很真实
谢谢铅笔老师呀!
赞! 蓝桥杯的题这么猛的吗lol
这是最猛的一道hh
双向排序和括号序列更猛一点
大佬真在试图教会我们,谢谢大佬,我会努力看完的T^T
谢谢大佬,我会努力看完的
### 卷
他真的试图在教会我们呜呜
orz
考试的这个题谁做出来了,真的是神仙,hhhhh
支持大佬!
TQL
hh谢谢
# 强啊