1455D. Sequence and Swaps(思維)
這個好像思維難度蠻低的…
因為不論怎麼交換 x x x的值,只要進去換了,必定會有一個原陣列 a a a內的元素出來
由於 n n n不大我們果斷列舉那個出來的元素,然後把 x x x加入進去
那麼對這個新的陣列 b b b排序
現在的任務就是如果把 a a a陣列變成 b b b
然後注意到 x x x的交換條件是 a i > x a_i>x ai>x
所以必然是從前往後判斷,若 a i = = b i a_i==b_i ai==bi忽略就行
若 a i ! = b i a_i!=b_i ai!=bi必定要交換 x x x和 a i a_i ai
此時需要滿足 a i > x a_i>x ai>x且 x > = a i − 1 x>=a_i-1 x>=ai−1
因為需要滿足遞增而且能交換
這樣就很簡單了
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int n,m,a[maxn],x,b[maxn],k;
int main()
{
int t; cin >> t;
while( t-- )
{
cin >> n >> k;
int ans = 1e9,ok=1;
for(int i=1;i<=n;i++)
{
cin >> a[i];
if( a[i]<a[i-1] ) ok=0;
}
if( ok ){ cout << 0 << endl; continue; }
for(int i=1;i<=n;i++)
{
b[i]=k;
for(int j=1;j<=n;j++)
if( j!=i ) b[j]=a[j];
sort( b+1,b+1+n );//最終的序列
int temp = 0,now = k,flag=1;
for(int j=1;j<=n;j++)
{
if( a[j]==b[j] ) continue;
else//不相等要交換
{
if( a[j]<=now ) flag=0;//要交換卻反而不能交換
else//可以交換啊
{
temp++;
if( b[j-1]>now ) flag = 0;//需要保證交換後是大於之前的數字的
now = a[j];
}
}
if( flag == 0 ) break;
}
if( flag ) ans = min( ans,temp );
}
if( ans==1e9 ) ans=-1;
cout << ans << endl;
}
}
相關文章
- CF1455 D. Sequence and Swaps(模擬)
- Educational Codeforces Round 99 (Rated for Div. 2)D. Sequence and Swaps
- Educational Codeforces Round 99 (Rated for Div. 2) D. Sequence and Swaps(貪心)
- HDU 6274 Master of Sequence(思維+樹狀陣列+二分)AST陣列
- 思維體系---技術思維、業務資料思維、產品思維、複合思維
- A. Jagged Swaps
- 淺析工具思維、產品思維、品牌思維與定位
- 求職思維和招聘思維求職
- 把流量思維變成留量思維
- 框架思維框架
- 極思維
- 黑客思維黑客
- sequence to sequence模型模型
- 你是整體思維還是分析思維? - kentbeck
- 計算思維
- 模型思維(01)模型
- 提升思維邏輯—SimpleMind Pro(思維導圖) for Mac/winMac
- 什麼是產品思維和專案思維? - Shreyas
- 《計算思維史話》思維導圖——持續更新
- 創新思維框架:第一原則思維 - Neil Kakkar框架
- 英語思維與物件導向分析思維的關係物件
- 運維工程師思維導圖運維工程師
- typora思維導圖
- 技術思維2
- 前端思維導圖前端
- Java思維理清思路Java
- HDU – 4811 – Ball (思維)
- 程式碼之外系列第一:索證思維與索進思維
- Xmind使用教程:給思維導圖加水印 「Xmind思維導圖2023」
- 思維決定命運,從四個方面理解深度思維的概念
- 什麼是Actor思維?
- 觀潮思維導圖
- 程式設計師思維程式設計師
- 思維導圖Xmind 2022
- 前端思維導圖 8前端
- B. Numbers Box(思維)
- 英語?思維導圖?
- Bob in Wonderland(思維+構造)