【题解】CF28B pSort
时间:2021-08-10
本文章向大家介绍【题解】CF28B pSort,主要包括【题解】CF28B pSort使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第一道完全自己想+做出来的一道绿题!!!!!!心情大好( ,写篇题解记录一下qwq
接下来进入正题。
涉及的知识点:并查集
思路:
-
一些数组,变量的定义:
表示 位置 $i$ 的祖先。(注意这里说的是“位置”)
$dis_i$ 表示可以移动的距离,也就是题目中的 $d$ 数组。
$goal1_i$ 表示目标数列。 -
如何判断位置为 $i$ 的数可不可以移动到 $j$ 位置上:如果这两个位置的祖先相同就可以。也就是说 $f_i$ 和 $f_j$ 的祖先相同就可以。
find(j) == find(i)
<— 这个就是判断祖先相同的代码 -
什么时候,怎么将两个位置合并:如果位置 i 可以移动到位置 j 上(用 dis 数组判断),就将 $f_i$ 和 $f_j$ 合并。(注意考虑出界问题)
这一部分的代码↓
int x,y;
x = i+dis[i];
y = i-dis[i];
if(x <= n){
f[find(x)] = find(i);
}
if(y >= 1){
f[find(y)] = find(i);
}
好了,思路差不多了,接下来就放一下代码qwq
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n;
int goal1[10009];//目标序列
int dis[10009];
int f[100009];//f[i] 表示位置 i 的祖先
void init(){
for(int i=0; i<1000; i++)f[i] = i;
}
int find(int k){//路径压缩
if(f[k] == k)return k;
return f[k] = find(f[k]);
}
int main(){
init();//初始化
cin >> n;
for(int i=1; i<=n; i++){
cin >> goal1[i];
}
for(int i=1; i<=n; i++){
cin >> dis[i];
int x,y;
x = i+dis[i];
y = i-dis[i];
if(x <= n){//不出界再合并
f[find(x)] = find(i);
}
if(y >= 1){//不出界再合并
f[find(y)] = find(i);
}
}
for(int i=1; i<=n; i++){
int j = goal1[i];
if(find(j) != find(i)){
cout << "NO";
return 0;//只要有一个不行(移动不到目标位置)就输出 "NO"
}
}
//成功运行到了最后,说明初始数列所有位置上的数都可以移动到目标位置,那就输出 "YES"
cout << "YES";
return 0;
}
(自我感觉马蜂应该不错qwq 可读性比较高qwq)
最后,如果有什么问题欢迎指出!
原文地址:https://www.cnblogs.com/Jiayn/p/15123323.html
- 机器学习在智能制造中的应用!
- sql2008 附加数据库时 错误5123
- Logistic Regression Models分析交互式问答译
- 照虎画猫写自己的Spring——依赖注入
- Logistic Regression Models分析交互式问答译
- Asp.Net开发等级星使用(Jquery Rating)
- Enterprise Library Policy Injection Application Block 之四:如何控制CallHandler的执行顺序
- 人工智能时代的艺术
- asp.net生成静态页
- Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成
- 照虎画猫写自己的Spring
- 照虎画猫写自己的Spring
- mybatis 框架实战,实现数据库的增删改查
- CodeSmith 创建Ado.Net自定义模版(一)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GitHub 标星过万!计算机与网络知识总结电子书下载!
- 盘一盘,那些提效/创意的 vscode 插件
- 基于jenkins实现手动拉取码云代码,实现半自动化部署
- so easy!网页骨架屏自动生成方案(dps)
- 深夜,我偷听到程序员要对session下手……
- CAM 系列论文阅读总结
- kafka客户端指标上报Prometheus方案(已开源)
- 2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】...
- R语言在BRFSS数据中可视化分析探索糖尿病的影响因素
- R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风
- R语言对BRFSS数据探索回归数据分析
- 使用R语言创建自定义桑基图Sankey图
- 在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
- R语言中的偏最小二乘回归PLS-DA
- R语言实现偏最小二乘回归法 partial least squares (PLS)回归