「JLOI2015」有意义的字符串

题意

给你 \(b, d, n\) 求

\[[(\frac{b + \sqrt d}2)^n] \mod 7528443412579576937
\]

\(0 < b^2 \le d < (b + 1)^2 \le 10^{18}, n \le 10^{18}\) 且 \(b \bmod 2 = 1, d \bmod 4 = 1\)

题解

我们把形式如果凑成

\[f(n) = (\frac{b + \sqrt d}2)^n + (\frac{b - \sqrt d} 2)^n
\]

不难发现这是一个二阶常系数线性递推式的通项公式。

也就是有

\[f(n) = c_1f(n - 1) + c_2f(n - 2)
\]

我不太会特征方程求通项公式,打了下表。。不难发现就是

\[\begin{cases}
c_1 = b\\
\displaystyle c_2 = \frac{d - b^2}4
\end{cases}
\]

注意 \(f(0) = 1, f(1) = c_1, f(2) = c_1^2 +c_2 \times 2\) ,特判掉就行了。

但我们要求得答案是

\[g(n) = [f(n) - (\frac{b - \sqrt d}2)^n]
\]

不难发现,当 \(b \not = d^2\) 且 \(n > 2, n \bmod 2 = 0\) 的时候答案会少 \(1\) 。(打表发现的QAQ)

用矩阵快速幂处理即可,模数很垃圾开个 __int128 就好了,复杂度是 \(O(\log n)\) 的。

代码

#include <bits/stdc++.h>

#define For(i, l, r) for (register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l) for (register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Rep(i, r) for (register int i = (0), i##end = (int)(r); i < i##end; ++i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl using namespace std; using ll = long long; template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, T b) { return b > a ? a = b, 1 : 0; } void File() {
#ifdef zjp_shadow
freopen ("2106.in", "r", stdin);
freopen ("2106.out", "w", stdout);
#endif
} const ll Mod = 7528443412579576937; struct Matrix { ll a[2][2]; void Init() { Set(a, 0); } void Unit() { Rep (i, 2) Rep (j, 2) a[i][j] = (i == j); } inline Matrix friend operator * (const Matrix &lhs, const Matrix &rhs) {
Matrix res; res.Init();
Rep (i, 2) Rep (k, 2) Rep (j, 2)
res.a[i][j] = (res.a[i][j] + (__int128)(lhs.a[i][k]) * rhs.a[k][j]) % Mod;
return res;
} }; ll b, d, n; Matrix fpm(Matrix x, ll power) {
Matrix res; res.Unit();
for (; power; power >>= 1, x = x * x)
if (power & 1) res = res * x;
return res;
} int main () { File(); cin >> b >> d >> n; if (n == 0) return puts("1"), 0; ll c1 = b, c2 = (d - b * b) / 4; Matrix Base = (Matrix) {c1, 0, (ll)((__int128(c1) * c1 + c2 * 2) % Mod), 0}, trans = (Matrix) {0, 1, c2, c1}; if (n == 1) return printf ("%lld\n", Base.a[0][0]), 0;
if (n == 2) return printf ("%lld\n", Base.a[1][0]), 0; Base = fpm(trans, n - 2) * Base;
cout << Base.a[1][0] - ((n & 1) || (d == b * b) ? 0 : 1) << endl; return 0; }

「JLOI2015」城池攻占

原来写过 题解 ,就不再说了。。

「JLOI2015」装备购买

题意

有 \(n\) 个物品,每个物品有代价 \(c_i\) ,和 \(m\) 个属性,用向量 \(\mathbf{z_i} = (a_1, \dots, a_m)\) 表示。

你要选出尽量多的物品,使得代价尽量小,且使得任意一个物品不能被其他任意的几个物品的线性组合表示出来。

\(1 \le n, m \le 500; 0 \le a_j \le 1000\)

题解

随意开开脑洞。

不难发现就是求尽量多的线性无关变量。

那么我们考虑把所有的物品按权值从小到大依次插入线性基就行了。

复杂度是 \(O(nm^2)\) 的。至于除法,可以考虑模意义下的,不用考虑精度了。

代码

#include <bits/stdc++.h>

#define For(i, l, r) for (register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l) for (register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Rep(i, r) for (register int i = (0), i##end = (int)(r); i < i##end; ++i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl using namespace std; template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, T b) { return b > a ? a = b, 1 : 0; } inline int read() {
int x(0), sgn(1); char ch(getchar());
for (; !isdigit(ch); ch = getchar()) if (ch == '-') sgn = -1;
for (; isdigit(ch); ch = getchar()) x = (x * 10) + (ch ^ 48);
return x * sgn;
} void File() {
#ifdef zjp_shadow
freopen ("2108.in", "r", stdin);
freopen ("2108.out", "w", stdout);
#endif
} const int Mod = 998244353; inline int fpm(int x, int power) {
int res = 1;
for (; power; power >>= 1, x = 1ll * x * x % Mod)
if (power & 1) res = 1ll * res * x % Mod;
return res;
} const int N = 510; int n, m; struct Array {
int a[N], cost;
} T[N], Base[N]; int main () { File(); n = read(); m = read(); For (i, 1, n) For (j, 1, m) T[i].a[j] = read();
For (i, 1, n) T[i].cost = read(); sort(T + 1, T + n + 1, [&](Array lhs, Array rhs) { return lhs.cost < rhs.cost; }); int ans1 = 0, ans2 = 0; For (i, 1, n) {
bool flag = false;
For (j, 1, m) {
if (T[i].a[j]) {
if (!Base[j].a[j]) {
flag = true; Base[j] = T[i]; break;
}
else {
int coef = 1ll * fpm(Base[j].a[j], Mod - 2) * T[i].a[j] % Mod;
For (k, j, m)
T[i].a[k] = (T[i].a[k] - 1ll * Base[j].a[k] * coef) % Mod;
}
}
}
if (flag) ++ ans1, ans2 += T[i].cost;
} printf ("%d %d\n", ans1, ans2); return 0; }

JLOI2015 DAY1 简要题解的更多相关文章

  1. A · F · O —— JLOI2018翻车记(附Day1简要题解)

    JLOI2018翻车记 并不知道该怎么写... 算了还是按照标准剧情来吧 这应该是一篇写得非常差的流水账... 2018.04.04 Day -1 省选前在机房的最后一天. 压力并不是很大,毕竟联赛 ...

  2. JLOI2015 DAY2 简要题解

    「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m ...

  3. SCOI2016 Day1 简要题解

    目录 「SCOI2016」背单词 题意 题解 代码 「SCOI2016」幸运数字 题意 题解 总结 代码 「SCOI2016」萌萌哒 题意 题解 总结 代码 「SCOI2016」背单词 题意 这出题人 ...

  4. SCOI 2015 Day1 简要题解

    「SCOI2015」小凸玩矩阵 题意 一个 \(N \times M\)( $ N \leq M $ )的矩阵 $ A $,要求小凸从其中选出 $ N $ 个数,其中任意两个数字不能在同一行或同一列, ...

  5. [NOIP 2018 Day1] 简要题解

    [题目链接] 铺设道路 : https://www.luogu.org/problemnew/show/P5019 货币系统 : https://www.luogu.org/problemnew/sh ...

  6. AHOI2013 Round2 Day1 简要题解

    第一题,好吧这是个dp.(搜素也能在BZOJ上卡过). 第二题,BFS搜索碰到的立方体面数,智硬没有想到... 第三题,其实一看就有思路,但关键是求x坐标不交的矩形对数+y坐标不交的矩形对数 - x, ...

  7. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  8. Tsinghua 2018 DSA PA2简要题解

    反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...

  9. Codeforces 863 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...

随机推荐

  1. 了解sso原理

  2. MongoDB Redis

    MongoDB Redis设置用户名密码了吗?看看shodan这款邪恶的搜索引擎吧!~   早上看新闻的时候看到了个醒目的新闻 开源中国:MongoDB 赎金事件持续发酵,究竟是谁之过?博客园:Mon ...

  3. centos7 network eno16777736

    Network service not running - eno16777736 not activated - CentOShttps://www.centos.org/forums/viewto ...

  4. CMD管道命令使用

    Windows netstat 查看端口.进程占用 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务 ...

  5. JMeter压测分布式部署

    监控JMeter压力机的性能

  6. java 线程Thread.Sleep详解 Thread.Sleep(0)的作用(转载)

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...

  7. 利用js给datalist或select动态添加option选项

    <!DOCTYPE html> <html> <head> <title>鼠标点击时加载</title> <script type=& ...

  8. Python深入类和对象

    一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...

  9. Algorithm Visualizer

    Algorithm Visualizer https://algorithm-visualizer.org/ https://algorithm-visualizer.org/divide-and-c ...

  10. python RSA 加密与签名

    PyCrypto装起来就简单多了,我是直接 sudo easy_install pycrypto 直接搞定的 先生成rsa的公私钥:打开控制台,输入 openssl 再输入 genrsa -out p ...