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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

發(fā)布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【每日一题】8月17日题目精讲-[SCOI2009]生日礼物 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:牛客網(wǎng):

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld

題目描述

小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有N個,分為K種。簡單的說,可以將彩帶考慮為x軸,每一個彩珠有一個對應的坐標(即位置)。某些坐標上可以沒有彩珠,但多個彩珠也可以出現(xiàn)在同一個位置上。
小布生日快到了,于是小西打算剪一段彩帶送給小布。為了讓禮物彩帶足夠漂亮,小西希望這一段彩帶中能包含所有種類的彩珠。同時,為了方便,小西希望這段彩帶盡可能短,你能幫助小西計算這個最短的長度么?彩帶的長度即為彩帶開始位置到結(jié)束位置的位置差。

輸入描述:
第一行包含兩個整數(shù)N, K,分別表示彩珠的總數(shù)以及種類數(shù)。
接下來K行,每行第一個數(shù)為Ti,表示第i種彩珠的數(shù)目。接下來按升序給出Ti個非負整數(shù),為這Ti個彩珠分別出現(xiàn)的位置。
輸出描述:
應包含一行,為最短彩帶長度。
示例1
輸入
復制

6 3 1 5 2 1 7 3 1 3 8

輸出
復制

3

備注:

題解:

雙指針,尺取法
先固定左界為1,然后移動右界,當范圍內(nèi)達到要求的彩珠數(shù)量時,固定右屆開始移動左界,直到范圍內(nèi)不再包含所有顏色的彩珠,不斷更新最小范圍
詳細可以看代碼
不過代碼有錯誤。。。我還沒發(fā)現(xiàn)。。。。

代碼:

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=1100045; struct node{ll col;//顏色 ll xy;//坐標 bool operator <(const node tmp)const{return this->xy<tmp.xy;} }a[maxn]; long long cnt[maxn]; signed main() {ll n,k;cin>>n>>k;ll ant=0;for(int i=1;i<=k;i++){ll x;cin>>x;for(int i=1;i<=x;i++){int y;cin>>y;a[++ant].col=i;a[ant].xy=y;}}sort(a+1,a+1+ant);ll l=1,r=maxn;ll sum=1e9+10;ll tmp;ll res=0;//所選不同顏色彩珠的數(shù)量 for(int i=1;i<=ant;i++)//從頭開始枚舉每一個彩珠 {if(cnt[a[i].col]==0)//說明這個顏色還么選res++; cnt[a[i].col]++;//加上當前彩珠while(res==k)//當數(shù)量足夠時 {tmp=a[i].xy-a[l].xy; sum=min(sum,tmp);//記錄最小距離 //-------接下來開始縮小范圍//左邊界開始向右靠,縮小邊界cnt[a[l].col]--;//將左邊界l的彩珠去掉 if(cnt[a[l].col]==0)res--; l++;//向右靠 } }cout<<sum<<endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的【每日一题】8月17日题目精讲-[SCOI2009]生日礼物的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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