Diary - 2024.12.26

news/2024/12/26 22:26:10/文章来源:https://www.cnblogs.com/rizynvu/p/18634299

今天作业量似乎更多了。
或许老师认为我们做完作业后都还有很多时间吧!


不是我真的红温了。

Luogu P11420 [清华集训 2024] 乘积的期望。

我今天搞了一天的这玩意,写到最后被卡常了,卡了 2h 没进去。
我玉玉了。我玉玉了。我玉玉了。我玉玉了。我玉玉了。我玉玉了。

现在成就是 Luogu TLE on #75, #76, #106, #107,额额。
为什么机房的机子上跑 #75 2.1s,Luogu > 2.2s, QOJ = 2.6s。
???

怎么机房机子这么快???

有没有人帮我卡卡常阿,有没有人帮我卡卡常阿,有没有人帮我卡卡常阿,有没有人帮我卡卡常阿,有没有人帮我卡卡常阿,有没有人帮我卡卡常阿,

我现在的代码已经抽象到了:

#include<bits/stdc++.h>
using ll = long long;
constexpr ll mod = 998244353;
inline void add(ll &x, ll y) {(x += y) >= mod && (x -= mod);
}
inline ll qpow(ll a, ll b, ll v = 1) {while (b) {if (b & 1) ((v *= a) %= mod);b >>= 1, (a *= a) %= mod;}return v;
}
constexpr int maxn = 150 + 5, maxm = 50 + 2;
int n, m, C;
ll b[maxn], S;
ll res = 1ll;
namespace solve1 {constexpr int maxm = 16;inline ll Sum(int l, int r) {return l <= 0 ? b[r] : ((b[r] - b[l - 1] + mod) % mod);}ll f[maxn][1 << maxm - 1], g[maxn][1 << maxm - 1];inline ll solve() {if (m == 1) {if (C < n) return 0ll;ll ans = 1ll;for (int i = 1; i <= n; i++) (ans *= C - i + 1) %= mod;for (int i = 1; i <= n; i++) (ans *= b[i]) %= mod;return ans;}for (int i = 1; i <= n; i++) (b[i] += b[i - 1]) %= mod;f[0][0] = 1;for (int i = 1; i <= n; i++) {for (int c = 0; c < i; c++) {for (int s = 0; s < (1 << m - 1); s++) {g[c][s] = f[c][s], f[c][s] = 0ll;}}for (int c = 0; c < i; c++) {for (int s = 0; s < (1 << m - 1); s++) {if (~ s & 1) {(f[c + 1][s >> 1] += g[c][s] * Sum(i - m + 1, i)) %= mod;(f[c][s >> 1] += g[c][s] * __builtin_popcount(s)) %= mod;(f[c + 1][(s | (1 << m - 1)) >> 1] += g[c][s]) %= mod;for (int w = 1; w < m - 1; w++) {if (s >> w & 1) {(f[c][(s ^ (1 << w)) >> 1] += g[c][s] * Sum(i - m + 1, i - m + 1 + w)) %= mod;}}} else {(f[c][s >> 1] += g[c][s] * Sum(i - m + 1, i - m + 1)) %= mod;}}}}ll ans = 0ll, A = 1ll;for (int i = 1; i <= std::min(n, C); i++) {(A *= C - i + 1) %= mod;(ans += A * f[i][0]) %= mod;}return ans;}
}
namespace solve2 {ll f[maxm][maxm], g[maxm][maxm], pw1[maxm], pwm[maxm];constexpr ll fac[maxm] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 237554682, 331032489, 972509923, 586493473, 986189864, 781263551, 868586527, 401576539, 447152495, 853155713, 655938692, 768863313, 254940118, 638976950, 282223649, 914551701, 567646151, 59230529, 837902046, 858512294, 380063818, 943237576, 71251511, 568565690, 73799117, 807877740, 561656917, 504900914, 736050414, 966786798, 643813841, 376967120, 991610752, 693098707, 631819933, 380026194, 652885152, 700438304};constexpr ll ifac[maxm] = {1, 1, 499122177, 166374059, 291154603, 856826403, 641926577, 376916469, 421456191, 712324701, 370705776, 305948985, 275056837, 405098354, 314148269, 154042465, 945481735, 407938109, 632701444, 33300076, 400962745, 637054254, 664203418, 419495765, 475007652, 657876692, 178879004, 856981449, 707986577, 403057740, 13435258, 676663441, 489072773, 529067478, 837644393, 280624102, 285085212, 574276125, 724391412, 632878356, 714593006, 845241488, 352872915, 936805745, 996848021, 199617841, 416657838, 454889133, 71867129, 470030352, 328838800};inline ll calc() {ll ans = 0ll;for (int c2 = 0; c2 <= C; ++c2) {auto clr = [&](int hk) {for (int j = 1; j + c2 <= C; ++j) {for (int k = 0; k <= hk; ++k) {g[j][k] = f[j][k], f[j][k] = 0;}}};clr(c2);for (int i = 1; i + c2 <= C; ++i) {f[i][c2] = pw1[i] * ifac[i] % mod * i * (C - i - c2) * (m + m + 1 <= n ? c2 : 1ll) % mod;}for (int i = 1; i < m; ++i) {int hk = m + m + i <= n ? c2 : 0;clr(hk);for (int j = 1; j + c2 <= C; ++j) {for (int k = 0; k <= hk; ++k) {ll val_ = g[j][k];for (int nj = j; nj + c2 <= C; ++nj, (val_ *= b[i + 1]) %= mod) {ll val = val_ * ifac[nj - j] % mod * nj % mod;for (int nk = k; ~ nk; --nk, (val *= b[m + i + 1]) %= mod) {add(f[nj][nk], val * ifac[k - nk] % mod * (C - nj - nk) * (m + m + i + 1 <= n ? nk : 1ll) % mod);}}}}}for (int j = 1; j + c2 <= C; j++) {ll val = f[j][0];(val *= pwm[C - j - c2] * ifac[C - j - c2] % mod) %= mod;(ans += val) %= mod;}}return ans * fac[C] % mod;}inline ll solve() {for (int j = pw1[0] = pwm[0] = 1; j <= n; j++) {pw1[j] = pw1[j - 1] * b[1] % mod, pwm[j] = pwm[j - 1] * b[m + 1] % mod;}int C_ = C;ll ans = 0;for (C = 1; C <= n; C++) {ll val = calc();for (int i = 0; i <= n; i++) {if (i == C) continue;(val *= qpow((C - i + mod) % mod, mod - 2) * (C_ - i + mod) % mod) %= mod;}(ans += val) %= mod;}return ans;}
}
int main() {scanf("%d%d%d", &n, &m, &C);for (int i = 1; i <= n - m + 1; i++) scanf("%lld", &b[i]);for (int i = 1; i <= n - m + 1; i++) (S += b[i]) %= mod;S = qpow(S, mod - 2);for (int i = 1; i <= n - m + 1; i++) (b[i] *= S) %= mod;if (m * 2 > n) {int l = m * 2 - n;res = qpow(C, l);m -= l, n -= l;}printf("%lld\n", (m <= 16 ? solve1::solve() : solve2::solve()) * res % mod);return 0;
}

最初始的代码:

#include<bits/stdc++.h>
using ll = long long;
constexpr ll mod = 998244353;
inline void add(ll &x, ll y) {(x += y) >= mod && (x -= mod);
}
inline ll qpow(ll a, ll b, ll v = 1) {while (b) {if (b & 1) ((v *= a) %= mod);b >>= 1, (a *= a) %= mod;}return v;
}
constexpr int maxn = 150 + 5, maxm = 50 + 2;
int n, m, C;
ll b[maxn], S;
ll res = 1ll;
namespace solve1 {constexpr int maxm = 16;inline ll Sum(int l, int r) {return l <= 0 ? b[r] : ((b[r] - b[l - 1] + mod) % mod);}ll f[maxn][1 << maxm - 1], g[maxn][1 << maxm - 1];inline ll solve() {if (m == 1) {if (C < n) return 0ll;ll ans = 1ll;for (int i = 1; i <= n; i++) (ans *= C - i + 1) %= mod;for (int i = 1; i <= n; i++) (ans *= b[i]) %= mod;return ans;}for (int i = 1; i <= n; i++) (b[i] += b[i - 1]) %= mod;f[0][0] = 1;for (int i = 1; i <= n; i++) {for (int c = 0; c < i; c++) {for (int s = 0; s < (1 << m - 1); s++) {g[c][s] = f[c][s], f[c][s] = 0ll;}}for (int c = 0; c < i; c++) {for (int s = 0; s < (1 << m - 1); s++) {if (~ s & 1) {(f[c + 1][s >> 1] += g[c][s] * Sum(i - m + 1, i)) %= mod;(f[c][s >> 1] += g[c][s] * __builtin_popcount(s)) %= mod;(f[c + 1][(s | (1 << m - 1)) >> 1] += g[c][s]) %= mod;for (int w = 1; w < m - 1; w++) {if (s >> w & 1) {(f[c][(s ^ (1 << w)) >> 1] += g[c][s] * Sum(i - m + 1, i - m + 1 + w)) %= mod;}}} else {(f[c][s >> 1] += g[c][s] * Sum(i - m + 1, i - m + 1)) %= mod;}}}}ll ans = 0ll, A = 1ll;for (int i = 1; i <= std::min(n, C); i++) {(A *= C - i + 1) %= mod;(ans += A * f[i][0]) %= mod;}return ans;}
}
namespace solve2 {ll f[maxm][maxm], g[maxm][maxm], pw[maxn][maxm], fac[maxn], ifac[maxm];inline ll calc() {ll ans = 0ll;for (int c2 = 0; c2 <= C; c2++) {memset(f, 0, sizeof(f));for (int i = 0; i + c2 <= C; i++) {f[i][c2] = pw[1][i] * ifac[i] % mod;if (1 <= n) (f[i][c2] *= i) %= mod;if (m + 1 <= n) (f[i][c2] *= C - i - c2) %= mod;if (m + m + 1 <= n) (f[i][c2] *= c2) %= mod;}for (int i = 1; i < m; i++) {memcpy(g, f, sizeof(g));memset(f, 0, sizeof(f));for (int j = 0; j + c2 <= C; j++) {for (int k = 0; k <= c2; k++) {for (int nj = j; nj + c2 <= C; nj++) {for (int nk = 0; nk <= k; nk++) {ll val = g[j][k];(val *= pw[i + 1][nj - j] * pw[m + i + 1][k - nk] % mod) %= mod;(val *= ifac[nj - j] * ifac[k - nk] % mod) %= mod;if (i + 1 <= n) (val *= nj) %= mod;if (m + i + 1 <= n) (val *= C - nj - nk) %= mod;if (m + m + i + 1 <= n) (val *= nk) %= mod;(f[nj][nk] += val) %= mod;}}}}}for (int j = 0; j + c2 <= C; j++) {ll val = f[j][0];(val *= pw[m + 1][C - j - c2] * ifac[C - j - c2] % mod) %= mod;(ans += val) %= mod;}}return ans * fac[C] % mod;}inline ll solve() {for (int i = fac[0] = 1; i <= n + 1; i++) fac[i] = fac[i - 1] * i % mod;for (int i = 0; i <= n + 1; i++) ifac[i] = qpow(fac[i], mod - 2);for (int i = 1; i <= m * 3; i++) {for (int j = pw[i][0] = 1; j <= n + 1; j++) {pw[i][j] = pw[i][j - 1] * b[i] % mod;}}int C_ = C;ll ans = 0;for (C = 0; C <= n + 1; C++) {ll val = calc();for (int i = 0; i <= n + 1; i++) {if (i == C) continue;(val *= qpow((C - i + mod) % mod, mod - 2) * (C_ - i + mod) % mod) %= mod;}(ans += val) %= mod;}return ans;}
}
int main() {scanf("%d%d%d", &n, &m, &C);for (int i = 1; i <= n - m + 1; i++) scanf("%lld", &b[i]);for (int i = 1; i <= n - m + 1; i++) (S += b[i]) %= mod;S = qpow(S, mod - 2);for (int i = 1; i <= n - m + 1; i++) (b[i] *= S) %= mod;if (m * 2 > n) {int l = m * 2 - n;res = qpow(C, l);m -= l, n -= l;}printf("%lld\n", (m <= 16 ? solve1::solve() : solve2::solve()) * res % mod);return 0;
}

可见抽象。

从 > 4s 卡到了 2.1s 还是过不了,愤怒了愤怒了愤怒了愤怒了愤怒了愤怒了愤怒了愤怒了愤怒了。


被卡常注定只能度过一个失败的 oi 生涯。
被卡常注定只能度过一个失败的 oi 生涯。
被卡常注定只能度过一个失败的 oi 生涯。
被卡常注定只能度过一个失败的 oi 生涯。
被卡常注定只能度过一个失败的 oi 生涯。

明天必须卡完常再写其他题/fn。
明天必须卡完常再写其他题/fn。
明天必须卡完常再写其他题/fn。
明天必须卡完常再写其他题/fn。
明天必须卡完常再写其他题/fn。


怎么要期末了???
感觉时间好快的过,这个学年又过了一半了。
相比之下,我学会了什么呢???

应该以后就能看出来了吧!


有点困有点困有点困有点困有点困有点困有点困。
其实感觉我每天睡眠问题也不是很大阿???
但是比较神秘的是每天上课会在差不多固定的时间犯困。

但是好像班上同学都会这样,是不是透气原因(?)。


这几天的晚霞一直是粉紫粉紫的,很好看。

但是没有时间了,明天看看晚霞再继续沿着这个话题写。


今天我的水杯突然失踪了???
希望在宿舍,毕竟其他地方都找了。

发现昨天的日记日期写成了 2024.12.24,好的改了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Detr训练自定义数据

前面记录了Detr及其改进Deformable Detr。这一篇记录一下用Detr训练自己的数据集。先看下Detr附录中给出的大体源码,整体非常清晰。接下来记录大体实现过程 一、数据准备 借助labelme对数据进行标注然后将标注数据转换成COCO格式,得到以下几个文件其中JPEGImages存放所有图片…

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作

https://bpsend.net/thread-121-1-2.htmlasm基础语法 1. 环境配置xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3.在cmd中输入ml,可以识别即配置成功dosbox环境配置 1.拷贝masm611到指定目录 2.将masm611所在目录添挂载进dosbox 3.将masm611目录在dosbo…

WinNTSetup 系统安装利器 v5.4.0 单文件版

软件介绍 WinNTSetup,系统安装利器,目前最好用的系统安装器,Windows系统安装部署工具。支持所有Windows平台,支持多系统安装、完全格式化C盘、支持创建VHD虚拟硬盘、在Windows及PE系统下运行,允许在安装前对系统进行预优化设置、集成驱动程序、启用第三方主题支持、加入无…

解决 Cannot GET /favicon.ico

一、报错 二、定位(项目所在文件夹) 三、改名(添加图片,重命名)

Java编程规范-DO / BO / DTO / VO / AO的使用

Java 开发 DO / BO / DTO / VO / AO 的作用 Java 开发中,DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object) 和 AO(Application Object) 是常用的对象类型,每种类型都在特定的层次和场景中发挥不同的作用。以下是它们的定义和使用…

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

前言一个12V转5V、3.3V和4V的电源电路设计好了,下一步导出BOM表,二次核对元器件型号封装,这是可以生产前的最后一步了。 导出BOM表步骤一:打开原理图打开项目,双击点开原理图:   步骤二:报告-元器件列表列宽一点,板子元器件种类规格不多的时候,导出的东西也不多,因…

数字孪生-智能制造

1、数字企业内循环:打造端到端的数字化应用体验 2、GARTNER分层架构 3、企业数字化架构 4、数字企业的两大核心特征 6、产品数字主线赋能企业转型 7、数字主线关键技术:基于统一架构构建产品全量数字模型 8、闭环数字化解决方案 9、基于数字主线的设计-仿真-试验协同 10、产品数…

C# WPF PrintDialog 打印(3)

前面https://www.cnblogs.com/yinyu5/p/18634080使用PrintDocument方法打印了Canvas,这里打印下面的DataGrid列表内容:这里DataGrid的数据源是DataTable,后台代码:1 private void PrintDocument_DataTable_Method(string Title, DataTable dataTable)2 {3 …

【JAVA代码审计】记一次某java类的cms最最最详细的代码审计

前言 刚好遇到一个授权的渗透是通过该cms实现getshell,所以顺便审计一下java类的cms,这个管理系统是一个内容管理系统,下载地址 https://gitee.com/oufu/ofcms/tree/V1.1.3/tomcat下载地址 https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-wind…

12.26日每日总结

昨天在调试51单片机的串口时,发现芯片手册上有一句话,在使用定时器1产生串口的波特率时,定时器1就不能使能了。不是不能用,是直接不让使能了,使能后会出错,导致发送的数据不稳定。 今天继续研究了触摸滑条,发现滑条输出的值为从小到大,如下图所示的样子,这就导致从最上…