B. Shrinking Array/縮小數組

B. Shrinking Array

讓我們稱一個數組?b?為?i?美麗?,如果它至少包含兩個元素,并且存在一個位置?|bi?bi+1|≤1?使得?|x|?(其中?x?是 #10# #11# 的絕對值)。

給定一個數組?a?,只要它至少包含兩個元素,你就可以執行以下操作:

  1. 選擇數組?a?中的兩個相鄰位置?i?和?i+1?。
  2. 選擇一個整數?x?使得?min(ai,ai+1)≤x≤max(ai,ai+1)?。
  3. 從數組中移除數字?ai?和?ai+1?,并將數字?x?插入它們的位置。顯然,數組的大小將減少?1?。

計算使數組變得美麗所需的最少操作次數,或者報告不可能。

輸入

第一行包含一個整數?t?(?1≤t≤200?) — 測試用例的數量。

每個測試用例的第一行包含一個整數?n?(?2≤n≤1000?) — 數組?a?的大小。

每個測試用例的第二行包含?n?個整數?a1,a2,…,an?(?1≤ai≤106?) — 數組?a?本身。

輸出

對于每個測試用例,輸出一個整數—使數組?a?變得美麗所需的操作最小數量,或者如果不可能使其變得美麗,則輸出??1?。

示例
輸入
復制
4
4
1 3 3 7
2
6 9
4
3 1 3 7
4
1 3 5 2
輸出
復制
0
-1
1
1
注意

在第一個測試用例中,給定的數組已經是美麗的,因為?|a2?a3|=|3?3|=0?。

在第二個測試用例中,不可能使數組變得美麗,因為應用操作會使其大小減少到少于兩個。

在第三個測試用例中,例如,你可以選擇?a1?和?a2?并將它們替換為數字?2?。得到的數組?[2,3,7]?是美麗的。

在第四個測試用例中,例如,你可以選擇?a2?和?a3?并將它們替換為數字?3?。得到的結果數組?[1,3,2]?是漂亮的。

思路:

其實有點差分的思想在

1.當相鄰的值為-1,0,1時,直接成立

2.當差分的值為全正/全負且不存在在第一種情況,不成立

3.剩余情況是成立的,然后找最小的可能(存在的可能只在差為正負的交界處);因為時間夠,所有我純暴力,

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int t, n, a[1003], b[1003];
int main(){ios::sync_with_stdio(false);        // 禁用同步cin.tie(nullptr);                   // 解除cin與cout綁定cin >> t;while (t--) {cin >> n;b[0] = 0;bool pan = false;int fu = 0, zhen = 0;for (int i = 1; i <= n; i++) {cin >> a[i];b[i] = a[i] - a[i - 1];if (i != 1 && (b[i] == 1 || b[i] == 0 || b[i] == -1)) {pan = true;}if (i != 1 && !pan && b[i] > 0) {zhen++;}else if (i != 1 && !pan && b[i] < 0) {fu++;}}if (pan) {cout << 0 << endl;}else if (zhen == 0 || fu == 0) {cout << -1 << endl;}else {int MAX_sum = INT_MAX;for (int i = 2; i <= n; i++) {int sum = i;for (int j = i + 1; j <= n; j++) {if (b[i] > 0) {sum += b[j] < 0 ? b[j] : 0;if (sum <= 1) {MAX_sum = MAX_sum < j - i ? MAX_sum : j - i;}}else {sum += b[j] > 0 ? b[j] : 0;if (sum >= -1) {MAX_sum = MAX_sum < j - i ? MAX_sum : j - i;}}}}if (MAX_sum == INT_MAX) {cout << -1 << endl;}else {cout << MAX_sum << endl;}}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87964.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【學習筆記】Linux系統中SSH服務安全配置

一、背景知識 以ubuntu為例&#xff0c;查看ssh服務是否安全并配置&#xff0c;執行 ssh -V ssh的配置文件路徑&#xff1a;/etc/ssh/sshd_config 二、SSH服務配置文件 1.端口和監聽設置 Port 22 含義&#xff1a;指定SSH服務監聽的端口號&#xff08;默認是22&#xff09…

FastAPI + Tortoise-ORM + Aerich 實現數據庫遷移管理(MySQL 實踐)

在 FastAPI 項目中&#xff0c;Tortoise-ORM 是一個輕量的異步 ORM 框架&#xff0c;適用于 async/await 場景。結合數據庫遷移工具 Aerich&#xff0c;可以優雅地管理數據庫表結構演進&#xff0c;本文將通過完整流程演示如何在 MySQL 環境下使用。&#x1f4e6; 一、環境準備…

7.7日 實驗03-Spark批處理開發(2)

使用Spark處理數據文件檢查數據檢查$DATA_EXERCISE/activations里的數據&#xff0c;每個XML文件包含了客戶在指定月份活躍的設備數據。拷貝數據到HDFS的/dw目錄樣本數據示例&#xff1a;<activations><activation timestamp"1225499258" type"phone&q…

C語言可變參數感悟

#include <stdio.h> #include <stdarg.h> #if 1 /* *在C語言中&#xff0c;可變參函數是指參數數量不固定的函數&#xff0c;比如printf\scanf *可變參函數的語法&#xff1a; *返回類型 函數名&#xff08;固定函數&#xff0c;.....) { //函數體 } *1、包含頭文件…

LeetCode 1248.統計優美子數組

給你一個整數數組 nums 和一個整數 k。如果某個連續子數組中恰好有 k 個奇數數字&#xff0c;我們就認為這個子數組是「優美子數組」。 請返回這個數組中 「優美子數組」 的數目。 示例 1&#xff1a; 輸入&#xff1a;nums [1,1,2,1,1], k 3 輸出&#xff1a;2 解釋&#xf…

FastAPI Docker環境管理腳本使用指南

作者: 源滾滾AI編程 創建時間: 2025年07月08日 版本: v1.0.0 文檔狀態: 完成 版權聲明 本文檔由源滾滾AI編程創作,版權所有。未經作者書面許可,不得復制、分發或用于商業用途。 免責聲明 本文檔僅用于技術交流和學習目的。作者不對使用本文檔內容導致的任何問題承擔責任。…

前端常見 HTTP 狀態碼

作為前端開發者&#xff0c;與后端 API 交互時&#xff0c;HTTP 狀態碼是判斷請求成敗的關鍵信號。理解常見狀態碼的含義、責任歸屬及應對策略&#xff0c;能極大提升調試效率和團隊協作。以下是關鍵狀態碼的詳細解析&#xff1a; 首先說一下如何查看狀態碼&#xff1a; 如上圖…

深度解析C語言內存函數(小米面試題)

目錄 一、memcpy1.1 代碼演示1.2 memcpy的模擬實現 二、memmove2.1 代碼演示2.2 模擬實現&#xff08;小米面試題&#xff09; 三、memset3.1 代碼演示3.2 總結 四、memcmp4.1 代碼演示4.2 總結 總結 一、memcpy &#xff08;memory copy 內存復制&#xff09; 之前文章中寫的…

DK124反激式開關電源芯片

18W 高性能交直流轉換芯片 特性 DK124 是一款離線式開關電源芯片&#xff0c;最大輸出功率達到 24W。內部集成了 PWM 控制器、700V 功率管和初級峰值電流檢測電路&#xff0c;并采用了可以省略輔助供電繞組的專利自供電技術&#xff0c;極大簡化了外圍應用電路&#xff0c;減…

商品銷售數據分析實驗

進入虛擬機&#xff0c;啟動HDFS和Yarn1.創建表 hive show databases; use test;銷售訂單表create table t_dml (detail_id bigint,sale_date date, province string,city string,product_id bigint,cnt bigint,amt double )row format delimited fields terminated by ,;商品…

PH熱榜 | 2025-07-08

1. TensorBlock Forge 標語&#xff1a;人工智能模型的API 介紹&#xff1a;Forge是一個快速且安全的工具&#xff0c;讓你可以跨不同供應商連接和運行AI模型 產品網站&#xff1a; 立即訪問 Product Hunt&#xff1a; View on Product Hunt 票數&#xff1a; &#x1f53a…

2025-01)electronjs-v11.2.0升級到新版本electronjs-v37.2.0記錄,node版本記錄,淘寶鏡像配置記錄,升級記錄

背景:由于22年使用electronjs開發的自助機客戶端幾年沒去維護,現在有需求要修改,電腦也換新了,node環境也沒,直接把electron從 之前的 11.2.0 版本 升級到了37.2.0版本,升級最主要的目的是升級谷歌瀏覽器內核,升級后谷歌瀏覽器內核直接從87升級到了138,可以支持谷歌最新…

iQOO手機怎樣相互遠程控制?其他手機可以遠程控制iQOO嗎?

iQOO是Vivo同一品牌下的產品&#xff0c;它們兩款手機都可以使用手機內置的遠程控制功能。具體做法是&#xff0c;打開控制端的iQOO手機的【設置】【快捷與輔助】、【遠程協助】&#xff0c;然后輸入被控端的電話號碼&#xff0c;等被控端的手機接受遠程協助后&#xff0c;就可…

【入門級-C++程序設計:3、程序基本語句-多層循環語句】

1、定義&#xff1a; 在 C 中&#xff0c;多層循環&#xff08;嵌套循環&#xff09;是指在一個循環體內包含另一個或多個循環語句。它常用于處理多維數據結構&#xff08;如二維數組&#xff09;、復雜的迭代邏輯&#xff08;如矩陣運算、圖形打印、組合遍歷等&#xff09;。多…

四、jenkins自動構建和設置郵箱

一、jenkins自動構建什么自動構建、有啥用&#xff1a;觸發方式代碼提交&#xff08;Git push&#xff09;定時任務&#xff08;如每天凌晨構建&#xff09;手動點擊等方式&#xff08;立即執行&#xff09;執行內容從 Git/SVN 拉取最新代碼運行編譯&#xff08;如 Maven/Gradl…

【深度學習新浪潮】深入解析LLM關鍵概念:架構、優化與最新研究進展

1. Transformer架構與注意力機制 概念解析 Transformer是LLM的核心架構,由編碼器和解碼器組成,其核心創新是自注意力機制,通過計算輸入序列中每個位置的關聯權重,動態聚焦關鍵信息。自注意力機制的計算復雜度為O(n),在處理長序列時成為性能瓶頸。 代碼示例:基礎Transfo…

RAGflow圖像解析與向量化分析

RAGflow圖像解析與向量化分析 注:需要提前部署好ragflow,才方便一 一對應代碼,部署教程:rag部署教程,這樣才會方便后續更改 1. 圖像解析流程 RAGflow通過多種解析器處理不同類型的文檔,其中圖像解析是一個重要組成部分。以下是RAGflow處理圖像的主要流程: 1.1 PDF文…

千翼破界,百景賦能 | 2025深圳eVTOL展無人機場景應用專場即將啟幕

在技術革新、應用深化、產業鏈協同升級及低空空域管理改革等多重政策紅利驅動下&#xff0c;我國工業級無人機產業正邁入爆發式增長新階段&#xff0c;持續引領民用無人機市場繁榮。數據顯示&#xff0c;2019 至2024年&#xff0c;我國民用無人機市場規模從435.1億元躍升至1108…

Go語言標識符命名規則詳解:工程化實踐

引言 Go語言的命名規則是其簡潔哲學和工程實用性的集中體現。下面從語法規范、最佳實踐到實際應用進行全面解析&#xff1a; 一、基礎命名規則 1. 變量命名 // 小駝峰式&#xff08;lowerCamelCase&#xff09; var userName string var maxRetryCount 3 var isConnected bool…

RISC-V:開源芯浪潮下的技術突圍與職業新賽道 (一)為什么RISC-V是顛覆性創新?

第一篇&#xff1a;開篇&#xff1a;為什么RISC-V是顛覆性創新&#xff1f; 打破70年架構壟斷&#xff0c;開源硬件如何重塑芯片產業規則&#xff1f;一、傳統架構的“圍城之困”&#xff08;痛點切入&#xff09; ARM/X86的統治代價 授權費暴利模型 &#xff1a; ARM指令集授權…