Codeforces Round 1040 (Div. 2)(補題)

文章目錄

  • 前言
  • A.Submission is All You Need
  • B. Pathless
  • C.Double Perspective
  • D.Stay or Mirror

前言

又被卡在第二題了,當時腦子跟犯糊涂似的,B題越理越亂,導致比賽結束,還在想著題,徹夜難眠!


A.Submission is All You Need

Submission is All You Need
題目大意:
在這里插入圖片描述
操作:
在這里插入圖片描述
思路:只需要統計0的個數就行了,有多少個0就加上多少個1
由于mex的特性,以及操作時的特點,只要把0變成1就行,
代碼:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s[N];
ll sum[N];
void slove()
{ll n;cin>>n;ll f=0;for(ll i=1;i<=n;i++){cin>>s[i];sum[i]=s[i]+sum[i-1];if(s[i]==0)f++;}cout<<sum[n]+f<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

B. Pathless

Pathless
在這里插入圖片描述
思路;
對于這一題是有規律的
如果a1,a2,…,an的和sum
1.如果sum>s;
則一定不會滿足條件,這時只需要按原數組輸出就行
2.sum==s
這種是一定會滿足的直接輸出-1;
3.s>sum
如果s-sum=1,可以通過先0后2再1的順序輸出
這樣可以使得往返之后的額外增加的數,不管如何都不會湊成1
如果大于1,這一種不管如何排列,總會找到相鄰的數進行往返,以此來湊齊多出的數
因為相鄰數對的和可以通過線性組合覆蓋所有大于1的數
代碼:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s1[N];
void slove()
{ll n,s;cin>>n>>s;ll sum=0;ll a1=0,b1=0,c1=0;for(ll i=1;i<=n;i++){cin>>s1[i];if(s1[i]==0)a1++;else if(s1[i]==1)b1++;elsec1++;sum+=s1[i];}if(sum>s){for(ll i=1;i<=n;i++)cout<<s1[i]<<" ";cout<<endl;}else{if(sum==s){cout<<-1<<endl;}else{s=s-sum;if(s==1){for(ll i=1;i<=a1;i++)cout<<0<<" ";for(ll i=1;i<=c1;i++)cout<<2<<" ";for(ll i=1;i<=b1;i++)cout<<1<<" ";cout<<endl;return ;}cout<<-1<<endl;}}
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

C.Double Perspective

Double Perspective
在這里插入圖片描述
其中主要的意思就是
f(s)代表的是在數軸上兩點之間距離之和
就比如(1,2)(2, 3)(3,4)其f(s)就是3;
而g(s)
則代表的是成環的長度,此時ai與bi是一條無向邊
就比如(1,2)(2,4)(1,4)此時成環,即g(s)=3;
了解完這些之后就是然后找到f(s)-g(s)的最大值
其實很簡單,只需要把成環的邊去掉,則剩下的集合就是最大的
代碼:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e6+10;
ll k;
ll s[N];
ll h[N];
void in()//初始化
{for(ll i=1;i<=2*k;i++){s[i]=i;h[i]=0;}
}
ll find(ll x)//查找根節點
{ll r=x;while(r!=s[r])r=s[r];ll i=x,j;while(i!=j){j=s[i];s[i]=r;i=j;}return r;
}
void mset(ll l,ll r)//合并
{l=find(l);r=find(r);if(l==r)return ;if(h[l]<h[r]){s[l]=r;}else{if(h[l]==h[r])h[r]++;s[r]=l;}return ;
}
void slove()
{cin>>k;in();vector<ll> p;for(ll i=1;i<=k;i++){ll l,r;cin>>l>>r;l=find(l);r=find(r);if(l!=r)//如果不成環,相當于把成環的跳過了{mset(l,r);p.push_back(i);}}cout<<p.size()<<endl;for(auto i:p)cout<<i<<" ";cout<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

D.Stay or Mirror

Stay or Mirror
在這里插入圖片描述
題目的意思就是尋找逆序對的,就是這個條件在這里插入圖片描述
通過這個操作
在這里插入圖片描述能否使逆序對最小化。
注意:
在這里插入圖片描述

當然這一題利用的貪心策略:
對于每個元素 p [i],計算兩種選擇(保留原值或選擇 2n-p [i])分別會產生的逆序數貢獻,然后選擇貢獻較小的那個
對于數組中的每個元素 p [i],代碼計算兩個值:
l:在 p [i] 之前(j < i)且比 p [i] 大的元素數量
r:在 p [i] 之后(j > i)且比 p [i] 大的元素數量
為什么這樣計算?
當選擇保留 p [i] 時,它會與前面所有比它大的元素形成逆序對,貢獻為 L
當選擇 2n-p [i] 時,由于 2n-p [i] 的值較大(對于排列中的元素),它不會與前面的元素形成逆序對,而是會與后面比它小的元素形成逆序對。而后面比 p [i] 大的元素數量 R,恰好等于后面比 2n-p [i] 小的元素數量(因為 2n-p [i] 較大)
因此,對于每個元素,取 min (L, R) 作為它對總逆序數的最小貢獻,累加后得到最終結果。
代碼:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e4+10;
ll s[N];
void slove()
{ll n;cin>>n;for(ll i=1;i<=n;i++){cin>>s[i];}ll ans=0;for(ll i=1;i<=n;i++){ll l=0,r=0;for(ll j=1;j<=i;j++)//保留是s[i];if(s[j]>s[i])l++;for(ll j=i+1;j<=n;j++)//選擇2n-s[i];if(s[j]>s[i])r++;ans+=min(l,r);//取其貢獻最小的累加到答案}cout<<ans<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

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

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

相關文章

Apifox 7 月更新|通過 AI 命名參數及檢測接口規范、在線文檔支持自定義 CSS 和 JavaScript、鑒權能力升級

Apifox 新版本上線啦&#xff01; 看看本次版本更新主要涵蓋的重點內容&#xff0c;有沒有你所關注的功能特性&#xff1a; AI 助力接口設計 通過 AI 為參數命名 支持讓 AI 對接口進行規范性檢測 在線文檔功能增強 在線文檔支持自定義 CSS 和 JavaScript 目錄支持設置展示…

Node.js以及異步編程

什么是服務器&#xff1f;我們知道客戶端通過訪問服務器&#xff0c;然后服務器去操作數據庫把我們想要的數據拿過來給客戶端。比如服務器就是餐廳的服務員&#xff0c;數據庫就是廚房&#xff0c;客戶端就是我們的顧客。首先我們點菜&#xff0c;服務器告訴廚師做飯&#xff0…

UniApp 實現頂部固定導航欄 Tab 及滾動變色效果

頂部導航欄是一個非常常見的組件&#xff0c;尤其是固定在頂部的 Tab 導航&#xff0c;既能方便用戶快速切換內容&#xff0c;又能保持頁面結構的清晰。本文將詳細介紹如何在 UniApp Vue3 TypeScript 項目中實現一個固定在頂部、且能根據滾動狀態改變樣式的 Tab 導航欄。效果…

c++泛型編程

C泛型編程 1. 基本概念 1.1 泛型編程&#xff08;Generic Programming&#xff09; 泛型編程是C中一種重要的編程范式&#xff0c;它通過 參數化類型 來實現代碼的通用性和復用性。 1.2 模板&#xff08;Templates&#xff09; 模板 是泛型編程的基礎&#xff0c;允許編寫與數據…

Vue.js + Node.js 開發前后臺框架

在 Vue.js + Node.js 開發前后臺框架時,推薦采用現代化的技術棧組合和最佳實踐。以下是一個高效、可擴展的全棧框架方案: 技術棧推薦 層級 技術選型 說明 前端框架 Vue 3 (Composition API) 最新Vue核心庫,推薦使用<script setup>語法 UI組件庫 Element Plus / Ant D…

Vision Transformer (ViT) 詳解:當Transformer“看見”世界,計算機視覺的范式革命

摘要: 長久以來&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;憑借其精心設計的歸納偏置&#xff08;inductive biases&#xff09;&#xff0c;無可爭議地統治著計算機視覺領域。然而&#xff0c;一篇名為《An Image is Worth 16x16 Words》的論文徹底改變了這一格局&a…

go goroutine chan 用法

方法1 代碼 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分別同步發送和接收// 發送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上傳安全與敏感數據安全處理

一、文件上傳安全1. 文件上傳時的核心安全檢查點文件上傳是 Web 應用的高風險功能&#xff0c;需從多維度驗證&#xff0c;防止惡意文件上傳&#xff08;如木馬、病毒&#xff09;或路徑攻擊&#xff0c;關鍵檢查點包括&#xff1a;MIME 類型驗證檢查請求頭中的 Content-Type&a…

文法中的間接左遞歸

&#x1f31f; 第一步&#xff1a;理解基本概念? 什么是文法&#xff08;Grammar&#xff09;&#xff1f;在編程語言或語法分析中&#xff0c;文法 是一組規則&#xff0c;用來描述一種語言的結構。例如&#xff1a;S → A a A → B b B → S c 這表示&#xff1a;S 可以…

Anthropic:跨越生產效能拐點的AI增長飛輪

資本競賽中的戰略轉折點 人工智能領域的競爭已經從理念之爭演變為資本、算力與地緣政治影響力的全面較量。Anthropic傳聞中的1700億美元估值&#xff0c;如果成為現實&#xff0c;將標志著前沿AI發展格局的地震式轉變。這不僅僅是構建更智能模型的問題&#xff0c;更是為主導下…

【Unity3D實例-功能-移動】小兵移動-通過鼠標點擊進行

在Unity的世界里&#xff0c;當你輕點鼠標&#xff0c;角色仿佛被賦予了新的使命&#xff0c;沿著一條無形的軌跡&#xff0c;向著地圖上的目標點進發。每一次移動&#xff0c;不僅是簡單的位移&#xff0c;更是對未知的探索。這種交互&#xff0c;讓玩家與游戲世界緊密相連&am…

從0到1學PHP(十四):PHP 性能優化:打造高效應用

目錄一、PHP 性能評估與分析1.1 性能指標體系1.2 性能分析工具使用1.3 性能瓶頸定位方法與流程二、代碼層面優化技巧2.1 高效的循環與條件判斷寫法2.2 函數與類的優化設計2.3 內存管理與垃圾回收機制優化三、緩存策略與實現3.1 數據緩存3.2 頁面緩存與部分緩存技術3.3 OPcache …

移動管家手機控車系統硬件安裝與軟件綁定設置

移動管家手機控車系統硬件安裝與軟件綁定配合使用&#xff0c;具體設置步驟如下&#xff1a;一、硬件安裝準備 ?加裝智能控制主機?&#xff1a;需在車輛上加裝移動管家專用智能控制模塊&#xff0c;該模塊需與原車電路系統連接&#xff0c;并將原車鑰匙芯片焊接至主控盒內以實…

51單片機入門:數碼管原理介紹及C代碼實現

本文是江協科技up的課堂筆記&#xff01;大家可以去bilibili配合這位up的51單片機入門教程食用&#xff0c;效果更佳~我這里進行詳細介紹&#xff0c;希望你忘記數碼管的時候來這里看看&#xff01;&#xff08;你猜我為什么寫這個TAT&#xff09;一.基本介紹LED數碼管&#xf…

Apache Camel 簡介

相關文檔地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP離線庫 輸入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文實現&#xff1a; 1、離線查詢IP地址 2、IP地址精確到區域 3、IP地址支持國外IP 此時需要一個創建&#xff0c;比如我輸入一個8.8.8.8的IP立馬就需要返回給我一個中文地址信息&#xff0c; 類似于百度的IP搜索&#xff1a; 113.111.186.123如果現在離線環境或者在…

解決MySQL刪除/var/lib/mysql下的所有文件后無法啟動的問題

刪除 MySQL 數據目錄 /var/lib/mysql 下的所有文件后&#xff0c;MySQL 將無法啟動&#xff0c;因為該目錄包含了數據庫的所有數據文件、配置文件和系統表。當這些文件被刪除時&#xff0c;MySQL 無法找到必要的數據和配置&#xff0c;從而無法正常啟動。本文將詳細介紹解決這個…

蒼穹外賣項目學習——day1(項目概述、環境搭建)

文章目錄一、軟件開發整體介紹1.1 軟件開發流程1.2 角色分工1.3 軟件環境分類二、蒼穹外賣項目介紹2.1 定位2.2 功能架構2.3 技術選型三、開發環境搭建3.1 前端環境3.2 后端環境3.3 前后端聯調3.4 登錄功能優化四、接口文檔管理4.1 YApi4.2 Swagger (Knife4j)一、軟件開發整體介…

【QT】Qt信號與槽機制詳解信號和槽的本質自定義信號和槽帶參數的信號和槽

文章目錄前言一、信號的本質二、槽的本質三、 信號和槽的使?3.1 連接信號和槽四、使用步驟4.1 通過QtCreator?成信號槽代碼五、 ?定義信號和槽5.1 ?例1&#xff1a;信號和槽函數初步使用5.2 ?例2 兩個類使用5.3 示例3 按鈕使用觸發信號六、 帶參數的信號和槽6.1 ?例1&…

【OD機試題解法筆記】文件緩存系統

題目描述 請設計一個文件緩存系統&#xff0c;該文件緩存系統可以指定緩存的最大值&#xff08;單位為字節&#xff09;。 文件緩存系統有兩種操作&#xff1a; 存儲文件&#xff08;put&#xff09;讀取文件&#xff08;get&#xff09; 操作命令為&#xff1a; put fileName …