洛谷P1678-烦恼的高考志愿
題目背景
計算機競賽小組的神牛V神終于結束了萬惡的高考,然而作為班長的他還不能閑下來,班主任老t給了他一個艱巨的任務:幫同學找出最合理的大學填報方案。可是v神太忙了,身后還有一群小姑娘等著和他約會,于是他想到了同為計算機競賽小組的你,請你幫他完成這個艱巨的任務。
題目描述
根據n位學生的估分情況,分別給每位學生推薦一所學校,要求學校的預計分數線和學生的估分相差最小(可高可低,畢竟是估分嘛),這個最小值為不滿意度。求所有學生不滿意度和的最小值。讀入數據有三行,第一行讀入兩個整數m,n。m表示學校數,n表示學生數。第二行共有m個數,表示m個學校的預計錄取分數。第三行有n個數,表示n個學生的估分成績。輸出數據有一行,為最小的不滿度之和。
輸入輸出格式
輸入格式:
輸出格式:
輸入輸出樣例
輸入樣例#1:
4 3
513 598 567 689
500 600 550
輸出樣例#1:
32
說明
數據范圍:對于30%的數據,m,n<=1000,估分和錄取線<=10000;對于100%的數據,n,m<=100,000,錄取線<=1000000。
.
.
.
.
.
.
分析
如果a[mid],即錄取分數線數組中的第mid個元素小于或等于那位同學的分數,mid+1賦值給l,否則,mid賦值給r。
最后查找完后,那么求錄取分數線數組中的第l-1個元素和錄取分數線數組中的第l個元素他們兩與那位同學的估分的絕對值,那么答案就累加兩個絕對值中最小的。
.
.
.
.
.
程序:
#include<iostream> #include<cmath> #include<algorithm> using namespace std; int m,n,a[1000010],b[1000010];int main() {cin>>m>>n;for (int i=1;i<=m;i++)cin>>a[i];sort(a+1,a+m+1);for (int i=1;i<=n;i++)cin>>b[i];int ans=0;for (int i=1;i<=n;i++){int l=0,r=m+1;while (l<r){int mid=(l+r)/2;if (a[mid]<=b[i]) l=mid+1; else r=mid;}if (b[i]<=a[1]) ans+=a[1]-b[i];else ans+=min(abs(a[l-1]-b[i]),abs(a[l]-b[i]));}cout<<ans;return 0; }轉載于:https://www.cnblogs.com/YYC-0304/p/9499909.html
總結
以上是生活随笔為你收集整理的洛谷P1678-烦恼的高考志愿的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3263-Tallest Cow
- 下一篇: 洛谷P3902 递增