国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

封印一擊 Seal

2019-11-11 02:50:38
字體:
來源:轉載
供稿:網友

封印一擊

(seal.pas/c/cpp)

題目描述

“圣主 applepi 于公元 2011 年 9 月創造了 Nescafe,它在散發了 16 次光輝之后與公元2011 年 11 月 12 日被封印為一顆魂珠,貯藏于 Nescafe 神塔之中。公元 2012 年 9 月,圣主帶領四大護法重啟了 Nescafe,如今已經是 Nescafe 之魂的第 30 次傳播了。不久,它就要被 第二次封印,而變成一座神杯……”applepi 思索著 Nescafe 的歷史,準備著第二次封印。 Nescafe 由 n 種元素組成(編號為 1~n),第 i 種元素有一個封印區間[ai,bi]。當封印力度E 小于 ai 時,該元素將獲得 ai 的封印能量;當封印力度 E 在 ai 到 bi 之間時,該元素將獲得E 的封印能量;而當封印力度 E 大于 bi 時,該元素將被破壞從而不能獲得任何封印能量。 現在圣主 applepi 想選擇恰當的 E,使得封印獲得的總能量盡可能高。為了封印的最后一擊 盡量完美,就請你寫個程序幫他計算一下吧!

輸入格式

第一行一個整數 N。 接下來 N 行每行兩個整數 ai、bi,第 i+1 行表示第 i 種元素的封印區間。

輸出格式

兩個用空格隔開的整數,第一個數是能夠獲得最多總能量的封印力度 E,第二個數是獲 得的總能量大小。當存在多個 E 能夠獲得最多總能量時,輸出最小的 E。

樣例輸入

2 5 10 20 25

樣例輸出

10 30

數據范圍與約定

對于 50% 的數據,1<=N<=1000,1<=ai<=bi<=10000。 對于 100% 的數據,1<=N<=10^5,1<=ai<=bi<=10^9。


思路想對了,沒敢寫,暴力50分,果然是做題太少了。

正解思路:

很容易想到,最優解的E肯定是某個區間的端點!所以我們把所有區間的左右端點取出,從小到大排序,掃描一遍。維護一個變量sa,表示掃描到的值為p時,左端點大于p的所有區間的左端點之和;維護一個變量sp,表示掃描到的值為p時,p在左右端點之間的區間個數。那么此時可以封印一擊得到的能量就是sa+sp*p。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{int x,y;}c[200010];int a[100010],b[100010],n,i,p;long long sa,sp,ans;bool cmp(const node & a,const node & b){return a.x<b.x||a.x==b.x&&a.y>b.y;}int main(){ freopen("seal.in","r",stdin); freopen("seal.out","w",stdout); cin>>n; for(i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]); sa+=a[i];//sa:suma c[i].x=a[i],c[i].y=1; c[n+i].x=b[i],c[n+i].y=-1; } sort(c+1,c+2*n+1,cmp); for(i=1;i<=2*n;i++) if(c[i].y==1) { sp++,sa-=c[i].x; if(ans<sa+sp*c[i].x) ans=sa+sp*c[i].x,p=c[i].x; } else { if(ans<sa+sp*c[i].x) ans=sa+sp*c[i].x,p=c[i].x; sp--; } cout<<p<<' '<<ans<<endl; return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旬邑县| 麻江县| 文安县| 青岛市| 庐江县| 鹰潭市| 日喀则市| 高陵县| 原平市| 遂昌县| 瓮安县| 高台县| 察隅县| 莲花县| 东山县| 高碑店市| 长顺县| 阳城县| 班戈县| 永州市| 石阡县| 诸暨市| 嘉鱼县| 威宁| 福鼎市| 高要市| 墨江| 关岭| 元谋县| 靖远县| 满洲里市| 阿鲁科尔沁旗| 河西区| 肃南| 株洲县| 武夷山市| 安龙县| 靖边县| 扎囊县| 武川县| 海伦市|