2024.2.3 寒假训练记录(17)

补一下牛客,菜得发昏了,F搞了两个小时都没搞出来,不如去开H了

在这里插入图片描述
还没补完 剩下的打了atc再来

文章目录

  • 牛客 寒假集训1A DFS搜索
  • 牛客 寒假集训1B 关鸡
  • 牛客 寒假集训1C 按闹分配
  • 牛客 寒假集训1D 数组成鸡
  • 牛客 寒假集训1E 本题又主要考察了贪心
  • 牛客 寒假集训1G why买外卖
  • 牛客 寒假集训1H 01背包,但是bit

牛客 寒假集训1A DFS搜索

题目链接

看数据很小于是纯暴力解法

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;void solve()
{int n;cin >> n;string s;cin >> s;bool flag1 = false, flag2 = false;for (int i = 0; i < n; i ++ ){if (s[i] == 'd'){for (int j = i + 1; j < n; j ++ ){if (s[j] == 'f'){for (int k = j + 1; k < n; k ++ ){if (s[k] == 's'){flag1 = true;break;}}if (flag1) break;}}if (flag1) break;}}for (int i = 0; i < n; i ++ ){if (s[i] == 'D'){for (int j = i + 1; j < n; j ++ ){if (s[j] == 'F'){for (int k = j + 1; k < n; k ++ ){if (s[k] == 'S'){flag2 = true;break;}}if (flag2) break;}}if (flag2) break;}}if (flag2) cout << 1 << ' ';else cout << 0 << ' ';if (flag1) cout << 1 << '\n';else cout << 0 << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1B 关鸡

题目链接

我是分两种讨论,从左边出去和从右边出去,先把坐标按y从小到大排序,遍历每一个坐标,看下一个坐标是不是在当前坐标的下面或者右下面或者右上面,是的话当前这一端就封死了

答案最大是3(在鸡的左右下)

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;bool cmp(PII a, PII b)
{if (a.second != b.second) return a.second < b.second;else return a.first < b.first;
}void solve()
{int n;cin >> n;vector<PII> pos(n);int cnt = 0;for (int i = 0; i < n; i ++ ){cin >> pos[i].first >> pos[i].second;if (pos[i].first == 1 && pos[i].second == -1) cnt ++ ;if (pos[i].first == 1 && pos[i].second == 1) cnt ++ ;if (pos[i].first == 2 && pos[i].second == 0) cnt ++ ;}sort(pos.begin(), pos.end(), cmp);if (n == 0){cout << 3 << '\n';return;}if (cnt == 3){cout << 0 << '\n';return;}bool flag1 = false, flag2 = false;for (int i = 0; i < n - 1; i ++ ){int x = pos[i].first, y = pos[i].second;if (y < 0){if (flag1) continue;if (x == 1){if (pos[i + 1].first == 2 && (pos[i + 1].second == y || pos[i + 1].second == y + 1)) flag1 = true;}else{if (pos[i + 1].first == 1 && pos[i + 1].second == y + 1) flag1 = true;}}else{if (flag2) break;if (x == 1){if (pos[i + 1].first == 2 && (pos[i + 1].second == y || pos[i + 1].second == y + 1)) flag2 = true;}else{if (pos[i + 1].first == 1 && pos[i + 1].second == y + 1) flag2 = true;}}}if (flag1 && flag2) cout << 0 << '\n';else if (flag1){int x = pos[n - 1].first, y = pos[n - 1].second;if (y >= 0) cout << 1 << '\n';else cout << 2 << '\n';}else if (flag2){int x = pos[0].first, y = pos[0].second;if (y <= 0) cout << 1 << '\n';else cout << 2 << '\n';}else{int ans = 0;int x1 = pos[0].first, y1 = pos[0].second;int x2 = pos[n - 1].first, y2 = pos[n - 1].second;if (y1 <= 0) ans ++ ;else ans += 2;if (y2 >= 0) ans ++ ;else ans += 2;ans = min((i64)3, min(ans, 3 - cnt));cout << ans << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1C 按闹分配

题目链接

不知道为啥赛时脑抽写二分,实际上 O ( n ) O(n) O(n) 处理一下前缀和就搞定了

鸡插到某一个人前面,那增加的不满意度就是 t c t_c tc 乘上在鸡后面的人数,根据这个就能算出鸡最优能站在第几个人前面,剩下的前缀和就搞定了

下面代码还是二分,懒得写qaq

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;void solve()
{int n, q, c;cin >> n >> q >> c;vector<int> t(n + 1), pre(n + 1), tmp(n + 2);for (int i = 1; i <= n; i ++ ) cin >> t[i], pre[i] = pre[i - 1] + t[i];for (int i = 1; i <= n; i ++ ) pre[i] = pre[i - 1] + pre[i];sort(t.begin(), t.end());for (int i = 1; i <= n + 1; i ++ ) tmp[i] = tmp[i - 1] + t[i - 1];while (q -- ){int m;cin >> m;auto check = [&](int mid){int pos = upper_bound(tmp.begin(), tmp.end(), mid) - tmp.begin() - 1;int time = pre[n] + (n - pos + 1) * c;if (time - pre[n] > m) return false;else return true;};int l = 0, r = pre[n];while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << r + c << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1D 数组成鸡

题目链接

这题又可以学到一个trick,m的范围在1e9之内,但是30个2相乘就已经超过了,所以n给那么大完全是吓唬人的,如果n很大,那只能说明有很多一样的数要变成1 or -1,所以枚举每一个数变成-1开始到更小,从1开始到更大,只要乘积超过1e9直接停就可以了,最后要注意,如果一个数是0,乘积就肯定是0,所以0是很容易达成的,直接在一开始把0加入到可以得到的集合中,之后询问时每次查找集合中有没有这个数就可以了

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;
const int maxn = 1e6;
const int mod = 1e9 + 7;void solve()
{int n, q;cin >> n >> q;vector<int> a(n);for (int i = 0; i < n; i ++ ) cin >> a[i];sort(a.begin(), a.end());set<int> st;st.insert(0);auto check = [&](int x){int res = 1;for (int i = 0; i < n; i ++ ){res *= a[i] + x;if (res > 1e9) return false;}st.insert(res);return true;};for (int i = 0; i < n; i ++ ){if (i != n - 1 && a[i] == a[i - 1]) continue;for (int j = -a[i] - 1; check(j); j -- ) ;for (int j = -a[i] + 1; check(j); j ++ ) ;}while (q -- ){int m;cin >> m;cout << (st.count(m) ? "Yes" : "No") << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1E 本题又主要考察了贪心

题目链接

数据范围很小,dfs就可以

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;void solve()
{int n, m;cin >> n >> m;vector<int> a(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];vector<PII> op;for (int i = 0; i < m; i ++ ){int x, y;cin >> x >> y;if (x == 1 || y == 1) a[1] += 3;else op.push_back(make_pair(x, y));}int ans = n;m = op.size();function<void(int)> dfs = [&](int u){if (u == m){int cnt = 0;for (int i = 2; i <= n; i ++ ){if (a[i] > a[1]) cnt ++ ;}ans = min(cnt + 1, ans);return;}int id1 = op[u].first, id2 = op[u].second;a[id1] ++ , a[id2] ++ ;dfs(u + 1);a[id1] += 2, a[id2] -- ;dfs(u + 1);a[id1] -= 3, a[id2] += 3;dfs(u + 1);a[id2] -= 3;};dfs(0);cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1G why买外卖

题目链接

优惠券按照a排序,遍历一遍即可,利用前缀和

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;bool cmp(PII a, PII b)
{if (a.first != b.first) return a.first < b.first;else return a.second > b.second;
}void solve()
{int n, m;cin >> n >> m;vector<PII> info(n);for (int i = 0; i < n; i ++ ) cin >> info[i].first >> info[i].second;sort(info.begin(), info.end(), cmp);int pre = 0;int i = 0, ans = m;for (i = 0; i < n; i ++ ){pre += info[i].second;if (info[i].first - pre > m) continue;else{int used = info[i].first - pre;ans = max(ans, info[i].first + m - used);}}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

牛客 寒假集训1H 01背包,但是bit

题目链接

按照题解思路写的,枚举m的二进制中的每一位1,让最后的总重量在该位为0,在这一位之后的可以随便取,在这一位之前的必须是m的子集(意思是m那一位不为1的,总重量的那一位也不能为1),取最大值即可

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;const int N = 1000010;
const int maxn = 1e5 + 1;
const int mod = 1e9 + 7;void solve()
{int n, m;cin >> n >> m;vector<int> v(n), w(n);for (int i = 0; i < n; i ++ ) cin >> v[i] >> w[i];int ans = 0;for (int j = 0; j < n; j ++ ){bool flag = true;for (int k = 0; k <= 30; k ++ ){if ((((w[j] >> k) & 1) == 1) && (((m >> k) & 1) == 0)){flag = false;break;}}if (flag) ans += v[j];}for (int i = 0; i <= 30; i ++ ){if ((m & (1 << i)) == 0) continue;int tmp = 0;for (int j = 0; j < n; j ++ ){bool flag = true;if (((w[j] >> i) & 1) == 1) continue;for (int k = i + 1; k <= 30; k ++ ){if ((((w[j] >> k) & 1) == 1) && (((m >> k) & 1) == 0)){flag = false;break;}}if (flag) tmp += v[j];}ans = max(ans, tmp);}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

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

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

相关文章

java设计模式:策略模式

在平常的开发工作中&#xff0c;经常会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高代码的可拓展性和维护性。今天来聊聊策略模式。 策略模式是一种行为型设计模式&#xff0c;运行时可以根据需求动…

(2024|ICLR reviewing,IGN,EBGAN,重建、幂等和流形紧致目标)幂等生成网络

Idempotent Generative Network 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1 优化目标 2.2 训练 2.3 架构和优化 4. 实验 5. 相关工作 6. 局限性 0. 摘要…

PyTorch基础-Tensors属性、Tensor的运算

PyTorch的基本概念 Tensor的基本概念 张量高于标量、向量、矩阵 标量说零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 Tensor与机器学习的关系 Tensor的创建 函数功能Tensor(*size)基础构造函数Tensor(data)类似np.arrayones(*size)全1Tensorzeros(…

029 命令行传递参数

1.循环输出args字符串数组 public class D001 {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}} } 2.找打这个类的路径&#xff0c;打开cmd cmd C:\Users\Admin\IdeaProjects\JavaSE学习之路\scanner\src\com\yxm\demo 3. 编译…

C++ 之LeetCode刷题记录(二十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 136. 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现…

【Web前端笔记06】CSS常用属性

目录 一、字体属性 1、color 字体颜色 2、font-size 字体大小&#xff08;默认16px) 3、font-weight 文本粗细 4、font-style 字体样式 5、font-family 指定一个元素的字体 二、背景属性 1、background-color 背景颜色 2、background-image: url("img/do.png"); 背景…

某站平台的签名算法分享

先charles抓包&#xff0c;api.xxxxxx.com域名的包 分析包 看到路径参数如下 appkey1d8b6e7d45233436&build5531000&channeldw056&mobi_appandroid&mode0&oid326052200&plat2&platformandroid&ps20&statistics%7B%22appId%22%3A1%2C%22p…

异步编程Completablefuture使用详解----进阶篇

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 文章目录 前言一、异步任务的交互1.1 applyToEither1.2 acceptEither1.3 runAfterEither 二、get() 和 join() 区别三、ParallelStream VS CompletableFuture3.1 使用串行流执行并统计总耗时3.2 使用并行…

前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录 map和Object的区别map和weakMap的区别 map和Object的区别 Object是JavaScript的内置对象&#xff0c;用于存储键值对。Object的键必须是字符串或符号&#xff0c;值可以是任意类型。Map是ES6引入的新数据结构&#xff0c;用于存储键值对。Map的键可以是任意类型&#xff…

C++ 日期类的实现

目录 前言 日期类中的成员函数和成员变量 日期类中成员函数的详解和实现 1.天数前后的判断 2.天数加减的实现 3.前置 && 后置 4.计算天数差值 前言 日期类的实现将综合前面所学的&#xff08;类的6个默认成员函数&#xff09;&#xff0c;进一步理解和掌握类的…

COX预测模型过程中,我踩过的那些雷

R语言做&#xff01;初学者先进来看看&#xff01;&#xff01;&#xff01; SCI冲 COX分析&#xff1a;做临床信息与预后相关的COX分析大致都会分为两个步骤&#xff0c;先做单因素COX回归分析&#xff0c;再根据P值挑选有意义的变量&#xff0c;最终纳入COX多因素回归模型中&…

20240202在WIN10下部署faster-whisper

20240202在WIN10下部署faster-whisper 2024/2/2 12:15 前提条件&#xff0c;可以通过技术手段上外网&#xff01;^_ 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】800&#xffe5; 2、请正确安装好NVIDIA最…

SpringBoot实战项目第一天

环境搭建 后端部分需要准备&#xff1a; sql数据库 创建SpringBoot工程&#xff0c;引入对应的依赖(web\mybatis\mysql驱动) 配置文件application.yml中引入mybatis的配置信息 创建包结构&#xff0c;并准备实体类 完成今日开发后项目部分内容如下图示 用户注册于登录部分…

[BUUCTF]-PWN:mrctf2020_easy_equation解析

查看保护 再看ida 很明了&#xff0c;题目就是让我们用格式化字符串漏洞修改judge的值&#xff08;可以用python脚本进行计算&#xff0c;最终算出来得2&#xff09;使等式成立&#xff0c;然后getshell。 虽然操作比较简单&#xff0c;但我还是列出了几种方法 解法一&#x…

uni-app移动端图片预览组件 movable-area 、movable-view (支持缩放,拖动效果、替换部分代码图片可直接使用)

UniApp图片预览组件 利用uni-app官方<movable-area>、<movable-view>内置视图组件 配合 uView 组件的u-popup 弹框组件共同实现封装的图片预览组件&#xff0c;支持手指缩放、拖动效果&#xff0c;替换代码中部分图片后 可以直接使用。 效果图&#xff1a; 组件代码…

【数据结构与算法】——单链表的原理及C语言实现

数据结构与算法——链表原理及C语言实现 链表的原理链表的基本属性设计创建一个空链表链表的遍历&#xff08;显示数据&#xff09;释放链表内存空间 链表的基本操作设计&#xff08;增删改查&#xff09;链表插入节点链表删除节点链表查找节点增删改查测试程序 链表的复杂操作…

Vulnhub billu b0x

0x01 环境搭建 1. 从官方下载靶机环境&#xff0c;解压到本地&#xff0c;双击OVF文件直接导入到vmware虚拟机里面。2. 将虚拟机的网络适配器调成NAT模式&#xff0c;然后开机即可进行操作了。 0x02 主机发现 nmap -sn 192.168.2.0/24 成功获取靶机IP为192.168.2.129。 0x0…

本次安装Visual Studio 所用的安装程序不完整。请重新运行VisualStudio安装程序以解决此问题

今天点开VS的时候遇到了这个问题 因为昨天升级到一半电脑关机了&#xff0c;今天打开软件遇到如下错误&#xff0c; 解决办法很简单&#xff0c;找到安装目录进入Installer文件夹 我的目录在C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vs_installer.exe…

【python】python爱心代码

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现…

C#写个小工具,把多个word文档进行合并成一个word文档

先要安装包 帮助类WordDocumentMerger&#xff0c;用于处理word合并功能 using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; using System.Reflection; using System.IO; using System.Diagnostics;namespace WordH…