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

Codeforces Round 895 (Div. 3) A ~ F

Dashboard - Codeforces Round 895 (Div. 3) - Codeforces

A

问多少次能使a 和 b相等,就是abs(a - b) / 2除c向上取整,也就是abs(a - b)除2c向上取整。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;void solve()
{int a, b, c;cin >> a >> b >> c;a = abs(a - b), c *= 2;cout << (a + c - 1) / c << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

真是一篇好阅读理解,读了好久

就是说陷阱会在踩到后经过s秒触发,触发后不能通过,最少往前走d + s / 2(向上取整)格子后就回不来了,把所有的d + s / 2比较取最小值然后减一就是答案。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;void solve()
{int n;cin >> n;int ans = 2e9;for(int i = 0; i < n; i ++){int a, b;cin >> a >> b;a = a + (b + 1) / 2;ans = min(ans, a);}cout << ans - 1 << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

 C

如果是>2的偶数的话,x - 2和x就是一组解

如果l == r且l是奇数的话,可以求l的因子,设因子为d,x - d 和 d 都可以被d整除,这样也可以求出一组解

之后注意一些边界条件就好了。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;void solve()
{int l, r;cin >> l >> r;if(r < 4){cout << -1 << endl;return;}if(r % 2 && l == r){for(int i = 2; i * i <= l; i ++){if(l % i == 0){cout << l - i << ' ' << i << endl;return;}}cout << -1 << endl;return;}if(r % 2){cout << r - 3 << ' ' << 2 << endl;}else cout << r - 2 << ' ' << 2 << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

 贪心。

设lcm为x和y的最大公倍数,lcm的倍数的位置有重合,先加后减等于零,在这里操作是没意义的。

加操作有意义的点的数量:n / x - n / lcm

减操作有意义的点的数量:n / y - n / lcm

加的话从n开始加,依次递减n-1、n-2这样

减的话从1开始加,依次递增2、3这样。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;void solve()
{ll n, x, y;cin >> n >> x >> y;ll gcd = __gcd(x, y);ll lcm = x * y / gcd;ll a = n / x - n / lcm, b = n / y - n / lcm;a = a * (2 * n - a + 1) / 2;b = b * (b + 1) / 2;cout << a - b << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

E

 前缀和。

 做出这道题需要了解的两个性质:

1. x ^ x = 0;

2. 0 ^ x = x;

根据这两条性质我们就可以求出任意一段连续区间的异或和,使用前缀数组实现,用b[]表示

b[n]表示从第一项异或到第n项

b[r] ^ b[l - 1]就等于 b[l - 1] ^ b[l] ^ ... ^ b[r] ^ b[l - 1] = b[l] ^ ... ^ b[r];

 对于第一个操作,区间修改,如果一个数x的对应位置上的树为1,被修改后变成0,就相当于x没被启用,变成0了,就相当于异或x本身,

如果一个数x的对应位置上的树为0,被修改后变成1,就相当于x被启用了,变成了1,也相当于异或x本身。

先用一个ans计算出被启用的数的异或和,之后每进行一次区间修改就相当于异或一遍这个区间内的异或和,非常的easy。

然后第二个操作,如果是查1,直接输出ans就好了

如果是查2,输出前n项异或前缀和异或ans就好了

听说有人线段树过了,挺nb的,之后再学一学。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;const int N = 100010;int a[N], b[N];void solve()
{int n;cin >> n;for(int i = 1; i <= n; i ++){cin >> a[i];b[i] = b[i - 1] ^ a[i]; }string s;cin >> s;s = ' ' + s;int ans = 0;for(int i = 1; i <= n; i ++){if(s[i] == '1'){ans ^= a[i];}}int Q;cin >> Q;while(Q --){int op;cin >> op;if(op == 1){int l, r;cin >> l >> r;int res = b[r] ^ b[l - 1];ans ^= res;}else{int x;cin >> x;if(x == 1)cout << ans << ' ';else cout << (b[n] ^ ans) << ' ';}}cout << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

赛后学的线段树做法:

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;const int N = 100010;int n;
int a[N];
string s;
struct Node
{int l, r;int sum0, sum1;int f;
}tr[N * 4];void pushup(int u)
{tr[u].sum0 = tr[u << 1].sum0 ^ tr[u << 1 | 1].sum0;tr[u].sum1 = tr[u << 1].sum1 ^ tr[u << 1 | 1].sum1;
}void pushdown(int u)
{Node &root = tr[u], &left = tr[u << 1], &right = tr[u << 1 | 1];if(tr[u].f){swap(left.sum0, left.sum1);swap(right.sum0, right.sum1);left.f ^= tr[u].f;right.f ^= tr[u].f;tr[u].f = 0;}
}void build(int u, int l, int r)
{if(l == r){if(s[l] == '0')tr[u] = {l, r, a[l], 0, 0};else tr[u] = {l, r, 0, a[l], 0};}else{tr[u] = {l, r, 0, 0, 0};int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);pushup(u);}
}void modify(int u, int l, int r)
{if(tr[u].l >= l && tr[u].r <= r){swap(tr[u].sum0, tr[u].sum1);tr[u].f ^= 1;}else{pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid)modify(u << 1, l, r);if(r > mid)modify(u << 1 | 1, l, r);pushup(u);}
}void solve()
{cin >> n;for(int i = 1; i <= n; i ++)cin >> a[i];cin >> s;s = ' ' + s;build(1, 1, n);int Q;cin >> Q;while(Q --){int op;cin >> op;if(op == 1){int l, r;cin >> l >> r;modify(1, l, r);}else{int x;cin >> x;if(x == 0)cout << tr[1].sum0 << ' ';else cout << tr[1].sum1 << ' ';}}cout << endl;
}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

Node节点存两个值sum0和sum1,f作为懒标记。

F

i在要a[i]之前被卖出,其实就是拓扑排序,先输出没在环中的点,然后每个环中,值最小的那个点最后卖出一定是最优的,类似贪心。

其实我在想如果一个点同时出现在两个环中该怎么办,然后发现这种情况其实不存在

比如

如果一个点出现在多个环中,边数会比点数还多,因为又要求每个点的出度都为1,所以这种情况显然是与输入要求矛盾的,所以一个点一定最多出现在一个环内,证毕。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;const int N = 100010;int n;
int h[N], e[N], ne[N], idx;
int d[N];
int a[N], b[N];
bool st[N];
vector<int> ans;
queue<int> q;void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}void bfs()
{while(q.size()){int t = q.front();q.pop();ans.push_back(t);for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(st[j])continue;d[j] --;if(!d[j]){q.push(j);st[j] = true;}}}
}void solve()
{idx = 0;ans.clear();cin >> n;priority_queue<PII, vector<PII>, greater<PII>> heap;for(int i = 1; i <= n; i ++)d[i] = 0;for(int i = 1; i <= n; i ++){st[i] = false;h[i] = -1;cin >> a[i];add(i, a[i]);d[a[i]] ++;}for(int i = 1; i <= n; i ++){cin >> b[i];heap.push({b[i], i});if(!d[i]){st[i] = true;q.push(i);}}bfs();while(ans.size() < n){int ver;while(heap.size()){PII t = heap.top();heap.pop();if(!st[t.second]){ver = t.second;break;}}st[ver] = true;for(int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if(st[j])continue;d[j] --;if(!d[j]){q.push(j);st[j] = true;}}bfs();ans.push_back(ver);}for(int i = 0; i < n; i ++)cout << ans[i] << ' ';cout << endl;}int main()
{IOSint _;cin >> _;while(_ --){solve();}return 0;
}

相关文章:

Codeforces Round 895 (Div. 3) A ~ F

Dashboard - Codeforces Round 895 (Div. 3) - Codeforces A 问多少次能使a 和 b相等&#xff0c;就是abs(a - b) / 2除c向上取整&#xff0c;也就是abs(a - b)除2c向上取整。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #de…...

【前端知识】Axios——请求拦截器模板

Axios——请求拦截器模板 Axios是一个基于Promise的HTTP客户端&#xff0c;用于发送HTTP请求。它可以在浏览器和Node.js环境中使用&#xff0c;并且提供了许多强大的功能&#xff0c;例如拦截请求和响应、转换请求和响应数据、取消请求等。 Axios具有简单易用的API&#xff0c;…...

企业架构LNMP学习笔记16

基于IP的访问控制&#xff1a; 基于ngx_http_access_module模块&#xff0c;默认可使用。 语法是&#xff1a; deny ip 禁止IP访问 allow ip 允许IP访问 上面是允许的&#xff0c;下面是deny的。 老师建议写在server段中是比较合适的。 基于用户的访问控制&#xff1a; …...

redis实现消息队列

背景 消息队列&#xff08;Message Queue&#xff09;是一种常见的软件架构模式&#xff0c;用于在分布式系统中传递和处理异步消息。它解耦了发送消息的应用程序和接收消息的应用程序之间的直接依赖关系&#xff0c;使得消息的发送者和接收者可以独立地演化和扩展。 消息队列…...

JVM指令集

概述 JVM&#xff0c;Java Virtual Machine&#xff0c;Java虚拟机器&#xff0c;作为一台独立的机器&#xff0c;一般包括独立的指令集、独立的存储体系以及适合机器自身的运算方式&#xff0c;本章节主要是描述JVM指令的功能与作用。 JVM的每个指令的格式是【指令 操作数1操…...

如何用SSH克隆GitHub项目

诸神缄默不语-个人CSDN博文目录 使用场景&#xff1a;由于不可知的网络问题&#xff0c;无法用HTTPS克隆GitHub项目。 报错fatal: unable to access https://github.com/PolarisRisingWar/llm-throught-ages.git/: GnuTLS recv error (-110): The TLS connection was non-pro…...

sqlx库使用指南

sqlx库使用指南 在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子&#xff0c;介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go…...

算法篇汇总

文章浏览 I https://leetcode.cn/problems/article-views-i/description/?envTypestudy-plan-v2&envId30-days-of-pandas&langpythondata 我的题解&#xff1a; import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:dfviews[views[auth…...

typeScript 学习笔记(二)

类接口 TypeScript 入门教程 (xcatliu.com) 十四.类 ① 类 类&#xff1a;定义了一件事物的抽象特点&#xff0c;包含它的属性和方法对象&#xff1a;类的实例&#xff0c;通过new生成面向对象&#xff08;OOP&#xff09;的三大特性&#xff1a;封装、继承、多态封装&…...

redis集群架构详解

一、集群架构搭建 1、配置 在一台机器上模拟多台机器搭建redis集群&#xff0c;一个集群代表一台物理机 集群1路径&#xff1a; /usr/local/redis/redis-cluster/cluster1/9001/redis.conf/usr/local/redis/redis-cluster/cluster1/9004/redis.conf/usr/local/redis/redis-…...

nodejs设置镜像

1、npm镜像地址配置 -- 查看 npm 安装目录 npm root -g-- 查看 npm 配置信息 npm config list-- 查询当前镜像配置 npm get registry-- 或者仅修改 npm 命令镜像 -- 设置为淘宝镜像 npm config set registry https://registry.npmmirror.com -- 修改为官方镜像 npm config set…...

CSS中如何在table中隐藏表格中从第4个开始的多个 <tr> 元素

隐藏指定行 使用 CSS 的 nth-child 选择器来选择表格中的特定行&#xff0c;并隐藏它们。 以下是一个示例 CSS 规则&#xff0c;用于隐藏表格中的第 4 个和第 5 个行&#xff08;索引从 1 开始&#xff09;&#xff1a; table tr:nth-child(4), table tr:nth-child(5) {displ…...

【类和对象】③友元类

文章目录 1.初始化列表2.static静态成员3.友元 1.初始化列表 我们知道在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。虽然调用构造函数之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成…...

算法通关村第十六关:黄金挑战:滑动窗口与堆结合

黄金挑战&#xff1a;滑动窗口与堆结合 堆的大小一般是有限的&#xff0c;能直接返回当前位置下的最大值或者最小值 该特征与滑动窗口结合&#xff0c;可以解决一些特定场景的问题 1. 滑动窗口与堆问题的结合 LeetCode239 https://leetcode.cn/problems/sliding-window-maxi…...

6.2.2 【MySQL】InnoDB中的索引方案

上边之所以称为一个简易的索引方案&#xff0c;是因为我们为了在根据主键值进行查找时使用二分法快速定位具体的目录项而假设所有目录项都可以在物理存储器上连续存储&#xff0c;但是这样做有几个问题&#xff1a; InnoDB 是使用页来作为管理存储空间的基本单位&#xff0c;也…...

划片机实现装片、对准、切割、清洗到卸片的自动化操作

划片机是一种用于切割和分离材料的设备&#xff0c;通常用于光学和医疗、IC、QFN、DFN、半导体集成电路、GPP/LED氮化镓等芯片分立器件、LED封装、光通讯器件、声表器件、MEMS等行业。划片机可以实现从装片、对准、切割、清洗到卸片的自动化操作。 以下是划片机实现这些操作的步…...

OpenCV(二十五):边缘检测(一)

目录 1.边缘检测原理 2.Sobel算子边缘检测 3.Scharr算子边缘检测 4.两种算子的生成getDerivKernels() 1.边缘检测原理 其原理是基于图像中灰度值的变化来捕捉图像中的边界和轮廓。梯度则表示了图像中像素强度变化的强弱和方向。 所以沿梯度方向找到有最大梯度值的像素&…...

上行取消指示 DCI format 2_4

上篇介绍了DCI format 2_1的DL传输中断的内容&#xff0c;这篇就看下DCI format 2_4有关的UL 传输取消机制&#xff0c;值得注意的是这里的UL传输针对的是PUSCH和SRS传输。 UL cancellation DCI format 2_4相关机制引入的背景与DCI format 2_1一样&#xff0c;都是因为URLLC和e…...

百望云蝉联2023「Cloud 100 China 」榜单 综合实力再获认可

9月7日&#xff0c;2023 Cloud 100 China 榜单于上海中心正式发布&#xff0c;榜单由靖亚资本与崔牛会联合推出&#xff0c;百望云凭借着过硬的综合实力与卓越的技术创新能力&#xff0c;再次荣登榜单&#xff0c;位居第六位。 本届评选&#xff0c;Top 100 企业的数据指标的权…...

力扣刷题班第1节:Python语法常遗漏的知识

以下仅仅记录和后面力扣刷题相关的、且平常会遗漏的语法知识。 下面这些笔记都是点到为止&#xff0c;不进行深入解释。大多数学过python的朋友看到就知道什么意思的&#xff0c;我就不解释了 字符串 str "I am a cook"# 按照空格切分 str.split(" ") …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...