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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

蒜頭去嘉年華玩兒套圈圈,是這么玩兒的。有一些瓶口口徑不同的啤酒瓶,瓶子里面有一些獎品。如果蒜頭用手上的圈圈套中了啤酒瓶,那么獎品就歸他了。

假設蒜頭君無限精準,指哪兒打哪兒,并且蒜頭了解到,只有圈圈的半徑 嚴格大于 啤酒瓶半徑,才能套中。

并且蒜頭君知道自己手上的每個圈圈的半徑,也知道每個啤酒瓶的半徑和里面物品相對應的價值。

當然,獎品是無限多的,意思就是如果蒜頭君套中了一個啤酒瓶并且獲得了獎品,下次可以繼續套獲得同樣的獎品。

現在蒜頭君想問你,他最大能獲得多少價值。

輸入格式

第一行兩個整數?NN,MM?代表圈圈的個數和啤酒瓶的個數。

第二行?NN?個整數代表圈圈的半徑?r_crc?。

接下來?MM?行每行兩個整數?r_brb?,vv?代表啤酒瓶的半徑?rr?和相應的價值?vv。

輸出格式

輸出一個整數,代表蒜頭能獲得的最大價值。

數據范圍

對于?30\%30%?的數據:N = 1N=1?,?M = 1M=1?,?1 \le r_c , r_b , v \le 1001≤rc?,rb?,v≤100?。

對于?60\%60%?的數據:1 \le N \times M \le 10000001≤N×M≤1000000,?1 \le r_c , r_b , v \le 1001≤rc?,rb?,v≤100?, 保證所有的價值?vv?都相等。

對于?100\%100%?的數據:1 \le N \times M \le 10000001≤N×M≤1000000,?1 \le r_c , r_b , v \le 1001≤rc?,rb?,v≤100。

輸出時每行末尾的多余空格,不影響答案正確性

樣例輸入復制

2 2 2 3 1 2 2 3

樣例輸出復制

5

解題報告:

? ?但是不知道為啥,這個AC代碼1竟讓比代碼2要慢。。。這個AC代碼1幾乎是線性的啊。(應該說明有極端數據n=1e6,m=1這樣的,就把nlogn給卡了)

AC代碼1:(復雜度O(nlogn+mlogm+n+m),109ms)

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e6 + 5; typedef pair<ll,ll > PLL; ll R[MAX],r[MAX],v[MAX]; PLL p[MAX]; int main() {int n,m;cin>>n>>m;for(int i = 1; i<=n; i++) scanf("%lld",R+i);for(int i = 1; i<=m; i++) scanf("%lld%lld",&p[i].first,&p[i].second);sort(R+1,R+n+1);sort(p+1,p+m+1);ll ans = 0,maxx = 0,j=1;for(int i = 1; i<=n; i++) {while(R[i] > p[j].first && j<=m) maxx = max(maxx,p[j].second),j++;ans += maxx;} printf("%lld\n",ans);return 0 ;}

AC代碼2:(復雜度O(n*m),66ms)

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e6 + 5; ll R[MAX],r[MAX],v[MAX]; int main() {int n,m;cin>>n>>m;for(int i = 1; i<=n; i++) scanf("%lld",R+i);for(int i = 1; i<=m; i++) scanf("%lld%lld",r+i,v+i);ll ans = 0,maxx = 0;for(int i = 1; i<=n; i++) {maxx = 0;for(int j = 1; j<=m; j++) {if(R[i] > r[j]) maxx = max(maxx,v[j]);}ans += maxx;} printf("%lld\n",ans);return 0 ;}

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)的全部內容,希望文章能夠幫你解決所遇到的問題。

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