尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

2025CSP-S模拟赛51

2025CSP-S模拟赛51
📅 发布时间:2026/6/18 22:33:36

2025CSP-S模拟赛51

T1 T2 T3 T4
30 TLE 18 WA 54 TLE -

总分:102;排名:19/24。

打得很唐氏。T1 挂了 70 分,T2 本可以做出来的,没调出来。

T1 算术

考虑对原式进行变形(省略过程):

\[\left\{\begin{align*} & a_i \le \frac{a_j}{a_j-1}\land a_j>1 \\ & a_j=1\\ & a_i \le \frac{a_j}{1-a_j} \land a_j<1 \end{align*}\right. \]

然后不难发现这个 \(\frac{a_j}{a_j-1}\) 的值就是 \(1\)(差不多就是)。然后 \(O(n)\) 去跑就行了。考试时比较唐氏,只推导到了上面的式子,写了线段树,然后被卡常了。经过卡常是可以通过的。

#include <bits/stdc++.h>
#define il inlineusing namespace std;const int bufsz = 1 << 20;
char ibuf[bufsz], *p1 = ibuf, *p2 = ibuf;
#define getchar() (p1 == p2 && (p2 = (p1 = ibuf) + fread(ibuf, 1, bufsz, stdin), p1 == p2) ? EOF : *p1++)
il int read() {int x = 0; char ch = getchar(); bool t = 0;while (ch < '0' || ch > '9') {t ^= ch == '-'; ch = getchar();}while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();}return t ? -x : x;
}
bool Beg;
const int maxm = 1e9;
const int N = 1e6 + 10;
int n, a[N];
int root;
int ll[N * 20], rr[N * 20];
long long s[N * 20];
int tot;
#define lc ll[p]
#define rc rr[p]
#define mid ((l + r) >> 1)
il void update(int &p, int l, int r, int x) {if (!p) p = ++tot;s[p]++;if (l == r) return;if (x <= mid) update(lc, l, mid, x);else update(rc, mid + 1, r, x);
}
int query(int p, int l, int r, int x, int y) {if (!p) return 0;if (l == x && y == r) return s[p];if (y <= mid) return query(lc, l, mid, x, y);else if (x > mid) return query(rc, mid + 1, r, x, y);else return query(lc, l, mid, x, mid) + query(rc, mid + 1, r, mid + 1, y);
}
bool End;
il void Usd() {cerr << "\nUsed: " << (&Beg - &End) / 1024.0 / 1024.0 << "MB " << (double)clock() * 1000.0 / CLOCKS_PER_SEC << "ms\n";}
signed main() {n = read();for (int i = 1; i <= n; i++) {a[i] = read();}long long ans = 0;for (int i = 1; i <= n; i++) {if (a[i] - 1 == 0) {ans += i - 1;} else if (a[i] - 1 > 0) {ans += query(root, -maxm, maxm, -maxm, (int)ceil(1.0 * a[i] / (a[i] - 1)) - 1);} else {ans += query(root, -maxm, maxm, (int)floor(1.0 * a[i] / (a[i] - 1)) + 1, maxm);}update(root, -maxm, maxm, a[i]);}printf("%lld\n", ans);Usd();return 0;
}

T2 刷墙

考场上基本写出来了。

区间 dp。\(f_{i,j}\) 表示 \([i,j]\) 米,只用完全包含在这个区间内的刷子,的最大颜色。转移很简单,无非是:

  1. 直接继承子区间。
  2. 从一个子区间向外扩展一种颜色。
  3. 两个子区间中间通过一种颜色链接。
#include <bits/stdc++.h>
#define il inlineusing namespace std;const int bufsz = 1 << 20;
char ibuf[bufsz], *p1 = ibuf, *p2 = ibuf;
#define getchar() (p1 == p2 && (p2 = (p1 = ibuf) + fread(ibuf, 1, bufsz, stdin), p1 == p2) ? EOF : *p1++)
il int read() {int x = 0; char ch = getchar(); bool t = 0;while (ch < '0' || ch > '9') {t ^= ch == '-'; ch = getchar();}while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();}return t ? -x : x;
}
bool Beg;
const int INF = 0x3f3f3f3f;
const int N = 600 + 10;
int n;
struct node {int l, r;
} a[N];
int ll[N], tot, L;
int f[N][N];
struct ST {int mn[N][15], Log2[N];il void init() {for (int i = 2; i <= L; i++) Log2[i] = Log2[i / 2] + 1;for (int i = 1; i <= L; i++) mn[i][0] = INF;}il void init1() {for (int j = 1; j <= Log2[L]; j++) {for (int i = 1; i + (1 << j) - 1 <= L; i++) {mn[i][j] = min(mn[i][j - 1], mn[i + (1 << (j - 1))][j - 1]);}}}il int query(int l, int r) {int s = Log2[r - l + 1];return min(mn[l][s], mn[r - (1 << s) + 1][s]);}
} st[N];
il bool cmp(int x, int y) {return a[x].l != a[y].l ? a[x].l < a[y].l : a[x].r < a[y].r;
}
bool End;
il void Usd() {cerr << "\nUsed: " << (&Beg - &End) / 1024.0 / 1024.0 << "MB " << (double)clock() * 1000.0 / CLOCKS_PER_SEC << "ms\n";}
int main() {n = read();for (int i = 1; i <= n; i++) {int l = read() + 1, r = read();a[i] = {l, r};ll[++tot] = l;ll[++tot] = r;}sort(ll + 1, ll + 1 + tot);L = unique(ll + 1, ll + 1 + tot) - ll - 1;int mn = 2;for (int i = 1; i <= n; i++) {a[i].l = lower_bound(ll + 1, ll + 1 + L, a[i].l) - ll;a[i].r = lower_bound(ll + 1, ll + 1 + L, a[i].r) - ll;f[a[i].l][a[i].r] = 1;mn = min(mn, a[i].r - a[i].l + 1);}for (int i = 1; i <= L; i++) {st[i].init();for (int j = 1; j <= n; j++) {if (a[j].l <= i && i < a[j].r) {st[i].mn[a[j].l][0] = min(st[i].mn[a[j].l][0], a[j].r);}}st[i].init1();}for (int len = mn; len <= L; len++) {for (int i = 1; i + len - 1 <= L; i++) {int j = i + len - 1;f[i][j] = max(f[i + 1][j], f[i][j - 1]);for (int k = i; k < j; k++) {f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j]);}for (int t = 1; t <= n; t++) {if (a[t].l < i || a[t].r > j) continue;if (a[t].l == i) f[i][j] = max(f[i][j], f[i + 1][j] + 1);if (a[t].r == j) f[i][j] = max(f[i][j], f[i][j - 1] + 1);}for (int k = i; k < j; k++) {if (ll[k] + 1 < ll[k + 1] && st[k].query(i, j) <= j) {f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + 1);} if (k > i && (st[k - 1].query(i, j) <= j || st[k].query(i, j) <= j)) {f[i][j] = max(f[i][j], f[i][k - 1] + f[k + 1][j] + 1);}}}}printf("%d\n", f[1][L]);Usd();return 0;
}

T3 重复

T4 公交

相关新闻

  • 2025年9月24日 - 20243867孙堃2405
  • 分库分表后如何高效处理分页
  • 详细介绍:【Selenium】UI自动化测试框架设计:从项目结构到Base-Page层的最佳实践

最新新闻

  • 视觉具身智能:从多模态模型到可执行AI工作流的范式升级
  • 微论-双圈向量,是否为RAG的换命术?
  • 终极免费!用NoFences彻底告别Windows桌面混乱
  • 让经典游戏手柄重获新生:XOutput 输入协议转换指南
  • 如何通过频谱分析解决音频质量检测的三大难题
  • 免费的pdf转excel工具推荐?2026永久免费888PDF转换器PDF转Excel实测推荐 - 工具测试专家

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号