「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. charles如何设置弱网

  2. 【转】redis-cluster安装配置

    需要三台虚拟机(生产环境是3个物理机),分配静态IP.cluster中共6个节点.3主3从.本文中每个虚拟机上的redis端口:6379 6380. 需要注意的两点: 3个主节点分别位于3台虚拟机上, ...

  3. Golang中进行reslice时的注意事项

    先看下面代码: package main import "fmt" func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} ...

  4. JEECG 3.7 Memory Leak

    JEECG 3.7 版本常见问题贴 - JEECG官方网站-企业级JAVA快速开发平台 - Powered by Discuz!http://www.jeecg.org/forum.php?mod=v ...

  5. CentOS 7 安装配置带用户认证的squid代理服务器

    这里只简述搭建一个带用户认证的普通代理 一.安装 安装过程十分简便,只需要安装一下squid,一条命令搞定 yum install squid rpm -qa | grep squid squid-- ...

  6. php之常用扩展总结

    在此总结,开发中经常使用到的扩展,来进行日常PHP的开发工作 bcmath(精确数值处理) bz2 calendar Core ctype curl date dom ereg exif filein ...

  7. Oracle 内存参数调优设置

    Oracle 数据库系统中起到调节作用的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些 初始化参数以优化Oracle系统. 1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Ora ...

  8. python爬虫之初始Selenium

    1.初始 Selenium[1]  是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Moz ...

  9. 在linux命令下访问url

    1.elinks - lynx-like替代角色模式WWW的浏览器 例如: elinks --dump http://www.baidu.com 2.wget 这个会将访问的首页下载到本地 [root ...

  10. python学习笔记(1)--python特点

    python诞生于复杂的信息系统时代,是计算机时代演进的一种选择. python的特点,通用语言,脚本语言,跨平台语言.这门语言可以用于普适的计算,不局限于某一类应用,通用性是它的最大特点.pytho ...