「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. maven工程下get的URI中带中文名称乱码解决

    在用maven做项目时,出现了乱码问题: http://localhost:8086/search.html?keyword=手机 经过检查发现已经在web.xml配置request等字符编码 < ...

  2. 实分析p78 两个解释

    1. 是为了存在一个充分大的J,使得,当j大于J.会满足.x是满足能一致收敛到f(x)自变量取得集合,, 是为了允许有限个 前面的不成立,是对所有的k都成立,让k取很大,可以很小 2.是函数列收敛到f ...

  3. 阿里云ECS服务器云监控(cloudmonitor)Go语言版本插件安装卸载与维护

    云监控Go语言版本插件安装_主机监控_用户指南_云监控-阿里云https://help.aliyun.com/document_detail/97929.html 云监控cloudmonitor 1. ...

  4. jenkins 插件介绍

    1.jenkins 利用maven编译,打包,所需插件:Maven Integration: Maven集成插件这个插件提供了Jenkins和Maven的深度集成,无论是好还是坏:项目之间的自动触发取 ...

  5. java lang(Thread) 和 Runable接口

    public interface Runnable { public abstract void run(); } public class Thread implements Runnable { ...

  6. java随笔2 变量类定义

    如果要定义变量为对象,就要创建此对象对应的java类, 且定义的类型为类名,且都为private

  7. vue 中的slot属性(插槽)的使用

    总结如下: VUE中关于插槽的文档说明很短,语言又写的很凝练,再加上其和方法,数据,计算机等常用选项在使用频率,使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧,回头再学,反正已经 ...

  8. 进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?

    转自https://blog.csdn.net/biubiu741/article/details/77990592 i++不是原子操作,也就是说,它不是单独一条指令,而是3条指令: 1.从内存中把i ...

  9. Java多线程0:核心理论

    并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这样才能写出高效.安全.可靠的多线程并发程序.本系 ...

  10. 在IWMS中的分页效果

    第一步,你需要在后台修改你所要显示的新闻数目: 第二步,你需要把这段代码加到你需要分页的列表里边 代码: <%=config.TopAd%><asp:Literal id=" ...