当前位置: 首页 > 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;即便提前恶补了…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...