首页 > 其他分享 >「杂题乱刷」洛谷 P4801

「杂题乱刷」洛谷 P4801

时间:2024-03-03 14:56:40浏览次数:30  
标签:洛谷 -- ll long P4801 abs last 杂题 define

链接

套路题。

最小值:

排序后直接分讨即可。

最大值:

排序后枚举开头为 \(a_1\),\(a_n\) 的情况后双指针贪心即可。

代码:

点击查看代码
/*
Tips:
你数组开小了吗?
你MLE了吗?
你觉得是贪心,是不是该想想dp?
一个小时没调出来,是不是该考虑换题?
*/
#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define forll(i,a,b,c) for(register long long i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(register long long i=a;i>=b;i-=c)
#define lc(x) x<<1
#define rc(x) x<<1|1
#define mid ((l+r)>>1)
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) x&-x
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
#define lcm(x,y) x/__gcd(x,y)*y
#define Sum(x,y) 1ll*(x+y)*(y-x+1)/2
ll t;
void solve()
{
	ll n,m,ans1=0,ans2=0,maxn1=0,maxn2=0,last,L,R;
	cin>>n>>m;
	ll a[n+10]={0};
	forl(i,1,n)
		cin>>a[i];
	sort(a+1,a+1+n);
	if(m<=a[1])
		ans1=a[n]-m;
	else if(m>=a[n])
		ans1=m-a[1];
	else
		ans1=a[n]-a[1];
	L=2,R=n;
	maxn1=abs(m-a[1]),last=a[1];
	forl(i,2,n)
	{
		if(i%2==0)
			maxn1+=max(abs(a[R]-last),abs(a[R]-m)),last=a[R--];
		else
			maxn1+=max(abs(a[L]-last),abs(a[L]-m)),last=a[L++];
	}
	L=1,R=n-1;
	maxn2=abs(m-a[n]),last=a[n];
	forl(i,1,n-1)
	{
		if(i%2==0)
			maxn2+=max(abs(a[R]-last),abs(a[R]-m)),last=a[R--];
		else
			maxn2+=max(abs(a[L]-last),abs(a[L]-m)),last=a[L++];
	}
	cout<<ans1<<' '<<max(maxn1,maxn2)<<endl;
}
int main()
{
	IOS;
	t=1;
//	cin>>t;
	while(t--)
		solve();
    /******************/
	/*while(L<q[i].l) */
	/*    del(a[L++]);*/
	/*while(L>q[i].l) */
	/*    add(a[--L]);*/
	/*while(R<q[i].r) */
	/*	  add(a[++R]);*/
	/*while(R>q[i].r) */
	/*    del(a[R--]);*/
    /******************/
	QwQ;
}

总结

此题是简单的贪心题,难度为 \(1\),质量可以给到 \(7.8\) 分。

标签:洛谷,--,ll,long,P4801,abs,last,杂题,define
From: https://www.cnblogs.com/wangmarui/p/18050042

相关文章

  • 【洛谷】阶乘之和(高精度运算)
    题目描述看起来很简单,但是n的取值范围是<=50,结果有可能会很大,一般的算法AC不了。题解上说要用一种叫做高精度运算的算法:24.cnblogs.com/blog/3213233/202403/3213233-20240302211217307-1826622717.png)这里的高精度算法可想而知一定不是能用long数据类型就能解决的问题。......
  • 洛谷题单指南-二分查找与二分答案-P1182 数列分段 Section II
    原题链接:https://www.luogu.com.cn/problem/P1182题意解读:每段和的最大值越小,则分段数就越多,因此可以通过给定每段和的最大值,将分段数划分为两类:<=M,>M,对每段和的最大值进行二分即可。解题思路:二分的判定条件为,给定每段和的最大值,计算分段数,计算逻辑如下:依次遍历每一个数,求当前......
  • dp&图论 杂题选做
    开个新坑qwq。upd:CSP前一周暂时停更。upd:暂时不会更了。P1099经典套路题。算法一:枚举。先dfs求出树的直径,再枚举直径上的每条路径,再dfs一遍求出最小偏心距即可。时间复杂度\(O(n^3)\),足以通过本题(由此可见本题有多水)。算法二:双指针。通过观察可以发现,在固定左端......
  • 点分治杂题总结
    前言由于已经点明是点分治,所以我们在文章中约定,题解只叙述:求经过当前递归到的\(x\)对于答案的贡献,用以减少文章冗余程度。如有错误,欢迎指出。\(\texttt{1.[BJOI2017]树的难题}\)其实还是比较简单一题,做多了自然就会。首先我们先\(\texttt{dfs}\),在\(x\)的子树上处理一......
  • 240302 杂题
    小知识:VSCode通过调整Editor:CursorSurroundingLines可以达到Typora打字机模式的效果。调到任意一个超过屏幕总行数的值可以让焦点居中。很舒服。T1movehttp://222.180.160.110:1024/contest/5006/problem/1注意到\(x\)和\(y\)的绝对值是分开计算的,只用分类讨论......
  • 【洛谷】数的性质
    题目不难,但是很考验读题的能力和运用逻辑符号的能力。代码:#include<iostream>usingnamespacestd;intmain(){ intx; cin>>x; boolres[4]={0,0,0,0}; boola=(x%2==0); boolb=(x>4&&x<=12); if(a&&b){ res[0]=1; } if(a||b){ ......
  • 【洛谷】虫子吃苹果
    看似很简单,但是这种现实情境的问题特别需要处理特殊情况,如不能出现剩余苹果为负数的情况等等。看到现实问题类型的题目都要想到这些问题。官方题解代码:#include<bits/stdc++.h>//万能头文件usingnamespacestd;intm,t,s;intmain(){ cin>>m>>t>>s; if(t==0)//特判t=0的......
  • 洛谷题单指南-二分查找与二分答案-P3853 [TJOI2007] 路标设置
    原题链接:https://www.luogu.com.cn/problem/P3853题意解读:相邻路标的最大距离即空旷指数,空旷指数越小,用的路标越多,因此可以根据空旷指数将使用路标情况分成两类:路标数<=K,路标数>K,对空旷指数进行二分即可。解题思路:二分的判定条件为,给定空旷指数,计算需要的路标数只需遍历每两......
  • 洛谷题单指南-二分查找与二分答案-P2678 [NOIP2015 提高组] 跳石头
    原题链接:https://www.luogu.com.cn/problem/P2678题意解读:最短跳跃距离越大,要移走的石头就越多,因此可以根据最短跳跃距离的不同把情况分为两类:移走的石头数<=M、移走的石头数>M,对最短跳跃距离二分即可。解题思路:二分的判定条件如下:对于给定最短跳跃距离,需要计算移走的石头数,......
  • 洛谷题单指南-二分查找与二分答案-P2440 木材加工
    原题链接:https://www.luogu.com.cn/problem/P2440题意解读:切出来的长度越短,则段数越多,可以通过二分长度来解决。解题思路:二分的关键在于判定条件,此题就是对二分到的长度计算可以切割的段数,如果段数大于等于k,则满足要求,可以继续加大长度。注意点:1、计算切割出来的段数是累加:每......