C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛
AcWing 第2场周赛
3626 三元一次方程

两层循环
#include <iostream>
using namespace std;
void find(int n) {
for (int x = 0; x <= 1000 / 3; x++) {
for (int y = 0; y <= 1000 / 5; y++) {
int res = n - 3 * x - 5 * y;
if (res < 0) {
continue;
} else if (res % 7 == 0) {
cout << x << " " << y << " " << res / 7 << endl;
return;
}
}
}
cout << "-1" << endl;
}
int main() {
int m;
cin >> m;
while (m--) {
int n;
cin >> n;
if (n < 0) {
cout << "-1" << endl;
continue;
}
find(n);
}
}
3627最大差值

考查贪心,所有输入的不是0的数排序,每次操作取最大的数++,由于每个数最大可以是1e9,int可能溢出,需要用 long long
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int t, n, k;
int a[N];
int main() {
cin >> t;
while (t--) {
cin >> n >> k;
int idx = 0;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
if (x != 0) a[idx++] = x;
}
sort(a, a + idx);
long long res = a[--idx];
int i = idx - 1;
while (k--)
if (i >= 0) res += a[i--];
cout << res << endl;
}
}
3628边的删减

刚开始有点傻,打算用克鲁斯卡尔生成最小生成树,题意明显不是这样的
- 最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径
- 最短路径是从一点出发,到达目的地的路径最小。
所以本题的解题思路先用堆优化版迪杰斯特拉求各点到根节点的最短路径,然后用DFS从根节点找k条边的连通图(任意一个包含k条边的连通块就是答案)
因为 w <= 1e9,所以dist数组长度要用 long long 存
考查堆优化Dijkstra、DFS
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef pair<LL, int> PII;
const int N = 10e5 + 10, M = 2 * N;
int n, m, k;
int h[N], e[M], ne[M], idx, w[M], id[M];
LL dist[N];
bool st[N];
void add(int a, int b, int c, int d) {
e[idx] = b;
w[idx] = c;
id[idx] = d;
ne[idx] = h[a];
h[a] = idx++;
}
void dijkstra() {
priority_queue<PII, vector<PII>, greater<PII>> heap; // 定义为小根堆
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
heap.push({0, 1});
while (heap.size()) {
auto u = heap.top();
heap.pop();
if (st[u.y]) continue;
st[u.y] = true;
for (int i = h[u.y]; ~i; i = ne[i]) {
int j = e[i];
if (dist[j] > u.x + w[i]) {
heap.push({u.x + w[i], j});
dist[j] = u.x + w[i];
}
}
}
}
vector<int> ans;
void dfs(int x) {
st[x] = true;
for (int i = h[x]; ~i; i = ne[i]) {
int j = e[i];
if (!st[j] && dist[x] + w[i] == dist[j]) {
if (ans.size() < k) ans.push_back(id[i]);
dfs(j);
}
}
}
int main() {
cin >> n >> m >> k;
memset(h, -1, sizeof h);
for (int i = 1; i <= m; i++) {
int a, b, c;
cin >> a >> b >> c;
add(a, b, c, i);
add(b, a, c, i);
}
dijkstra();
memset(st, 0, sizeof st);
dfs(1);
cout << ans.size() << endl;
for (auto i : ans) cout << i << " ";
return 0;
}

C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛的更多相关文章
- AcWing第85场周赛
这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...
- AcWing 第11场周赛题解
计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...
- AcWing第78场周赛
今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 深度学习攻防对抗(JCAI-19 阿里巴巴人工智能对抗算法竞赛)
最近在参加IJCAI-19阿里巴巴人工智能对抗算法竞赛(点击了解),初赛刚刚结束,防御第23名,目标攻击和无目标攻击出了点小问题,成绩不太好都是50多名,由于找不到队友,只好一个人跟一群大佬PK,双拳 ...
- Hihocoder 太阁最新面经算法竞赛18
Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...
- hihoCoder太阁最新面经算法竞赛15
hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
随机推荐
- this关键字理解
编译器对对象的加载步骤: (1)类名 (2)成员变量 (3)成员方法 即使定义类时,成员变量写在成员方法后面,加载对象时,也是先加载成员变量 当编译器识别方法时,会对成员方法改写,在所有方法里隐藏一个 ...
- < Python全景系列-7 > 提升Python编程效率:模块与包全面解读
欢迎来到我们的系列博客<Python全景系列>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法.无论你是编程新手,还是有一 ...
- 在asp.net core web api中添加efcore使用codefirst
首先创建webapi项目,我这里使用的版本是.net6 在nuget中添加对应的工具包 红框标出来的是对应的数据库扩展包,mysql用mysql版,sqlserver用sqlserver版,选择正确的 ...
- uniapp主题切换功能的第一种实现方式(scss变量+vuex)
随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题. 就像b站app主题切换,像这样的 uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实 ...
- ZYNQ 启动过程简介 以及 ZYNQ 裸机生成BOOT.BIN
背景 下图是ZYNQ的启动过程 上电复位等完成后,先执行BootRom,然后再根据MIO设定的启动方式选择对应从哪里启动,无论从哪里启动,都需要一个BOOT.BIN文件,对于裸机程序来说: BOOT. ...
- 前端学习C语言 - 数组和字节序
数组 本篇主要介绍:一维二维数组.字符数组.数组名和初始化注意点以及字节序. 一维数组 初始化 有以下几种方式对数组初始化: // 定义一个有5个元素的数组,未初始化 int a[5]; // 定义一 ...
- 【promptulate专栏】ChatGPT框架——两行代码构建一个强大的论文总结助手
本文节选自笔者博客:https://www.blog.zeeland.cn/archives/019hasaa 前言 如果你经常阅读论文,那么你肯定会遇到以下几个问题: 论文晦涩难懂看不明白怎么办? ...
- 基于.Net Core实现的飞书文档一键导出服务(支持多系统)
feishu-doc-export 一个支持Windows.Mac.Linux系统的飞书文档一键导出服务,仅需一行命令即可将飞书知识库的全部文档同步到本地电脑.导出速度嘎嘎快,实测700多个文档导出只 ...
- 每日一题 力扣 445 https://leetcode.cn/problems/add-two-numbers-ii/
可以直接用栈去做就行,逆序想到栈的做法 然后算完一个就直接赋值给答案数组 我用的是常见 public ListNode addTwoNumbers(ListNode l1, ListNode l2) ...
- go web学习(五)
跟着刘旭老师学go web做的笔记 [Go Web 编程快速入门[Golang/Go语言](完结)] https://www.bilibili.com/video/BV1Xv411k7Xn/?p=27 ...