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

牛客周赛 Round 57 ABCDFG

A题:小红喜欢1 

题意

输出1所在的位置

思路

代码

#include <bits/stdc++.h>
using namespace std;
int main() {for (int i = 1; i <= 5; i ++ ) {int x; cin >> x;if (x) cout << i << endl;}return 0;
}

B题:小红的树切割 

题意

对于一个树,每个节点有一种颜色,你可以删去若干条边以形成森林,使得每棵树相邻节点颜色不同,问最小的操作次数

思路

如果给定边的两个节点颜色一样那么就必须删去这条边

代码

#include <bits/stdc++.h>
using namespace std;
int main() {int n; cin >> n;string s; cin >> s;s = ' ' + s;int ans = 0;for (int i = 1; i < n; i ++ ) {int a, b; cin >> a >> b;if (s[a] == s[b]) ans += 1;}cout << ans << endl;return 0;
}

C题:小红的双好数(easy) 

题意

问是否存在k1和k2能将n以k1和k2两种进制的表示下,每一位不超过1

思路

二进制下肯定是不会超过1的,而剩下那个我们只需取它本身即可

在2的情况下失效,在1的情况下我们可以使用2和3

代码

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {LL n; cin >> n;if (n == 1) {cout << "YES" << endl;cout << 2 << ' ' << 3 << endl;}else {if (n == 2) cout << "NO" << endl;else {cout << "YES" << endl;cout << 2 << ' ' << n << endl;}}return 0;
}

D题:小红的线段 

题意

将2n个点两两组合形成n条线段,构造出与已知直线相交的线段最多的方案

思路

一开始可以分成三类

1:在直线上方

2:在直线下方

3:在直线上

其中在直线上下方的点可以和下上方或者直线上的点连线与直线相交

而在直线上的可以自己和自己就能形成一条与直线相交的线段

所以我们贪心地来

可以先将上方和下方匹配完

再将剩下的与在直线上的匹配

最后自己跟自己匹配

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
using PII = pair<int, int>;
signed main() {int n, k, b; cin >> n >> k >> b;queue<int> q[3];for (int i = 1; i <= 2 * n; i ++ ) {int x, y; cin >> x >> y;int cur = k * x + b;if (cur > y) q[0].push(i);else if (cur == y) q[2].push(i);else q[1].push(i);}vector<PII> ans;while (q[0].size() && q[1].size()) {ans.push_back({q[0].front(), q[1].front()});q[0].pop(), q[1].pop();}while (q[0].size() && q[2].size()) {ans.push_back({q[0].front(), q[2].front()});q[0].pop(), q[2].pop();}while (q[2].size() && q[1].size()) {ans.push_back({q[2].front(), q[1].front()});q[2].pop(), q[1].pop();}while (q[2].size() >= 2) {int t1 = q[2].front();q[2].pop();int t2 = q[2].front();q[2].pop();ans.push_back({t1, t2});}vector<int> no;for (int i = 0; i < 3; i ++ ) {if (q[i].size()) {while (q[i].size()) {no.push_back(q[i].front());q[i].pop();}}}cout << ans.size() << endl;for (auto [x, y] : ans) {cout << x << ' ' << y << " Y" << endl;}for (int i = 0; i < no.size(); i += 2) {cout << no[i] << ' ' << no[i + 1] << " N" << endl;}return 0;
}

F题:小红的数组操作 

思路

线段树模版题

我用了map来维护每个数组的最小值

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
struct node {int l, r;int v;
}tr[N << 2];
int minv[N];
void pushup(int u) {tr[u].v = min(tr[u << 1].v, tr[u << 1 | 1].v);
}
void build(int u, int l, int r) {tr[u] = {l, r};if (l == r) tr[u] = {l, r, minv[l]};else {int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);pushup(u);}
}
int query(int u, int l, int r) {if (tr[u]. l >= l && tr[u].r <= r) return tr[u].v;int mid = tr[u].l + tr[u].r >> 1;int val = 1e9 + 7;if (l <= mid) val = query(u << 1, l, r);if (r > mid) val = min(val, query(u << 1 | 1, l, r));return val;
}
void modify(int u, int x, int val) {if (tr[u].l == x && tr[u].r == x) tr[u].v = val;else {int mid = tr[u].l + tr[u].r >> 1;if (x <= mid) modify(u << 1, x, val);else modify(u << 1 | 1, x, val);pushup(u);}
}
int main() {int n; cin >> n;vector<vector<int>> a(n + 1);vector<map<int, int>> b(n + 1);vector<int> num(n + 1);for (int i = 1; i <= n; i ++ ) {cin >> num[i];int mn = (int)1e9 + 7;for (int j = 1; j <= num[i]; j ++ ) {int x; cin >> x;mn = min(mn, x);b[i][x] += 1;a[i].push_back(x);}minv[i] = mn;}build(1, 1, n);int q; cin >> q;while (q -- ) {int op; cin >> op;if (op == 1) {int i, j, val; cin >> i >> j >> val;j -= 1;b[i][a[i][j]] -= 1;if (b[i][a[i][j]] == 0) b[i].erase(a[i][j]);b[i][val] += 1;a[i][j] = val;auto t = b[i].begin();modify(1, i, t->first);}else {int i; cin >> i;cout << query(1, 1, i) << endl;}}return 0;
}

G题:小红的双排列构造 

思路

构造题

首先无法构造的是n=1的情况,它已经定了

然后我们分类讨论k的情况

除了k=0外

对于n==4

我们可以看到

1 2 3 4 1 2 3 4 --k=5

1 2 3 4 2 1 3 4 --k=4

1 2 3 4 3 2 1 4 --k=3

1 2 3 4 4 3 2 1 --k=2

对于k==1

1 1 2 3 4 2 3 4即可

再讨论k=0的情况,在此不过多赘述

代码

#include <bits/stdc++.h>
using namespace std;
int main() {int n, k; cin >> n >> k;if (n == 1) {if (k != 2) cout << -1 << endl;else cout << 1 << ' ' << 1 << endl;}else {if (k == n + 1) {for (int i = 1; i <= 2; i ++ ) {for (int j = 1; j <= n; j ++ ) {cout << j << ' ';}}}else if (k == 0) {if (n == 2) cout << -1 << endl;else {for (int i = 1; i <= n; i ++ ) cout << i << ' ' << i << endl;}}else if (k == 1) {cout << 1 << ' ';for (int i = 1; i <= n; i ++ ) cout << i << ' ';for (int i = 2; i <= n; i ++ ) cout << i << ' ';}else {for (int i = 1; i <= n; i ++ ) cout << i << ' ';for (int i = n - k + 2; i >= 1; i -- ) cout << i << ' ';for (int i = n - k + 3; i <= n; i ++ ) cout << i << ' ';}}return 0;
}

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python中如何将小数显示为分数
  • 秃姐学AI系列之:NiN + 代码实现
  • 数学基础 -- 微积分之近似误差计算
  • 网络UDP报文详细解析
  • java springboot 实现文件上传下载(文件服务器,文件统一处理,图片,word,pdf,视频,等)
  • C++ 设计模式——命令模式
  • 服务器被渗透的表现及检测方法
  • IT 行业的就业情况
  • (十)Flink Table API 和 SQL 基本概念
  • 【C++指南】内存管理(三)
  • Linux 部署 MinIO(远程服务器)
  • Ubuntu清除缓存的方法--防止系统崩溃
  • C# messagePack对类(class)序列化简单示例
  • 8.21-部署eleme项目
  • 达梦表字段、字段类型,精度比对及更改字段SQL生成
  • [译]CSS 居中(Center)方法大合集
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • JavaScript函数式编程(一)
  • Java编程基础24——递归练习
  • Linux后台研发超实用命令总结
  • Mithril.js 入门介绍
  • PHP 7 修改了什么呢 -- 2
  • redis学习笔记(三):列表、集合、有序集合
  • Redis中的lru算法实现
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue2.0 实现互斥
  • 测试如何在敏捷团队中工作?
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 蓝海存储开关机注意事项总结
  • 浏览器缓存机制分析
  • 网络应用优化——时延与带宽
  • 微信小程序填坑清单
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ###项目技术发展史
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4)事件处理——(7)简单事件(Simple events)
  • (备份) esp32 GPIO
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (南京观海微电子)——COF介绍
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (原创)可支持最大高度的NestedScrollView
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET DataGridView数据绑定说明
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .py文件应该怎样打开?
  • @Documented注解的作用
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @Resource和@Autowired的区别