Japan Registry Services (JPRS) Programming Contest 2025#1 (AtCoder Beginner Contest 392)

news/2025/2/8 22:15:23/文章来源:https://www.cnblogs.com/maburb/p/18705493

A - Shuffled Equation

点击查看代码
void solve() {int a, b, c;std::cin >> a >> b >> c;if (a * b == c || a * c == b || b * c == a) {std::cout << "Yes\n";} else {std::cout << "No\n";}
}

B - Who is Missing?

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::set<int> s;for (int i = 0; i < m; ++ i) {int x;std::cin >> x;s.insert(x);}std::vector<int> ans;for (int i = 1; i <= n; ++ i) {if (!s.count(i)) {ans.push_back(i);}}std::cout << ans.size() << "\n";for (auto & x : ans) {std::cout << x << " \n"[x == ans.back()];}
}

C - Bib

题意:第\(i\)个人编号为\(q_i\),指向\(p_i\)。求编号为\(i\)的人指向的人的编号。

编号为\(q_i\)的人指向人的编号为\(q_{p_i}\)

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> p(n), q(n);for (int i = 0; i < n; ++ i) {std::cin >> p[i];-- p[i];}for (int i = 0; i < n; ++ i) {std::cin >> q[i];-- q[i];}std::vector<int> ans(n);for (int i = 0; i < n; ++ i) {ans[q[i]] = q[p[i]];}for (int i = 0; i < n; ++ i) {std::cout << ans[i] + 1 << " \n"[i == n - 1];}
}

D - Doubles

题意:有\(n\)个骰子,每个骰子有几率投出一些数,求两个骰子骰出相同数的最大概率。

\(n\)比较小,直接枚举两个骰子,然后计算它们可以骰出来的相同数的概率和。

点击查看代码
void solve() {int n;std::cin >> n;const int N = 1e5 + 5;std::vector<int> k(n);std::vector<std::map<int, int> > cnt(n);for (int i = 0; i < n; ++ i) {std::cin >> k[i];for (int j = 0; j < k[i]; ++ j) {int x;std::cin >> x;++ cnt[i][x];}}double ans = 0;for (int i = 0; i < n; ++ i) {for (int j = i + 1; j < n; ++ j) {double sum = 0;for (auto & [x, y] : cnt[i]) {if (cnt[j].count(x)) {sum += 1.0 * y / k[i] * cnt[j][x] / k[j];}}ans = std::max(ans, sum);}}std::cout << std::fixed << std::setprecision(12);std::cout << ans << "\n";
}

E - Cables and Servers

题意:给你一个图,你可以改变某些边的连接端点使得整个图联通。

先求出每个联通块,然后每个联通块只需要\(size - 1\)条边,其中\(size\)是联通块的大小,那么其余的边是多余,可以用并查集求联通块和每个联通块多余的边。然后按顺序枚举所有联通块,记录前面联通块的可用边,和前面的联通块编号,每次先把前面联通块的边来连当前联通块,如果没有则用当前联通块的边尽可能连前面的联通块,模拟讨论一下就行,然后记得把没用过的边加进来,以及更新前面的联通块。

点击查看代码
struct DSU {std::vector<int> fa, cnt;DSU(int _n) {init(_n);}void init(int _n) {fa.assign(_n, 0);cnt.assign(_n, 1);std::iota(fa.begin(), fa.end(), 0);}int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}bool merge(int x, int y) {x = find(x), y = find(y);if (x == y) {return false;}fa[y] = x;cnt[x] += cnt[y];return true;}bool same(int x, int y) {return find(x) == find(y);}int size(int x) {return cnt[find(x)];}
};void solve() {int n, m;std::cin >> n >> m;std::vector<std::pair<int, int> > edges(m);DSU d(n);std::vector<int> id;for (int i = 0; i < m; ++ i) {int u, v;std::cin >> u >> v;-- u, -- v;edges[i] = {u, v};if (!d.merge(u, v)) {id.push_back(i);}}std::vector<std::vector<int>> g(n);for (auto & i : id) {g[d.find(edges[i].first)].push_back(i);}std::vector<std::array<int, 3>> ans;std::vector<int> a, b;for (int i = 0; i < n; ++ i) {if (d.find(i) == i) {if (a.size()) {int j = a.back();a.pop_back();ans.push_back({j, edges[j].first, i});d.merge(i, d.find(edges[j].first));for (auto & j : g[i]) {a.push_back(j);}} else if (g[i].size()) {for (auto & j : g[i]) {while (b.size() && d.same(b.back(), i)) {b.pop_back();}if (!b.size()) {a.push_back(j);} else {ans.push_back({j, edges[j].first, b.back()});d.merge(b.back(), i);b.pop_back();}}b.push_back(i);} else {b.push_back(i);}}}std::cout << ans.size() << "\n";for (auto & [x, y, z] : ans) {std::cout << x + 1 << " " << y + 1 << " " << z + 1 << "\n";}
}

F - Insert

题意:\(n\)个数依次加入序列,第\(i\)个放到第\(p_i\)个,那么第\(p_i\)\(i-1\)位置上的数都要往后移。求最终序列。

考虑从后往前做,那么最后一个数的位置是可以确定的。假设当前以及放好了\(i + 1\)\(n\),现在在放\(i\),那么\(i\)要一直被小于等于\(p_i\)的往后退,这个过程中同时\(p_i\)也要变大。那么如何求\(p_i\)最后的位置?考虑二分,如果\(p_i + sum(1, mid - 1) >= mid\)那么\(p_i\)的位置一定大于等于\(mid\),这是具有单调性的,因为\(p_i\)实际上是被一步一步推着往后移的。

点击查看代码
template <class T>
struct Fenwick {int n;std::vector<T> tr;Fenwick(int _n) {init(_n);}void init(int _n) {n = _n;tr.assign(_n + 1, {});}void add(int x, T v) {for (int i = x; i <= n; i += i & -i) {tr[i] += v;}}T query(int x) {T res = 0;for (int i = x; i; i -= i & -i) {res += tr[i];}return res;}T sum(int l, int r) {return query(r) - query(l - 1);}
};void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; ++ i) {std::cin >> a[i];}Fenwick<int> tr(n);std::vector<int> ans(n + 1);for (int i = n; i >= 1; -- i) {int l = a[i], r = n;while (l < r) {int mid = l + r + 1 >> 1;if (a[i] + tr.query(mid - 1) >= mid) {l = mid;} else {r = mid - 1;}}int x = a[i] + tr.query(l - 1);tr.add(x, 1);ans[x] = i;}for (int i = 1; i <= n; ++ i) {std::cout << ans[i] << " \n"[i == n];}
}

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

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

相关文章

Stern-Brocot 树

Stern-Brocot 树由两个初始值 \(0\over 1\) 和 \(1\over0\),由两个相邻的数 \(a\over b\) 和 \(c\over d\) 会生成数 \(a + c\over b + d\)。这由图片可以非常直观地看出。形态类似于一棵树。 每个点上有一个"三元组"\((a,b,c)\),\(\left(\dfrac{0}{1},\dfrac{1}{1…

电影解析之虾米解析

我们通常会因为看电影但是需要vip却没有足够生活费去支持的困扰 我就在想有没有白嫖的方法呢(bushi 就在我苦恼的时候我发现了一个方法————就是被称为:解析 的技术这玩意就是最好的选择 但是可能部分人在刚刚接触的时候不会用的于是我就写了一个小软件来支持(只支持wind…

【AI+安全】基于大模型在流量分析领域应用的实践

一、内容概要 随着网络攻击手段的不断进化,流量分析已经成为确保网络安全的关键环节。传统的基于规则和机器学习的方法在一定程度上帮助我们识别和防范攻击,但随着网络攻击形式的多样化和复杂性增加,如何利用更强大的技术手段来分析网络流量,成为了当今网络安全领域的研究热…

RocketMQ实战—7.生产集群部署和生产参数

大纲 1.RocketMQ生产集群部署和生产参数分析 2.RocketMQ生产集群10wTPS压测 3.RocketMQ生产级故障案例1.RocketMQ生产集群部署和生产参数分析 (1)服务器数量 4C8G阿⾥云⾼配服务器共四台,公⽹IP假设如下: 139.224.217.92,106.15.250.248,47.102.152.14,139.224.212.58 (2)…

十二、MyBatis分页插件

十二、MyBatis分页插件@目录十二、分页插件12.1 分页插件使用步骤12.2 分页插件的使用12.3 测试案例本人其他相关文章链接 十二、分页插件 12.1 分页插件使用步骤 1. 添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>page…

htb Nunchucks walkthrough ssti + shebang绕过apparmor限制

注册发现注册失败扫描子域名 ffuf -u https://nunchucks.htb/ -w /usr/share/dirb/wordlists/common.txt -H "Host: FUZZ.nunchucks.htb" -fs 30589访问看看有啥随便输入个邮箱抓包看看 尝试ssti 注入发现确实存在在hacktrick上搜索payload https://book.hacktricks.…

P1551 亲戚

并查集还是不熟,还得练 #include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #define int long long const int N = 1e6; using namespace std; char* p1, * p2, buf[100000]; #define nc() (p1==p2 &&a…

推荐一些程序员常逛的开发者社区

前言 在信息技术日新月异的今天,程序员作为推动技术进步的重要力量,始终在探索、学习和交流的道路上不断前行。为了帮助程序员们更好地拓宽视野、提升技能,本文大姚将给大家推荐12个程序员常逛的开发者社区。 GitHub GitHub是一个功能强大、易于使用的代码托管平台。拥有庞大…

为飞牛OS基于FRP的内网穿透开启HTTPS加密

前言 玩NAS的朋友应该有比较多只是在家庭局域网使用,比如日常看看电影、备份手机照片什么的,这属于家庭局域网的使用场景。 当然了,如果你经常出差,或者过年回家不想把NAS也背回去,或者是想上班摸鱼,或者是NAS搭建游戏服务器之类的能公网访问就很有必要了。 公网访问我自…

0208《XEduHub + PySimpleGUI + PySimpleGUIWeb:在行空板上部署模型的全解析》【模型部署】

- 2月8日,晚上,19:30~21:00(主讲老师:邱奕盛)实验内容: 【模型部署】利用统一推理框架实现模型部署。 在训练好的模型基础上,设计简洁的体验界面, 最终尝试在行空板上实现完整效果的呈现,涉及 XEduHub、PySimpleGUI、PySimpleGUIWeb等工具。 import PySimpleGUI as …

DeepSeek 不再卡顿,从此告别服务器繁忙,请稍后再试(建议收藏!)

大家好,我是六哥。 由于DeepSeek真的太火了,也许你也跟我一样,常会遇到这样的情况:真的让人抓狂,10条回复里常常有9条是“服务器blabla,请稍后重试”,看到这话,就问你,谁能不崩溃? 其实仔细想想,DeepSeek的目标是AGI,算力资源更多用在探索模型上,很难兼顾几亿用户…

踩坑---注意芯片复位后引脚初始化功能

踩坑---注意复位后引脚初始化功能 背景 ​ 做综合案例训练的时候,把PB3和PB4当做了普通IO进行了配置,运行过程中发现很奇怪,怎么输出和配置的不一致。debug调试显示的IO输出和万用表量的都不一样。由于添加了其他功能代码,还把每个部分代码都抽出来单独调试,最后发现就是那…