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

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

封印一擊 Seal

2019-11-11 01:40:29
字體:
來源:轉載
供稿:網友

封印一擊

(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;}
上一篇:大數階乘

下一篇:飛花巨巨饞了

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吴桥县| 枣阳市| 北票市| 新化县| 德清县| 襄垣县| 垫江县| 广宁县| 梁河县| 读书| 孟津县| 民丰县| 聂拉木县| 铁岭市| 安图县| 乌什县| 鹤壁市| 盱眙县| 东台市| 青神县| 平遥县| 廉江市| 兴国县| 南开区| 南陵县| 合川市| 乌苏市| 赤峰市| 三明市| 微山县| 萍乡市| 绵竹市| 新昌县| 岗巴县| 鸡东县| 电白县| 县级市| 章丘市| 沁阳市| 保康县| 霍林郭勒市|