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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

射箭(arrow)

發布時間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 射箭(arrow) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

射箭(arrow)

Description?

FJ很喜歡看射箭比賽,看著運動員們一個個精湛的技藝,令他頭暈目眩膜拜不已。而且他喜歡給那些射箭選手打分,他想如果一位選手能在盡量短的時間段內射出所有可能的環數,那么他的得分就是那段最短時間的長度。
現在,FJ告訴你其中一位選手共射出了n支箭,當然他每個單位時間射出一只箭。FJ還會告訴你他射出的每支箭的環數。而且環數總共的可能性有m種,環數分別為1-m,請你幫他算過這位選手在他心目中的分數。

Input?

輸入文件共兩行
第一行兩個數n,m。
第二行一共n個數表示那位選手每一箭的環數。

Output

輸出文件只有一個數,表示這位選手的得分。如果這位運動員無法在這n箭中射出所有的環數,則輸出-1。

Sample Input?

12 5

2 5 3 1 3 2 4 1 1 5 4 3

Sample Output?

6

說明:這位選手從第2支箭到第7支箭射出了所有可能的環數,因此他的得分是6。

Hint

30% n<=1000 m<=20。
100% n<=1000000 m<=2000。?

算法:

根據下標計數統計環的個數進行添加右邊的環或者刪除左邊的環。

步驟:

1 以環數作為下標從右邊進行添加環的操作,當值為1的時候,表示產生新的環,則進行h的累加;

2 h==m,可以進行比較存儲;

3 h==m,可以從左邊進行刪除環的操作;當環為下標的值為0時,表示失去一個環,就停止刪除,中斷,再繼續從右邊進行增加環的操作;

#include<bits/stdc++.h> using namespace std; long long n,m,ans=INT_MAX,sum,l,r,p,k,c[20000001],s[1000009],x; int main() {cin>>n>>m;for(int i=1;i<=n;i++)cin>>s[i];for(int i=1;i<=n;i++){r=i;x=s[i];c[x]++;if(c[x]==1) k++;if(k==m){p=1;for(;;){sum=r-l+1;if(sum<ans) ans=sum;x=s[l];c[x]--;l++;if(c[x]==0){k--;break;}}}}if(p==0) ans=0;cout<<ans;return 0; }

總結

以上是生活随笔為你收集整理的射箭(arrow)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。