bzoj 4002: [JLOI2015]有意义的字符串

  这个题。。。

  

 1 #include <bits/stdc++.h>
 2 #define rep(i, a, b) for (int i = a; i <= b; i++)
 3 #define drep(i, a, b) for (int i = a; i >= b; i--)
 4 #define REP(i, a, b) for (int i = a; i < b; i++)
 5 #define mp make_pair
 6 #define pb push_back
 7 #define clr(x) memset(x, 0, sizeof(x))
 8 #define xx first #define yy second
 9 using namespace std;
10 typedef pair<int, int> pii;
11 typedef unsigned long long ll;
12 const int inf = 0x3f3f3f3f;
13 const ll INF = 0x3f3f3f3f3f3f3f3fll;
14 //************************************************
15
16 const ll mod = 7528443412579576937LL;
17 ll mul(ll base, ll num) {
18     ll ret(0);
19     while (num) {
20         if (num & 1) ret = (ret + base) % mod;
21         base = (base + base) % mod;
22         num >>= 1;
23     }
24     return ret;
25 }
26 struct matrix {
27     ll s[3][3]; matrix () { clr(s); }
28     matrix operator * (const matrix &B) const {
29         matrix A = *this, C;
30         rep(i, 1, 2) rep(j, 1, 2) rep(k, 1, 2)
31             C.s[i][j] = (C.s[i][j] + mul(A.s[i][k], B.s[k][j]) % mod) % mod;
32         return C;
33     }
34 } ori;
35
36 matrix POW(matrix base, ll num) {
37     matrix ret = ori;
38     while (num) {
39         if (num & 1) ret = ret * base;
40         base = base * base;
41         num >>= 1;
42     }
43     return ret;
44 }
45
46 int main() {
47     ll b, d, n; scanf("%llu%llu%llu", &b, &d, &n);
48     ll a = b, c = (d - b * b) >> 2;
49     ori.s[1][1] = ori.s[2][2] = 1;
50     matrix base; base.s[1][1] = a, base.s[2][1] = c, base.s[1][2] = 1;
51     matrix ans;
52     ans.s[1][2] = 2, ans.s[1][1] = b;
53     ans = ans * POW(base, n);
54     if (d != b * b && n % 2 == 0) ans.s[1][2]--;
55     printf("%llu\n", ans.s[1][2]);
56 }

时间: 2024-08-08 18:07:00

bzoj 4002: [JLOI2015]有意义的字符串的相关文章

bzoj4002[JLOI2015]有意义的字符串

bzoj4002[JLOI2015]有意义的字符串 题意: 求((b+√d)/2)^n的整数部分.b*b<d<10^18,n<10^18,d%4==1,b*b%4==1,模数约等于7*10^18 题解: 神题.由一些性质可以得出一个数列:An=bAn-1+(d-b*b)/4*An-2,且这个数列的通项公式为An=((b+√d)/2)^n+((b-√d)/2)^n,且由题目条件得(d-b*b)/4为正整数,故可以用矩阵乘法求出An,由于(b-√d)/2∈(-1,0],故答案为(An)-1当

JLOI2015 有意义的字符串

Description Input 一行三个整数b, d, n. Output 一行一个数表示模7528443412579576937 之后的结果. Sample Input 输入1:1 5 9输入2:11 125 6715504 Sample Output 输出1:76输出2:1499928102740042526 Data Constraint 好吧.一直没看懂题目名到底有意义在哪= = 进入正题 首先我们发现(b+sqrt(d))/2可以是某个方程的解,它符合(-b+sqrt(b*b-4a

【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法

题目描述 B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 输入 一行三个整数 b;d;n 输出 一行一个数表示模 7528443412579576937 之后的结果. 样例输入 1 5 9 样例输出 76 提示 其中 0<b^2<=d<(b+1)^2<=10^18,n<=10^18,并且 b mod 2=1,d mod 4=1 题解 数论 高中数学 注意题目中给出的0<b^2<=d<(b+1)^2,这说明了什么?

luogu P3263 [JLOI2015]有意义的字符串

luogu 兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有数学不会,不会就是不会,怎么学都不会. 先记\(A=\frac{b+\sqrt{d}}{2}\),出现这种东西不妨考虑他的"共轭项"",记\(B=\frac{b-\sqrt{d}}{2}\).可以发现\(A+B=b,AB=\frac{b^2-d}{4}\),并且由于\(b\bmod 2=1,d\bmod 4=1\),所以\(AB\)的值一定是个整数 现在要求\(\lfloor A^n\rfloor\),由

【BZOJ】【4002】【JLOI2015】有意义的字符串

构造线性递推式+矩阵乘法 题解戳PoPoQQQ 为了自己以后看的方便手打一遍好了>_> 求$( \frac{b+\sqrt{d}}{2} )^n$的整数部分对p取模后的值 其中$b\mod 2=1,d\mod 4=1,b^2 \leq d<(b+1)^2,n\leq10^{18}$ 思路: 构造数列$a_n=b*a_{n-1}+\frac{d-b^2}{4}*a_{n-2}$ 其中$a_0=2,a_1=b$ 然后我们求出这个数列的通项公式,得到$a_n=(\frac{b+\sqrt{d}

BZOJ 4002~4007 JLOI2015 代码

题解戳这里 4002 有意义的字符串: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define P 7528443412579576937ull using namespace std; typedef unsigned long long ull; ull b,d,n; ull Times(ull

BZOJ 4002 有意义的字符串

WA一下午的原因是矩阵有两个值打反了... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll unsigned long long #define mod 7528443412579576937UL using namespace std; struct matrix { ll a[3][3];

【BZOJ4002】【JLOI2015】有意义的字符串 推公式+矩阵乘法

链接: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/45174449"); } 题解: 公式推导部分:见大爷博客http://blog.csdn.net/popoqqq/article/details/45148309 公式: fi=b×fi?1+ (d?b2)4ai?2 f0=2,f1

BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]

和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <bitset> using namespace std; typedef long lon