Codeforces Round 891 (Div. 3)

Array ColoringArray Coloring

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

题目要求判断是否可以将数组元素分为两种颜色,使得两种颜色元素的和具有相同的奇偶性,并且每种颜色至少有一个元素被着色。

思路分析

可以通过统计数组中奇数和偶数的个数来判断是否满足条件。分析可知,如果奇数的个数是偶数个,则一定可以满足条件。

时间复杂度

O(n)

AC代码

#include<bits/stdc++.h>
using namespace std;
void solve()
{int n;cin>>n;vector<int> a(n);int od=0,ev=0;for(int i=0;i<n;i++){cin>>a[i];if(a[i]%2) od++;else ev++;}if(od%2==0)cout<<"Yes\n";else cout<<"No\n";
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;cin>>t;while(t--)solve();return 0;
}

B. Maximum RoundingB. Maximum Rounding

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

题目要求对给定的数字进行操作,使其尽可能地大。操作规则如下:
选择一个正整数 k,并将数字 x 向第 k 位取整。
注意:位数从右往左编号,从0开始。如果数字有 k 位,则认为第 k 位上的数字为0。
取整操作如下:
如果第 (k-1) 位上的数字大于等于 5,则将第 k 位上的数字加1;否则第 k位上的数字保持不变(采用数学取整规则)。
如果操作前第 k 位上的数字为9,并且需要增加1,则需要找到一个最小的位置 k’(k’>k),使得第 k’ 位上的数字小于9,并将第 k’ 位上的数字加1。然后令 k=k’。
之后,将小于 k 的所有位替换为0。

思路分析

从右往左遍历数字,如果当前位上的数字大于等于5,则将上一位的数字加1;如果当前位上的数字为9,并且需要增加1,则向左找到一个最小的位置可以进行加1操作。最后将小于当前位的所有位替换为0。这样可以确保得到最大的数字。

时间复杂度

O(n)

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){string s;cin>>s;int p=-1;for(int i=s.size()-1;i>0;i--)if(s[i]>='5'){s[i-1]++;p=i;}if(s[0]>='5') cout<<'1',p=0;  // 如果第一位大于等于5,直接输出1for(int i=p;i<s.size();i++)  s[i]='0';cout<<s<<endl;}return 0;
}

C. Assembly via MinimumsC. Assembly via Minimums

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

Sasha有一个整数数组a,他对于所有的i和j (i<j),都写下了ai和aj的最小值,从而得到了一个新的数组b。然后他随机地打乱了数组b的元素。不幸的是,他忘记了原来的数组a,你的任务是从数组b恢复出可能的数组a。

思路分析

本题与顺序无关,a组排好序从小到大对应b组(n-1)个a[0],(n-2)个a[1],(n-3)个a[2],…
例如:b 3 3 3 5 5 7
a 3 5 7 100000
最小的a[0]在b中有n-1=4-1=3个,因为以a[0]为最小的数对有n-1个,所以在b中a有n-1个
最后一个a[i]是最大值,必须大于b中的最大值(这样b中的最大值才能成为一个数对的更小的那个),只要是数列a的最大值即可

时间复杂度

O(n2 log n)

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){int n;cin>>n;int m=n*(n-1)/2,b[m];for(int i=0;i<m;i++)cin>>b[i];sort(b,b+m); // 对数组b进行排序for(int i=0;i<m;i+=--n)cout<<b[i]<<' '; //i每次加上--n,最小的的b[0]有n-1个......cout<<"1000000000\n";}
}

D. Strong VerticesD. Strong Vertices

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

题目大意

要求找出所有的strong vertices。给定两个长度为n的数组a和b,我们需要构建一个有向图,如果对于任意的u≠v,满足au−av≥bu−bv,则存在一条从u到v的边。

思路分析(摘自官方题解)

首先将不等式变形为au−bu≥av−bv。然后我们可以定义一个新数组c,其中ci=ai−bi,这样不等式变成了cu≥cv
假设集合p1,…pm是具有最大cv的顶点v的集合。从每个pi都有一条到其他所有顶点的路径,因为cpi不小于任何其他的cu值,所以集合p一定在我们的答案中。

接下来的问题是是否还有其他顶点在我们的答案中?

我们来证明一下,对于任意不是最大值的顶点v,那么v到p中的任何顶点都没有路径。首先观察到v和任何pi之间没有边。所以路径必须经过其他顶点。但是即使存在到另一个顶点u的路径,cu仍然小于cpi,所以无法到达任何pi。
因此,我们可以得出结论,答案将始终是使cv最大化的顶点集合。

时间复杂度

O(t*n)

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int a[N],b[N];
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>b[i];int mx=INT_MIN;for(int i=1;i<=n;i++)mx=max(mx,a[i]-b[i]);int c=0;for(int i=1;i<=n;i++)c+=(a[i]-b[i]==mx);cout<<c<<"\n";for(int i=1;i<=n;i++)if(a]-b[i]==mx)cout<<i<<' ';cout<<"\n";}
}

E. Power of PointsE. Power of Points

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

给定一个包含n个点的数轴,每个点具有整数坐标。对于每个整数s,我们构造线段将s与每个点连接起来,然后计算每个整数点在这些线段中的交点数。

思路分析

首先对给定的点进行排序。然后,用两个变量s1和s2分别记录当前已遍历的点的坐标和和剩余点的坐标和。遍历每个点,更新s1和s2的值,并计算该点的幂。最后输出所有点的幂。

官方题解

在这里插入图片描述

时间复杂度

O(nlogn)

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
pair<int,int>x[N];
long long a[N];
int main()
{int t;cin>>t;while(t--){int n;cin>>n;long long s1=0,s2=0;for(int i=1;i<=n;i++){cin>>x[i].first;x[i].second=i;s2+=x[i].first;}sort(x+1,x+n+1);for(int i=1;i<=n;i++){s2-=x[i].first;s1+=x[i].first;a[x[i].second]=n+1ll*x[i].first*(2*i-n)-s1+s2;}for(int i=1;i<=n;i++)cout<<a[i]<<" \n"[i==n];}
}

F. Sum and Product

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

给定一个长度为n的数组a,以及q个查询。每个查询给定两个数x和y,要求找出满足以下条件的数组元素对(i,j)的数量:1≤i<j≤n、ai+aj=x,以及ai⋅aj=y。

思路分析

这个问题可以通过使用哈希映射和二分查找来解决。首先将数组a中的所有元素放入哈希映射中,然后对于每个查询,计算出满足条件的i和j对的数量。

  • 首先,将数组a中的所有元素放入哈希映射中。

  • 然后,对于每个查询,计算出满足ai+aj=x和aiaj=y的i和j对的数量。

  • 最后,我们输出满足条件的i和j对的数量。

官方题解

在这里插入图片描述

时间复杂度

O(n+q)

AC代码

#include<bits/stdc++.h>
using namespace std;
map<long long,int>cnt;
long long my_sqrt(long long a)
{long long l=0,r=5000000001;while(r-l>1){long long mid=(l+r)/2;if(1ll*mid*mid<=a)l=mid;else r=mid;}return l;
}
long long get(int b,long long c)
{long long D=1ll*b*b-4ll*c;if(D<0)return 0;long long x1=(b-my_sqrt(D))/2;long long x2=(b+my_sqrt(D))/2;if(x1+x2!=b||x1*x2!=c)return 0;if(x1==x2)return 1ll*cnt[x1]*(cnt[x1]-1)/2ll;else return 1ll*cnt[x1]*cnt[x2];
}
int main()
{int t;cin>>t;while(t--){int n;cin>>n;cnt.clear();for(int i=1;i<=n;i++){int x;cin>>x;cnt[x]++;}int q;cin>>q;for(int i=0;i<q;i++){int b;long long c;cin>>b>>c;cout<<get(b,c)<<" \n"[i==q-1];}}
}

G. Counting GraphsG. Counting Graphs

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

要求计算满足一定条件的不同图形的数量。给定一棵由n个顶点组成的树,树的每条边都有一个权重wi。需要找出满足以下条件的不同图形的数量:
1.图形没有自循环和多条边。
2.图中边的权重为整数,且不超过S。
3.该图有一棵最小生成树。
4.该图的最小生成树是给定的树。

思路分析

可以使用Kruskal算法来构建最小生成树,并计算满足条件的图形的数量。

  • 首先,读取整数t,表示有t个测试用例。对于每个测试用例,读取整数n和S,分别表示树的顶点数和权重的上限。接下来,使用一个for循环读取每个边的信息,并将边按照权重从小到大进行排序。
  • 然后,初始化并查集p和sz,并将每个顶点初始化为一个独立的连通分量。使用另一个for循环遍历每条边,将当前边的两个顶点所在的连通分量合并,并计算满足条件的图形的数量。
  • 在合并连通分量的过程中,可以使用并查集来快速查找每个顶点所属的连通分量的领导节点。同时,还需要维护每个连通分量的大小sz。
  • 为了计算满足条件的图形的数量,可以使用幂运算binpow来求解。对于每条边a[i],假设当前边连接的两个连通分量的大小分别为sub_u和sub_v,那么符合条件的图形的数量为(S-a[i].w+1)^(sub_u*sub_v-1),将这个结果乘到ans上。
  • 最后,输出ans即为满足条件的不同图形的数量。

官方题解

在这里插入图片描述

时间复杂度

O(nlogn)

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 200000, mod = 998244353;
int p[N + 1], sz[N + 1];struct edge
{int u, v, w;void read() { cin >> u >> v >> w; } // 读取边的信息bool operator<(edge x) { return w < x.w; } // 按照边的权重进行排序
} a[N + 1];int leader(int v)
{if (p[v] == v)return v;elsereturn p[v] = leader(p[v]);
}void unite(int u, int v)
{u = leader(u);v = leader(v);p[u] = v; // 合并两个连通分量sz[v] += sz[u]; // 更新连通分量的大小
}long long binpow(long long a, long long n)
{if (n == 0)return 1;if (n % 2 == 0)return binpow(a * a % mod, n / 2);elsereturn a * binpow(a, n - 1) % mod; // 幂运算
}int main()
{int t;cin >> t;while (t--){int n, S;cin >> n >> S;for (int i = 1; i <= n; i++)p[i] = i, sz[i] = 1; // 初始化并查集和连通分量大小for (int i = 0; i < n - 1; i++)a[i].read(); // 读取边的信息sort(a, a + n - 1); // 按照权重排序long long ans = 1;for (int i = 0; i < n - 1; i++){int sub_u = sz[leader(a[i].u)];int sub_v = sz[leader(a[i].v)];ans = ans * binpow(S - a[i].w + 1, 1ll * sub_u * sub_v - 1) % mod; // 计算满足条件的图形的数量unite(a[i].u, a[i].v); // 合并连通分量}cout << ans << "\n";}return 0;
}

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

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

相关文章

适用HarmonyOS 3.1版本及以上的应用及服务开发工具 DevEco Studio 3.1.1 Release 安装

文章目录 安装步骤1.下载安装包2.安装成功后&#xff0c;初次运行studio2.1 配置node与ohpm的环境2.2安装sdk2.3等待安装结束 3.创建项目3.1 点击Create Project3.2 选择一个空项目3.3 项目配置3.4 Finish、等待依赖下载完毕3.5 项目创建完成 tip 提示4.配置运行环境4.1 真机运…

信号平滑或移动平均滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

springboot人事管理系统设计与实现

126springboot人事管理系统java web员工信息管理系统 人事管理系统&#xff0c;属于ERP的一个部分。它单指汇集成功企业先进的人力资源管理理念、人力资源管理实践、人力资源信息化系统建设的经验&#xff0c;以信息技术实现对企业人力资源信息的高度集成化管理&#xff0c;为…

ppt压缩文件怎么压缩最小?文件压缩技巧分享

在日常的工作和学习中&#xff0c;难免会遇到PPT太大&#xff0c;需要将其压缩变小的情况&#xff0c;但很多朋友还不知道怎么压缩PPT文件&#xff0c;下面就给大家分享几个简单的方法&#xff0c;分分钟缩小过大的PPT文件。 一、PowerPoint PowerPoint就是微软公司的演示文稿…

一、MySql前置知识

文章目录 一、什么是数据库&#xff08;一&#xff09;存储数据用文件就可以了&#xff0c;为什么还要弄个数据库?&#xff08;二&#xff09;数据库存储介质&#xff1a;&#xff08;三&#xff09;主流数据库 二、数据库基本操作&#xff08;一&#xff09;连接服务器&#…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询 子查询的查询条件不依赖于父查询&#xff0c;称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询&#xff0c;称为 相关子…

数据结构刷题训练——链表篇(三)

目录 文章目录 前言 1. 题目一&#xff1a;环形链表Ⅱ 1.1 思路 1.2 分析 1.3 题解 1.4 方法二 2. 题目二&#xff1a;复制带随机指针的链表 2.1 思路 2.2 分析 2.3 题解 总结 前言 在这个专栏博客中&#xff0c;我们将提供丰富的题目资源和解题思路&#xff0c;帮助读者逐步提…

Flutter(八)事件处理与通知

1.原始指针事件处理 一次完整的事件分为三个阶段&#xff1a;手指按下、手指移动、和手指抬起&#xff0c;而更高级别的手势&#xff08;如点击、双击、拖动等&#xff09;都是基于这些原始事件的。 Listener 组件 Flutter中可以使用Listener来监听原始触摸事件 Listener({…

The Sandbox 与 D.OASIS 联手打造 D.OASIS 城市

我们非常高兴地宣布与 D.OASIS 建立合作伙伴关系&#xff0c;共同打造无与伦比的娱乐体验&#xff1a;The Sandbox 中的 D.OASIS 城市&#xff01; 作为合作的一部分&#xff0c;The Sandbox 和D.OASIS将共同打造 D.OASIS 城市&#xff0c;一座充满无限可能的大都市&#xff0…

TDengine + Telegraf + Grafana 实现图形化服务器状态监控

TDengine Telegraf Grafana 实现图形化服务器状态监控 技术栈环境搭建安装tdenginue下载安装包解压文件运行安装文件启动td运行 taosAdapter 安装Telegraf添加yum源安装生成配置文件修改配置文件启动telegraf 安装Grafana直接yum安装安装td数据源配置启动Grafana配置数据源导…

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…

安卓:MMKV——键值存储库

目录 一、MMKV介绍 1.特点和优势&#xff1a; 2.使用指南&#xff1a; 3.依赖包&#xff1a; 二、MMKV的常用方法 1、初始化和获取实例&#xff1a; 2、存储数据&#xff1a; 3、读取数据 4、删除数据 5、其他操作&#xff1a; 三、MMKV的使用例子 MainActivity&#xff…

文件上传漏洞(webshell)

一、防护 1、防护 1、判断文件后缀&#xff0c;为图片的话才让上传成功。 2、解析文件内容&#xff08;文件幻数&#xff09;判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮&#xff08;带上code唯一值&#xff09; 4、二次渲染&#xff08;类似拿着你的图片&#xff…

super父类 事物

一个没有事物的方法。 调用他的父类里有事物的方法。 无论this 和 super 都会让父类事物方法没有事物。 如果写了super.class 文件里面&#xff0c;就是super调用。 如果没写&#xff0c;就是this调用&#xff0c;坑爹 测试&#xff0c;把父类注入&#xff0c;事物才生效。

kubeasz在线安装K8S集群单master

1.基础系统配置 确保在干净的系统上开始安装&#xff0c;不能使用曾经装过kubeadm或其他k8s发行版的环境 系统是Ubuntu 或者CentOS 7 2.下载文件 2.1 下载工具脚本ezdown&#xff0c;举例使用kubeasz版本3.5.0 #此版本默认安装的是 K8S v1.26.0 export release3.5.0 wget h…

[免费在线] 将 PDF 转换为 Excel 或 Excel 转换为 PDF | 5 工具

有了免费的在线 PDF 转换器&#xff0c;您可以轻松免费在线将 PDF 转换为 Excel 或 Excel 转换为 PDF。这篇文章为您筛选了 5 个最常用的工具。要从存储介质恢复错误删除或丢失的 PDF 文档、Excel 电子表格、Word 文件或任何其他文件&#xff0c;您可以使用免费的数据恢复程序 …

DOM基础获取元素+事件基础+操作元素

一.DOM简介 DOM&#xff0c;全称“Document Object Model&#xff08;文档对象模型&#xff09;”&#xff0c;它是由W3C定义的一个标准。 在实际开发中&#xff0c;我们有时候需要实现鼠标移到某个元素上面时就改变颜色&#xff0c;或者动态添加元素或者删除元素等。其实这些效…

Python爬虫(八)_Requests的使用

Requests&#xff1a;让HTTP服务人类 虽然Python的标准库中urllib2模块中已经包含了平常我们使用的大多数功能&#xff0c;但是它的API使用起来让人感觉不太好&#xff0c;而Requests自称"HTTP for Humans"&#xff0c;说明使用更简单方便。 Requests唯一的一个非转…

一周 AIGC 丨苹果下架多款 AIGC 应用,阿里云开源通义千问 70 亿参数模型

多个 AIGC 应用在苹果应用商店下架&#xff0c;包含数据采集和使用不够规范等问题。阿里云开源通义千问 70 亿参数模型&#xff0c;包括通用模型 Qwen-7 B 和对话模型 Qwen-7 B-Chat。腾讯混元大模型开始应用内测&#xff0c;内部多个业务线接入测试。百度智能云“千帆大模型平…

【PostgreSQL内核学习(十一)—— OpenGauss源码学习(CopyTo)】

可优化语句执行 概述什么是列存储&#xff1f;列存的优势 相关函数CopyToCStoreCopyToCopyStatetupleDescCStoreScanDesc CStoreBeginScanRelationSnapshotProjectionInfo GetCStoreNextBatchRunScanFillVecBatchCStoreIsEndScan CStoreEndScan 声明&#xff1a;本文的部分内容…