首页 > 其他分享 >【洛谷】P1678 烦恼的高考志愿 (二分)

【洛谷】P1678 烦恼的高考志愿 (二分)

时间:2023-12-20 11:37:19浏览次数:36  
标签:二分 分数 洛谷 P1678 int long maxn ans

题目描述在这里:P1678

这道题用二分的思路就很容易想出,先把学校分数排好序,根据不满意度的定义,我们只需要每次找到第一个大于学生成绩的学校分数,然后再和最后一个小于学生分数的院校分数分别与学生成绩做差再打绝对值进行比较,取最小的一个累加到ans里就好啦

代码如下

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define maxn 100010
int m[maxn],n[maxn],M,N;  //分别定义学校分数,学生分数,学校个数,学生个数
long long ans = 0;  //ans要开long long 不然有一个数据点会WA
//y总的板子x
int find(int x) {
	int l=1,r=M,mid;
	while(l<r) {
		if(m[mid=l+r>>1]<=x)
		l=mid+1;
		else r=mid;
	}
	return l;
}
int main() {
	cin >>M>>N;
	for(int i=1;i<=M;i++) cin >>m[i];
	for(int i=1;i<=N;i++) cin >>n[i];
	sort(m+1,m+M+1); //排序
	
for (int i=1;i<=N;i++) {
    int k=find(n[i]);。 //防止在程序内多次调用函数,说到底这种题目也不需要写函数嘛。。。
    if(n[i]<=m[1])
    ans += m[1]-n[i];  //特判,否则只有七十分,因为如果返回的是第一个下标,那么m[k-1]就是m[0],m[0]没有初始化,不知道会出现啥东西xxx
    else。             //应该是这个原因?反正这样就AC了
	ans += min(abs(m[k]-n[i]),abs(m[k-1]-n[i]));
	}
	cout << ans;

	return 0;
}

 

标签:二分,分数,洛谷,P1678,int,long,maxn,ans
From: https://www.cnblogs.com/Yukie/p/17916140.html

相关文章

  • 【洛谷】P1024 [NOIP2001 提高组] 一元三次方程求解 (二分)
    题目描述见此:P1024如何求一个方程的根呢qwq首先,根是什么,函数y=f(x)有零点⇔方程f(x)=0有实数根⇔函数y=f(x)的图象与x轴有交点。回顾我们高一学过的一个定理:零点存在性定理:如果函数y=f(x)在区间[a,b]上的图象是连续不断的一条曲线,并且有f(a)·f(b)<0,那么,函数y=f(x)在区间(a,b)......
  • 【洛谷】P1873 [COCI 2011/2012 #5] EKO / 砍树 (二分)
    题目描述见:P1873思路比较明确qwq因为答案显然满足单调性:当x超过某个数一定是错的(收集的木材大于m),而小于x一定是对的,并且x是从0一直递增。故我们只需二分法找到x。直接看代码吧qwq精髓是check函数直接模拟题目要求ww#include<iostream>usingnamespacestd;#defineMAXN100......
  • [LeetCode] LeetCode704. 二分查找
    题目描述思路基础二分查找模板的考察。方法一:classSolution{publicintsearch(int[]nums,inttarget){if(nums==null||nums.length==0)return-1;intleft=0,right=nums.length-1;while(left<=right){......
  • [排序,贪心,置换环]洛谷P1327&&P8637,双倍经验
    前置知识:置换环,最小交换次数https://blog.csdn.net/yunxiaoqinghe/article/details/113153795?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9C%80%E5%B0%91%E4%BB%BB%E6%84%8F%E4%BA%A4%E6%8D%A2%E6%8E%92%E5%BA%8F%E8%AF%81%E6%98%8E%E7%94%A8%E7%BD%AE%E6%8D......
  • 局部最小问题(二分查找)
    二分查找局部最小问题思路来源一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础笔记内容问题描述:对于一个数组,相邻值不等。查找出该数组中满足局部最小的值。局部最小:x[0]<x[1]2x[n-1]<x[n-2]x[i-1]>x[i]&&x[i+1]>x[i]算法思路:首先检测......
  • 【算法模版】二分查找
    1.简介故事分享......
  • 「杂题乱刷」洛谷P9533
    题目链接诈骗题。容易证明,翻转任意一个“灵异区间”时,整个序列的“灵异区间”的数量总数都不会变,因此我们直接输出原数列的“灵异区间”的总数即可。参考代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*......
  • Arrays工具类二分查找方法binarySearch方法详解​
    Arrays工具类二分查找方法binarySearch方法详解基础知识该方法的一般形式是publicstatic<T>intbinarySearch(T[]a,Tkey),对于基本类型,都有相应的重载方法,如针对int类型有binarySearch(int[]a,intkey)等。该方法的原理是使用二分查找算法在指定的数组中搜索指定的值。在调......
  • 「杂题乱刷」洛谷P2426
    题目链接一道简单区间dp。设\(dp_i\)为删到第\(i\)个数时的最大值,状态转移方程也挺好写的。时间复杂度\(O(n^2)\)。参考代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h......
  • 二分查找细节分析
    二分查找细节分析本篇仅分析二分查找的细节问题,在阅读前请确保已经对“二分查找”概念与步骤有初步了解。二分查找的三个常用搜索区间搜索区间终止条件左右指针初始赋值左右指针赋值循环条件左闭右闭[l,r]相错终止l=0r=nums.length-1l=mid+1r=mid-1l<=r......