日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Acwing第 1 场周赛【完结】

發(fā)布時(shí)間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Acwing第 1 场周赛【完结】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說(shuō)實(shí)話題目真的不難,但是自己真的垃圾,
第一題簽到過(guò)了
第二題腦子只想貪心,過(guò)了8個(gè)點(diǎn),后來(lái)發(fā)現(xiàn)貪心有點(diǎn)問(wèn)題。又想到了用小根堆。結(jié)果TLE。最后發(fā)現(xiàn)是二分
第三題想到了求環(huán),想到了用并查集。沒(méi)有想到聯(lián)通塊的大小就是環(huán)。

目錄

  • A: AcWing 3577. 選擇數(shù)字 【難度: 簡(jiǎn)單 / 知識(shí)點(diǎn): 思維】
  • B: AcWing 3578. 最大中位數(shù) 【難度: 一般 / 知識(shí)點(diǎn): 二分答案】
  • C: AcWing 3579. 數(shù)字移動(dòng) 【難度: 中 / 知識(shí)點(diǎn): 并查集】

A: AcWing 3577. 選擇數(shù)字 【難度: 簡(jiǎn)單 / 知識(shí)點(diǎn): 思維】


https://www.acwing.com/problem/content/3580/

#include<cstdio> #include<iostream> #include<algorithm> #include<map> using namespace std; typedef long long int LL; const int N=1e5+10; int a[110],b[110]; bool st[N]; int main(void) {int m;cin>>m;for(int i=0;i<m;i++) cin>>a[i],st[a[i]]=true;;int n; cin>>n;for(int i=0;i<n;i++) cin>>b[i],st[b[i]]=true;for(int i=0;i<m;i++){for(int j=i;j<n;j++){if(!st[a[i]+b[j]]){cout<<a[i]<<" "<<b[j]<<endl;return 0;}} }return 0; }

其實(shí)你會(huì)發(fā)現(xiàn),每組數(shù)據(jù)求最大值,其組合的數(shù)據(jù)一定不會(huì)在這里的集合中出現(xiàn)。

#include<cstdio> #include<iostream> #include<algorithm> #include<map> using namespace std; typedef long long int LL; int main(void) {int m;cin>>m;LL x,a=0,b=0;for(int i=0;i<m;i++) cin>>x,a=max(a,x);int n; cin>>n;for(int i=0;i<n;i++) cin>>x,b=max(b,x);cout<<a<<" "<<b<<endl;return 0; }

B: AcWing 3578. 最大中位數(shù) 【難度: 一般 / 知識(shí)點(diǎn): 二分答案】


https://www.acwing.com/problem/content/3581/
用排序后有單調(diào)性,故用二分答案,注意開(kāi)long long .
這道和洛谷二分題單里的跳石頭大同小異

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; typedef long long int LL; const int N=2*1e5+10; LL a[N]; int n,k; bool check(LL mid) {LL res=0;for(int i=n/2;i<n;i++){if(a[i]<mid) res+=mid-a[i];//需要補(bǔ)}if(res<=k) return true;//補(bǔ)的數(shù)的和大于kelse return false; } int main(void) {cin>>n>>k;for(int i=0;i<n;i++) cin>>a[i];sort(a,a+n);LL l=0,r=2*1e9;while(l<r){LL mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}cout<<l<<endl;return 0; }

C: AcWing 3579. 數(shù)字移動(dòng) 【難度: 中 / 知識(shí)點(diǎn): 并查集】

https://www.acwing.com/problem/content/3582/

不難看出這應(yīng)該是一個(gè)圖。
我們以
n=6 , 4 6 2 1 5 3為例

你會(huì)發(fā)現(xiàn)每一個(gè)都是一個(gè)環(huán),而環(huán)的大小正好等于連通塊的大小。
故直接套用并查集求連通塊的模板。

#include<bits/stdc++.h> using namespace std; const int N=1e5*2+10; int p[N],cnt[N],a[N],n,t; int find(int x) {if(x!=p[x]) p[x]=find(p[x]);return p[x]; } int main(void) {cin>>t;while(t--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i],p[i]=i,cnt[i]=1;for(int i=1;i<=n;i++){if(find(a[i])!=find(i)){cnt[find(i)]+=cnt[find(a[i])];p[find(a[i])]=find(i);}}for(int i=1;i<=n;i++) cout<<cnt[find(i)]<<" ";cout<<endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的Acwing第 1 场周赛【完结】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。