题目:
根据n位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。读入数据有三行,第一行读入两个整数m,n。m表示学校数,n表示学生数。第二行共有m个数,表示m个学校的预计录取分数。第三行有n个数,表示n个学生的估分成绩。输出数据有一行,为最小的不满度之和。
解题思路:
Sort+二分
设l为0,r为n+1,如果x(学校的预计录取分数)[mid]≤y(自然就是学生分数了),我们就把边界往大的一边缩,反之往小的一边缩,然后取min,特判看下面Accepted code:
#include#include using namespace std;int n,m,x[100001],y;int zl(int x) { return x>0?x:-x;}//absint min(int x,int y){ return x>y?y:x;}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&x[i]); sort(x+1,x+n+1); int ans=0; for (int i=1;i<=m;i++) { scanf("%d",&y); int l=0,r=n+1; while(l >1; if (x[mid]<=y) l=mid+1; else r=mid; } if (y<=x[1])//这个特判不加会WA ans+=x[1]-y; else ans+=min(zl(x[l-1]-y),zl(x[l]-y)); } printf("%d",ans); return 0;}