D. Sequence and Swaps(思维)

2023-10-21 20:59
文章标签 思维 sequence swaps

本文主要是介绍D. Sequence and Swaps(思维),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem - 1455D - Codeforces

 

你的任务是使该序列排序(如果条件a1≤a2≤a3≤⋯≤an成立,它就被认为是排序的)。

为了使序列排序,你可以执行以下操作的任何次数(可能是零):选择一个整数i,使1≤i≤n且ai>x,并交换ai和x的值。

例如,如果a=[0,2,3,5,4],x=1,就可以进行以下操作序列。

选择i=2(这是可能的,因为a2>x),那么a=[0,1,3,5,4],x=2。
选择i=3(因为a3>x,所以有可能),然后a=[0,1,2,5,4],x=3。
选择i=4(因为a4>x,所以有可能),然后a=[0,1,2,3,4],x=5。
计算你必须执行的最小操作数,以使a成为排序的,或者报告说这是不可能的。

输入
第一行包含一个整数t(1≤t≤500)--测试案例的数量。

每个测试用例由两行组成。第一行包含两个整数n和x(1≤n≤500,0≤x≤500)--序列中元素的数量和x的初始值。

第二行包含n个整数a1,a2,...,an(0≤ai≤500)。

在输入的所有测试案例中,n的值之和不超过500。

输出
对于每个测试案例,打印一个整数--你必须执行的最小操作数,如果不可能,则打印-1。

例子
inputCopy
6
4 1
2 3 5 4
5 6
1 1 3 4 4
1 10
2
2 10
11 9
2 10
12 11
5 18
81 324 218 413 324
输出拷贝

3

0

0

-1

1

3

题解:
由于n的范围很小我们可以考虑暴力的方法,通过观察我们发现,如果出现a[i] > a[i+1]

如果可以修改结果就会变为a[i] = a[i-1] a[i-1] = a[i-2] .... a[i-k] = x

x = a[i]

x是在不断变大的,我们只需要模拟这个过程即可,并且每次check是否为非降序排列

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define int long long
int a[505];
int n,x;
int check()
{for(int i = 2;i <= n;i++){if(a[i] < a[i-1]){return 0;}}return 1;
}
void solve()
{
//	int n,x;cin >> n >> x;for(int i = 1;i <= n;i++){cin >> a[i];}if(check()){cout<<"0\n";return ;}int ans = 0;for(int i = 1;i <= n;i ++){if(a[i] > x){swap(a[i],x);ans++;}if(check()){cout<<ans<<"\n";return ;}}cout<<"-1\n";}
signed main()
{int t = 1;cin >> t;while(t--){solve();}
}

这篇关于D. Sequence and Swaps(思维)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256935

相关文章

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

【UVA】1626-Brackets sequence(动态规划)

一道算是比较难理解的动规。 状态转移分2个: (用d[i][j]表示在i~j内最少需要添加几个括号,保持平衡) 1.如果s[i]和s[j]是一对括号,那么d[i][j] = d[i + 1][j - 1] 2.否则的话 d[i][j] = min(d[i][k],[k + 1][j]); 边界是d[i + 1][i] = 0; d[i][i] = 1; 13993644 162

【UVA】10534 - Wavio Sequence(LIS最长上升子序列)

这题一看10000的数据量就知道必须用nlog(n)的时间复杂度。 所以特意去看了最长上升子序列的nlog(n)的算法。 如果有2个位置,该位置上的元素为A[i]和A[j],并且他们满足以下条件: 1.dp[i] = dp[j]    (dp[x]代表以x结尾的最长上升子序列长度) 2.A[i] < A[j] 3.i < j 那么毫无疑问,选择dp[i] 一定优于选择dp[j] 那么

2015年多校联合训练第一场OO’s Sequence(hdu5288)

题意:给定一个长度为n的序列,规定f(l,r)是对于l,r范围内的某个数字a[i],都不能找到一个对应的j使得a[i]%a[j]=0,那么l,r内有多少个i,f(l,r)就是几。问所有f(l,r)的总和是多少。 公式中给出的区间,也就是所有存在的区间。 思路:直接枚举每一个数字,对于这个数字,如果这个数字是合法的i,那么向左能扩展的最大长度是多少,向右能扩展的最大长度是多少,那么i为合法的情况

0906作业+思维导图梳理

一、作业: 1、创捷一个类似于qq登录的界面 1)源代码 #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//QPushbutton:登录、退出this->join = new QP

[机缘参悟-222] - 系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进(软件系统、思维方式、亲密关系、企业系统、商业价值链、中国社会、全球)

目录 前言:系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进 一、软件系统的重构 1、重构的定义与目的 2、重构的时机与方法 3、重构的注意事项 4、重构的案例分析 二、大脑思维的重构 1、大脑思维重构的定义 2、大脑思维重构的方法 3、大脑思维重构的挑战与前景 三、认知的重构 1、定义 2、目的 3、方法 四、实例 五、总结 四、婚姻家庭的重构 1、婚

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

散户炒股票为什么进步慢,学习程序化交易思维

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取股票实时数据和历史数据 Python炒股自动化(3):分析取回的实时数据和历史数据 Python炒股自动化(4):通过接口向交易所发送订单 Python炒股自动化(5):通过接口查询订单,查询账户资产 散户炒股的常见难题

NYOJ 763 Vawio Sequence

OJ题目 : 戳这里~ 描述 Vawio Sequence is very funny,it is a sequence of integers. It has some interesting properties. ·   Vawio is of odd length i.e. L = 2*n + 1. ·  The first (n+1) integers of  Vawio s