思维训练(数论 + 哈希表 + 贪心)

传送门:Dashboard - Codeforces Round 950 (Div. 3) - Codeforces

B. Choosing Cubes(排序)

Dmitry has n cubes, numbered from left to right from 1 to n. The cube with index f is his favorite.

Dmitry threw all the cubes on the table, and the i-th cube showed the value ai (1≤ai≤100). After that, he arranged the cubes in non-increasing order of their values, from largest to smallest. If two cubes show the same value, they can go in any order.

After sorting, Dmitry removed the first k cubes. Then he became interested in whether he removed his favorite cube (note that its position could have changed after sorting).

For example, if n=5, f=2, a=[4,3,3,2,3] (the favorite cube is highlighted in green), and k=2, the following could have happened:

  • After sorting a=[4,3,3,3,2], since the favorite cube ended up in the second position, it will be removed.
  • After sorting a=[4,3,3,3,2], since the favorite cube ended up in the third position, it will not be removed.

Input

The first line contains an integer t (1≤t≤1000) — the number of test cases. Then follow the descriptions of the test cases.

The first line of each test case description contains three integers n, f, and k (1≤f,k≤n≤100) — the number of cubes, the index of Dmitry's favorite cube, and the number of removed cubes, respectively.

The second line of each test case description contains nn integers ai (1≤ai≤100) — the values shown on the cubes.

Output

For each test case, output one line — "YES" if the cube will be removed in all cases, "NO" if it will not be removed in any case, "MAYBE" if it may be either removed or left.

You can output the answer in any case. For example, the strings "YES", "nO", "mAyBe" will be accepted as answers.

题意翻译

Dimtry 有 n 个立方体,第 i 个立方体的价值为 ai​,他最喜欢第 f 个立方体。

接下来 Dimtry 会把立方体按 a 从大到小排序(价值相同的立方体顺序任意),使得排完序后 a 单调不增,并且拿走此时的前 k 个立方体。

现在给定 n,f,k,{a1,a2,⋯ ,an}(保证 1≤f,k≤n≤100,1≤ai≤100),试判断 Dimtry 喜欢的(即原来的第 f 个)立方体是否会被拿走。

如果在所有情况下都会被拿走,输出“YES”。

如果在所有情况下都不会被拿走,输出“NO”。

如果在所有情况下,有可能被拿走,有可能不被拿走,输出“MAYBE”。

本题单个测试点存在多组测试数据,保证测试数据组数 t 不超过 1000。

输入输出样例

输入 #1复制

12
5 2 2
4 3 3 2 3
5 5 3
4 2 1 3 5
5 5 2
5 2 4 1 3
5 5 5
1 2 5 4 3
5 5 4
3 1 2 4 5
5 5 5
4 3 2 1 5
6 5 3
1 2 3 1 2 3
10 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1
42
5 2 3
2 2 1 1 2
2 1 1
2 1
5 3 1
3 3 2 3 2

输出 #1复制

MAYBE
YES
NO
YES
YES
YES
MAYBE
MAYBE
YES
YES
YES
NO

思路

一般这种输出yes、no、maybe只有三种格式的其实不需要考虑所有的情况,只需要考虑好判断的情况就行了,就比如这道题我们只判断yes和no的情况剩下的就都是maybe了

题目的意思很明确了就是问能不能拿到a[f].定义x = a[f],把a数组降序排序,如果a[k] < a[f],那么一定能拿到,如果a[k] > a[f] 或者a[k] == a[f] 并且a[k + 1] < a[f]那么就一定拿不到,剩余的情况就输出maybe即可

代码

#include <iostream>
#include <algorithm>using namespace std;const int N = 110;
int a[N];int t;
int n,f,k;bool cmp(int A,int B){return A > B;
}void solve()
{cin >> n >> f >> k;for(int i = 1;i <= n;i ++) cin >> a[i];int x = a[f];sort(a + 1, a + n + 1, cmp);if(a[k] > x) cout << "No" << endl;else if(a[k] < x || (a[k] == x && a[k + 1] < x) || k == n) cout << "Yes" << endl;else cout << "Maybe" << endl;
}int main()
{cin >> t;while(t --){solve();}return 0;
}

C. Sofia and the Lost Operations (思维题)

Sofia had an array of n integers a1,a2,…,an. One day she got bored with it, so she decided to sequentially apply m modification operations to it.

Each modification operation is described by a pair of numbers 〈cj,dj〉 and means that the element of the array with index cj should be assigned the value dj, i.e., perform the assignment acj=dj. After applying all modification operations sequentially, Sofia discarded the resulting array.

Recently, you found an array of n integers b1,b2,…,bn. You are interested in whether this array is Sofia's array. You know the values of the original array, as well as the values d1,d2,…,dm. The values c1,c2,…,cm turned out to be lost.

Is there a sequence c1,c2,…,cm such that the sequential application of modification operations 〈c1,d1,〉,〈c2,d2,〉,…,〈cm,dm〉 to the array a1,a2,…,an transforms it into the array b1,b2,…,bn?

Input

The first line contains an integer t (1≤t≤10^4) — the number of test cases.

Then follow the descriptions of the test cases.

The first line of each test case contains an integer n (1≤n≤2⋅10^5) — the size of the array.

The second line of each test case contains n integers a1,a2,…,an (1≤ai≤10^9) — the elements of the original array.

The third line of each test case contains n integers b1,b2,…,bn (1≤bi≤10^9) — the elements of the found array.

The fourth line contains an integer m (1≤m≤2⋅10^5) — the number of modification operations.

The fifth line contains m integers d1,d2,…,dm(1≤dj≤10^9) — the preserved value for each modification operation.

It is guaranteed that the sum of the values of n for all test cases does not exceed 2⋅10^5, similarly the sum of the values of m for all test cases does not exceed 2⋅10^5.

Output

Output t lines, each of which is the answer to the corresponding test case. As an answer, output "YES" if there exists a suitable sequence c1,c2,…,cm, and "NO" otherwise.

You can output the answer in any case (for example, the strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive answer).

题意翻译

索菲亚有一个包含n 个整数的数组a[1],a[2],…,a[n]。有一天她对这个数组感到厌倦,于是决定顺序地对其应用m 个修改操作。

每个修改操作由一对数字〈cj,dj〉 描述,意味着数组中索引为c[j]c[j] 的元素应该被赋值为d[j] ,即执行赋值a[c[j]]=d[j] 。在所有修改操作顺序应用后,索菲亚丢弃了结果数组。

最近,你找到了一个包含n 个整数的数组b[1],b[2],…,b[n] 。你想知道这个数组是否是索菲亚的数组。你知道原始数组的值,以及值d[1],d[2],…,d[m]。值c[1],c[2],…,c[m] 被证明丢失了。

是否存在一个序列c[1],c[2],…,c[m],使得将修改操作顺序应用到数组a[1],a[2],…,a[n] 上〈c[1],d[1],〉,〈c[2],d[2],〉,…,〈c[m],d[m]〉 ,将其转换为数组b[1],b[2],…,b[n] ?

输入 第一行包含一个整数t(1≤t≤10^4 )— 测试用例的数量。

然后是每个测试用例的描述。

每个测试用例的第一行包含一个整数n (1≤n≤2⋅10^5)— 数组的大小。

每个测试用例的第二行包含n 个整数a[1],a[2],…,a[n](1≤ai≤10^9 )— 原始数组的元素。

每个测试用例的第三行包含n 个整数b[1],b[2],…,b[n](1≤bi≤10^9 )— 找到的数组的元素。

第四行包含一个整数m (1≤m≤2⋅10^5 )— 修改操作的数量。

第五行包含m 个整数d[1],d[2],…,d[m](1≤dj≤10^9 )— 每个修改操作的保留值。

保证所有测试用例的n 值的总和不超过2⋅10^5 ,同样保证所有测试用例的m 值的总和不超过2⋅10^5。

输出

输出 t 行,每行是对应测试用例的答案。作为答案,如果存在一个合适的序列c[1],c[2],…,c[m],则输出"YES",否则输出"NO"。

你可以以任何形式输出答案(例如,字符串"yEs"、"yes"、"Yes"和"YES"都将被视为肯定答案)。

输入输出样例

输入 #1复制

7
3
1 2 1
1 3 2
4
1 3 1 2
4
1 2 3 5
2 1 3 5
2
2 3
5
7 6 1 10 10
3 6 1 11 11
3
4 3 11
4
3 1 7 8
2 2 7 10
5
10 3 2 2 1
5
5 7 1 7 9
4 10 1 2 9
8
1 1 9 8 7 2 10 4
4
1000000000 203 203 203
203 1000000000 203 1000000000
2
203 1000000000
1
1
1
5
1 3 4 5 1

输出 #1复制

YES
NO
NO
NO
YES
NO
YES

思路

这题就属于想到就出结果,想不到就想不到了。首先容易得出的结论就是:把a与b不同的元素记录下来,如果d当中没有可替补的或者替补数量不够的,那么就一定不成立。那这道题的难点就是边界的考虑了,也就是d数组的最后一个值。一定要联想到最后一个因为最后一个之后就不会在替换了,也就是说最后一个值必须是有效值,否则替换之后变成无效值了,而且之后也没有值在替换他。

条件都总结清楚了,代码实现一下就行

代码

#include <iostream>
#include <algorithm>
#include <map>#define ll long longusing namespace std;const int N = 2e5 + 10;
int a[N],b[N],d[N];int t;
int n,m;void solve()
{map<int,int> st,mp,mp1;cin >> n;for(int i = 0;i < n;i ++) cin >> a[i];for(int i = 0;i < n;i ++){cin >> b[i];mp1[b[i]] ++;if(a[i] == b[i]) continue;st[b[i]] ++;}cin >> m;for(int i = 0;i < m;i ++){cin >> d[i];mp[d[i]] ++;}bool check = true;for(auto [x,y] : st){if(mp.find(x) == mp.end() || mp[x] < y){check = false;break;}}int x = d[m - 1];if(!check || mp1.find(x) == mp1.end()){cout << "No" << endl;return;}cout << "Yes" << endl;
}int main()
{cin >> t;while(t --){solve();}return 0;
}

E. Permutation of Rows and Columns(思维题)

You have been given a matrix aa of size n by m, containing a permutation of integers from 1 to n⋅m.

A permutation of n integers is an array containing all numbers from 1 to n exactly once. For example, the arrays [1], [2,1,3] ,[5,4,3,2,1] are permutations, while the arrays[1,1],[100], [1,2,4,5] are not.

A matrix contains a permutation if, when all its elements are written out, the resulting array is a permutation. Matrices [[1,2],[3,4]], [[1]], [[1,5,3],[2,6,4]]contain permutations, while matrices [[2]], [[1,1],[2,2]], [[1,2],[100,200]] do not.

You can perform one of the following two actions in one operation:

  • choose columns cc and dd (1≤c,d≤m, c≠d) and swap these columns;
  • choose rows cc and dd (1≤c,d≤n, c≠d) and swap these rows.

You can perform any number of operations.

You are given the original matrix aa and the matrix bb. Your task is to determine whether it is possible to transform matrix aa into matrix bb using the given operations.

Input

The first line contains an integer t (1≤t≤10^4) — the number of test cases. The descriptions of the test cases follow.

The first line of each test case description contains 2 integers n and m (1≤n,m≤n⋅m≤2⋅10^5) — the sizes of the matrix.

The next n lines contain m integers aij each (1≤aij≤n⋅m). It is guaranteed that matrix a is a permutation.

The next n lines contain m integers bij each (1≤bij≤n⋅m). It is guaranteed that matrix b is a permutation.

It is guaranteed that the sum of the values n⋅mn⋅m for all test cases does not exceed 2⋅10^5

Output

For each test case, output "YES" if the second matrix can be obtained from the first, and "NO" otherwise.

You can output each letter in any case (lowercase or uppercase). For example, the strings "yEs", "yes", "Yes", and "YES" will be accepted as a positive answer.

题意翻译

给你 1 个 n×m 矩阵,里面元素构成排列,你可以交换任意一列任意一行,求任意次操作后两个矩阵能否相同。

输入输出样例

输入 #1复制

7
1 1
1
1
2 2
1 2
3 4
4 3
2 1
2 2
1 2
3 4
4 3
1 2
3 4
1 5 9 6
12 10 4 8
7 11 3 2
1 5 9 6
12 10 4 8
7 11 3 2
3 3
1 5 9
6 4 2
3 8 7
9 5 1
2 4 6
7 8 3
2 3
1 2 6
5 4 3
6 1 2
3 4 5
1 5
5 1 2 3 4
4 2 5 1 3

输出 #1复制

YES
YES
NO
YES
YES
NO
YES

思路

这种题目想到就想到了,想不到就想不到,所以要多刷题。开始的时候确实不知道要怎么做,一般拿到判断的题目不要从小的方面判断,去从小的方面找规律推出全局的规律。这道题的规律就是,把行列存哈希表,如果行列没有不一样的元素说明一定能成立

代码

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>using namespace std;int t;
int n,m;void solve()
{cin >> n >> m;vector<vector<int>> a(n,vector<int>(m,0));vector<vector<int>> b(n,vector<int>(m,0));for(int i = 0;i < n;i ++){for(int j = 0;j < m;j ++){cin >> a[i][j];}}for(int i = 0;i < n;i ++){for(int j = 0;j < m;j ++){cin >> b[i][j];}}map<vector<int>,int> row1,row2,col1,col2;for(int i = 0;i < n;i ++){vector<int> A(a[i].begin(),a[i].end());vector<int> B(b[i].begin(),b[i].end());sort(A.begin(),A.end());sort(B.begin(),B.end());row1[A] ++, row2[B] ++;}for(int i = 0;i < m;i ++){vector<int> A,B;for(int j = 0;j < n;j ++){A.push_back(a[j][i]);B.push_back(b[j][i]);}sort(A.begin(),A.end());sort(B.begin(),B.end());col1[A] ++, col2[B] ++;}bool check = true;for(auto [arr,w] : row1){if(row2[arr] != w){check = false;break;}}if(!check){cout << "No" << endl;return;}for(auto [arr,w] : col1){if(col2[arr] != w){check = false;break;}}if(check) cout << "Yes" << endl;else cout << "No" << endl;
}int main()
{cin >> t;while(t --){solve();}return 0;
}

加油

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

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

相关文章

【HarmonyOS】HMRouter使用详解(四)路由拦截

路由拦截器 可以对指定或全局路由跳转时添加拦截器&#xff0c;作用是可以实现在页面切换前做判断是否有进入当前页面的权限。这篇文章将实现登录的全局路由拦截样式。 新建拦截器类 通过继承IHMInterceptor接口实现生命周期接口的方法重写。 通过添加HMInterceptor装饰器&…

xss之dom类型

目录 xss关于dom类型 1、闭合方式 2、闭合&#xff0c;直接输入1&#xff0c;成功闭合 上我们的pikachu xss关于dom类型 1、闭合方式 输入123&#xff0c;然后打开f12&#xff0c;审查元素&#xff0c;之前一直没有搞懂为什么要在前面加上个单引号 输入两个双引号&#x…

[C语言] 函数详解:库函数与自定义函数

文章目录 函数的概念库函数和自定义函数库函数使用库函数示例常用库函数及头文件 自定义函数自定义函数的基本结构示例&#xff1a;实现两个数的求和函数自定义函数的好处 函数的返回值有返回值的函数无返回值的函数 函数的声明与调用声明函数在另一个文件中调用函数示例&#…

【永磁同步电机(PMSM)】 9. 滑模观测器(SMO)的算法与仿真

【永磁同步电机&#xff08;PMSM&#xff09;】 滑模观测器&#xff08;SMO&#xff09;的算法与仿真 1. 滑模观测器的基本原理2. 滑模观测器的数学模型2.1 PMSM 的数学模型2.2 滑模观测器的设计 3. 基于反正切&#xff08;ATAN&#xff09;的滑模观测器3.1 反正切函数3.2 基于…

使用aloam跑hesai Pandar-XT32激光雷达数据

参考自利用aloam跑数据集_aloam数据集-CSDN博客 第一步&#xff1a;查看bag的信息 输入rosbag info来查看bag包的信息&#xff1a; joeyjoey-Legion-Y7000P-IRX9:~$ rosbag info /home/joey/Downloads/data2022/indoor/LiDAR_IMU.bag path: /home/joey/Downloads/da…

在 Qt 中实现可拖动的无边框 MainWindow 并设置圆角效果

在应用程序的界面设计中,很多时候我们希望窗口能够拥有更好的视觉效果,比如设置圆角以及去除默认的标题栏,使窗口看起来更加美观。此外,还需要支持用户通过鼠标拖动窗口。在本文中,我们将详细介绍如何在 Qt 中实现这些效果。 如图: 一、设置无边框窗口 Qt 提供了 Qt::F…

游离的 HEAD 如何解决

简介 问题描述&#xff1a;使用 IDEA 在提交代码时&#xff0c;禁止提交 如何解决&#xff1a;迁出分支再提交&#xff0c;最后合并到 main 或 master 上 如何解决

kali在git外网的代理

如果发现用git无法直接连接到某些外网项目。可以配置一下代理。 vi /etc/proxychains4.conf 主机可以开一下机场代理&#xff0c;查一下主机的地址和代理所开的端口&#xff0c;我这里是7890 写上代码&#xff1a; socks5 <your ip> <your port> 写上之后wq保…

鸢尾花书实践和知识记录[6-23数据聚类]

文章目录 思维导图数据聚类和引例基于图论的聚类算法算法流程1构造数据构造距离矩阵相似度相似度矩阵创建图 拉普拉斯矩阵标准拉普拉斯矩阵(Combinatorial Laplacian)归一化拉普拉斯矩阵 (Normalized Laplacian)无标度拉普拉斯矩阵 (Signless Laplacian)归一化对称拉普拉斯矩阵…

C++入门基础知识107—【关于C++continue 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C continue 语句的相关内容&#xff01;…

【Node.js】图片水印

上传时加水印 用户上传原始图片->服务器&#xff1a;保留原始图片以及水印图片动态水印 用户上传原始图片->服务器&#xff1a;只保留原始图片 请求图片时&#xff0c;服务器动态加水印 根据业务需求自行更改操作&#xff0c;下面只讲最简单的给图片加水印。 主要使用到…

【Vue3实战】:用导航守卫拦截未保存的编辑,提升用户体验

前言 在Vue3应用中&#xff0c;用户可能会在一个页面上进行数据编辑&#xff0c;如填写表单或修改表格中的数据。当用户在未保存更改的情况下尝试离开当前页面时&#xff0c;我们希望能够弹出提示框&#xff0c;告知用户有未保存的更改&#xff0c;并询问是否确定离开。 一、使…

MySQL事务日志—redo日志介绍

MySQL事务日志—redo日志 事务有4种特性&#xff1a; 原子性、一致性、隔离性和持久性。 那么事务的四种特性到底是基于什么机制实现? 事务的原子性、一致性由事务的 undo 日志事务的隔离性由锁机制和MVCC实现。事务的持久性由redo 日志来保证。 两类日志概述&#xff1a;…

【大数据】Hive快速入门

文章目录 概述一、Hive的基本概念二、Hive的架构与组件三、Hive的特点与优势四、Hive的应用场景五、Hive的官方网站与资源 驱动说明&#xff08;Driver&#xff09;一、主要功能二、与其他组件的交互三、工作流程四、重要性 元数据模型(Metastore)一、Hive元数据模型的基本概念…

vue3 + vite + cesium项目

GitHub - tingyuxuan2302/cesium-vue3-vite: 项目基于 vue3 vite cesium&#xff0c;已实现常见三维动画场&#xff0c;欢迎有兴趣的同学加入共建&#xff0c;官网服务器相对拉胯&#xff0c;请耐心等候...https://github.com/tingyuxuan2302/cesium-vue3-vite/tree/github

HTMLCSS练习

1) 效果如下 2) 代码如下 2.1) HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conte…

Ultralytics:YOLO11使用教程

Ultralytics&#xff1a;YOLO11使用教程 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows YOLO11使用教程进行目标检测进行实例分割进行姿势估计进行旋转框检测进行图像分类 参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多…

一文解读数据中台附搭建指南

数据是企业的核心资产&#xff0c;更是企业数字化转型的关键驱动力。为了更好地管理和利用数据&#xff0c;进行数据共享&#xff0c;充分发挥数据的作用&#xff0c;越来越多的企业开始构建实时数据中台。 一数据中台 定义&#xff1a;数据中台是将企业内部各个部门、系统、应…

Qt 自绘开关按钮以及设计器中的提升为用法

文章目录 自绘按钮实现概要效果图代码 提升为用法介绍步骤 总结 自绘按钮实现 概要 当我们需要一个开关样式的QPushbutton&#xff0c;没有图片的话&#xff0c;我们可以采用自绘的形式实现。且使用QtDesinger中提升为Promote to的功能加入界面中&#xff0c;而不是使用代码的…

OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个滑动条并将其附加到指定的窗口。 该函数 createTrackbar 创建一个具有指定名称和范围的滑动条&#xff08;滑块或范围控制&#xff09;…