当前位置: 首页 > news >正文

2026“钉耙编程”中国大学生算法设计暑期联赛(5)

E

维护每个字符串是否连续 \(k\) 次出现,第一次出现的位置,和出现总次数即可。比较签到。

void solve() {int n, k, m, q;cin >> n >> k >> m >> q;vector <int> ans;vector<string> s(n);set <string> S;map <string, int> idx;for (int i = 0; i < n; i++) {cin >> s[i];S.insert(s[i]);}int o = 0;for (auto &x : S) {idx[x] = o++;}vector <int> first(o, -1), cnt(o), can(o);auto check1 = [&](const string &t, int i, int x) -> bool {if (i < k) return 0;if (can[x]) return 1;for (int j = i - 1; j >= i - k; j--) {if (t != s[j]) {return 0;}}can[x] = 1;return 1;};auto update = [&](const string &t, int i, int x) -> void {if (i - k + 1 < 0) return;if (can[x]) return;for (int j = i; j >= i - k + 1; j--) {if (t != s[j]) {return;}}can[x] = 1;};auto check2 = [&](int x, int i) -> bool {if (first[x] == -1) return 0;return i - first[x] > m;};for (int i = 0; i < n; i++) {int cur = idx[s[i]];if (cnt[cur] == q) continue;if (check1(s[i], i, cur) && check2(cur, i)) ans.push_back(i + 1);if (cnt[cur] == 0) first[cur] = i;cnt[cur]++;update(s[i], i, cur);}if (ans.empty()) cout << "empty" << '\n';else {for (auto &x: ans) cout << x << ' ';cout << '\n';}
}

H

经典二维数点。我们把 \(L\) 看作横坐标轴,\(R\) 看作纵坐标轴,每一段区间 \([l_i,r_i]\) 看作平面上的点,点的权值为 \(r_i-l_i+1\)。则一次询问就是要找到在矩形 \(L\le l_i,r_i\le R\) 中的最大点权。

离线操作,把询问和点按左端点从大到小排序,在左端点 \(l_i \ge L\) 的情况下,将点插入树状数组。维护右端点 \(r_i\le R\) 的最大权值。由于值域很大,需要离散化。时间复杂度 \(\mathcal{O}(n\log n + q\log(n+q))\)

struct Segment {int l, r;int len() const { return r - l + 1; }bool operator < (const Segment &other) const {return l > other.l;}
};
struct Query {int l, r;int id;bool operator < (const Query &other) const {return l > other.l;}
};
struct BIT {int n;vector<int> t;BIT(int n) : n(n), t(n + 1, 0) {}void update(int x, int v) {for (int i = x; i <= n; i += i & -i) {t[i] = max(t[i], v);}}int query(int x) const {int res = 0;for (int i = x; i > 0; i -= i & -i) {res = max(res, t[i]);}return res;}
};void solve() {int n, q;cin >> n >> q;vector <Segment> points(n);vector <int> Rs(n);for (int i = 0; i < n; i++) {cin >> points[i].l >> points[i].r;Rs[i] = points[i].r;}sort(Rs.begin(), Rs.end());Rs.erase(unique(Rs.begin(), Rs.end()), Rs.end());vector <Query> queries(q);for (int i = 0; i < q; i++) {cin >> queries[i].l >> queries[i].r;queries[i].id = i;}sort(points.begin(), points.end());sort(queries.begin(), queries.end());vector <int> ans(q);BIT bit(Rs.size());int ptr = 0;for (auto &[L, R, id] : queries) {while (ptr < n && points[ptr].l >= L) {int len = points[ptr].len();int x = lower_bound(Rs.begin(), Rs.end(), points[ptr].r) - Rs.begin() + 1;bit.update(x, len);ptr++;}int x = upper_bound(Rs.begin(), Rs.end(), R) - Rs.begin();ans[id] = bit.query(x);}for (auto &x : ans) cout << x << '\n';
}

J

把一个局面映射成 100 位的二进制数字。把所有局面都放到异或线性基里,对应的权值也同时异或处理。看最终询问的局面能否被线性基所表示。时间复杂度 \(\mathcal{O}(100 \cdot 100 \cdot n)\)

struct Node {array <int, 100> num;int S;Node() {fill(num.begin(), num.end(), 0); S = 0;}
};array <int, 100> Zero;struct XorBasis {array<Node, 100> basis;bool insert(Node x) {for (int i = 99; i >= 0; i--) {if (x.num[i] == 1) {if (basis[i].num == Zero) {basis[i].num = x.num;basis[i].S = x.S;return 1;}for (int j = 0; j <= 99; j++) {x.num[j] ^= basis[i].num[j]; }x.S ^= basis[i].S;}}return 0;}int query(Node x) {for (int i = 99; i >= 0; i--) {if (x.num[i] == 1) {for (int j = 0; j <= 99; j++) {x.num[j] ^= basis[i].num[j]; }x.S ^= basis[i].S;}}if (x.num == Zero) return x.S;return -1;}
};void solve() {int K;cin >> K;vector <Node> a(K);XorBasis B;for (int i = 0; i < K; i++) {int C, S;cin >> C >> S;a[i].S = S;while (C--) {int L;cin >> L;L--;a[i].num[L] ^= 1;}B.insert(a[i]);}int Q;cin >> Q;while (Q--) {int D;cin >> D;Node x;while (D--) {int R;cin >> R;R--;x.num[R] ^= 1;}cout << B.query(x) << '\n';}
}

好像只能做出这么多了,希望这些简单题下次能做快一些。

http://www.jsqmd.com/news/1329835/

相关文章:

  • 自贡MA甲醛检测公司公共卫生检测如何选:安鑫母婴甲醛检测标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 成都CCMA甲醛检测公司公共卫生检测如何选:国康CCCMA检测标准、流程、避坑指南 - CMA甲醛检测中心
  • 第五阶段 49 · 安全:TLS、API Key、RBAC
  • 佳木斯CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - 信誉隆金银铂奢回收
  • 菏泽CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - CMA甲醛检测中心
  • 电脑突然变卡?5分钟学会用LibreHardwareMonitor找出硬件健康问题
  • 鞍山CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - 信誉隆金银铂奢回收
  • 江门CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - 信誉隆金银铂奢回收
  • 租电脑哪家性价比高:【雕马】物美价廉 - 17728181569
  • 2026年上门打孔施工怎么选?优质源头厂家参考清单 - 热点品牌推荐
  • 摩托车怎么邮寄?2026年托运避坑指南,整车寄出不用拆电池! - 快递物流资讯
  • 计算机毕业设计之基于Spring Boot的智慧旅游一体化平台的设计与实现
  • 如何快速掌握NVIDIA显卡优化:免费专业级NVIDIA Profile Inspector终极配置指南
  • 贺州CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - CMA甲醛检测中心
  • 2026花都区粤菜餐厅哪家正宗:【锦堂春想】古法烹制 - 17328623207
  • 第五阶段 50 · geo 地理查询(geo_point / geo_distance)
  • 2026年烧结砖供应厂家哪家好?实际考察这三点就行 - 热点品牌推荐
  • UE5动画骨骼重定向:IK Rig从原理到实战,解决Mixamo到Metahuman适配难题
  • 巴彦淖尔CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - 信誉隆金银铂奢回收
  • 2026 年现阶段阿拉善盟本地冷库回收源头厂家联系电话,旧冷库变废为宝的隐形门道,90%的人都不知道它的价值能翻几番?-海韵玻璃冷库设备 - 企业推荐管【认证】
  • 2026年预制菜厂家**相关情况梳理汇总 - 奔跑123
  • 外贸新模式实战课程-更新5月,账号搭建+截流技术+AI矩阵+独家方法实现自动化获客
  • 想找咖啡烘豆机工厂哪家好?看完这篇就懂了 - 热点品牌推荐
  • APK Installer终极指南:在Windows上快速免费安装Android应用的完整教程
  • 2026 年黔江正规的二手电表回收厂家哪家**,旧电表竟还能卖钱?这背后藏着不少人不知道的门道-正兴电表回收 - 企业推荐官-
  • 2026 年富宁有实力的一体化预制泵站厂家推荐几家,别再傻傻花冤枉钱做泵站?这一体化预制方案省出半条工程经费-麓水环保玻璃钢化粪池 - 领域鉴赏官
  • 2026 年现阶段,贵池热门的专业打捞队捞手机批发厂家选哪家,为了一部手机花上千?看完打捞队操作,我果断给手机买了防掉落险 - 企业推荐管【认证】
  • 2026年B端企业招投标获客平台甄选指南:深度剖析、权威对比与避坑秘籍
  • 鹤壁CMA甲醛检测公司公共卫生检测怎么选:国慷测研CMA检测 - CMA甲醛检测中心
  • 国家中小学智慧教育平台电子课本下载终极指南:3分钟批量获取官方教材PDF