首页 > 其他分享 >「杂题乱刷」CF1650E

「杂题乱刷」CF1650E

时间:2024-05-23 23:18:45浏览次数:32  
标签:cout long cz ans CF1650E 杂题 define

题目链接

CF1650E (luogu)

CF1650E (codeforces)

解题思路

首先,你发现你只能改一个日期,那么我们肯定是改距离最近的旁边的两场考试,此时我们就可以将操作转化为删去一场考试并添加一场新考试的最小的休息时长,容易使用贪心 \(O(n)\) 解决。

总时间复杂度 \(O(n \log_2 n)\),瓶颈在于排序。

参考代码

#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 ull unsigned long long
#define lcm(x,y) x/__gcd(x,y)*y
#define Sum(x,y) 1ll*(x+y)*(y-x+1)/2
#define aty cout<<"Yes\n";
#define atn cout<<"No\n";
#define cfy cout<<"YES\n";
#define cfn cout<<"NO\n";
#define xxy cout<<"yes\n";
#define xxn cout<<"no\n";
#define printcf(x) x?cout<<"YES\n":cout<<"NO\n";
#define printat(x) x?cout<<"Yes\n":cout<<"No\n";
#define printxx(x) x?cout<<"yes\n":cout<<"no\n";
ll t;
ll n,m;
ll a[200010],b[200010],cz2[200010];
struct node{
	ll x,id;
}cz[200010];
bool cmp(node x,node y){
	return x.x<y.x;
}
ll f(ll x)// del x 
{
	ll k=0;
	forl(i,1,n)
		 if(i!=x)
		 	b[++k]=a[i];
	ll ans=0;
	forl(i,1,n-1)
		cz2[i]=b[i]-b[i-1];
	forl(i,1,n-1)
		ans=max(ans,cz2[i]/2);
	ans=max(ans,m-b[n-1]);
	sort(cz2+1,cz2+n);
//	cout<<ans<<' '<<cz2[1]<<endl;
	return min(ans,cz2[1]);
}
void solve()
{
	ll ans=0;
	cin>>n>>m;
	forl(i,1,n)
		cin>>a[i],cz[i].x=a[i]-a[i-1],cz[i].id=i;
	sort(cz+1,cz+1+n,cmp);
	ans=max(ans,f(cz[1].id));
	ans=max(ans,f(max(cz[1].id-1,1ll)));
	ans=max(ans,f(min(cz[1].id+1,n)));
	cout<<ans-1<<endl;
}
int main()
{
	IOS;
	t=1;
	cin>>t;
	while(t--)
		solve();
	QwQ;
}

标签:cout,long,cz,ans,CF1650E,杂题,define
From: https://www.cnblogs.com/wangmarui/p/18209564

相关文章

  • 「杂题乱刷」CF1650F
    题目链接CF1650F(luogu)CF1650F(codeforces)解题思路我们发现要想让第\(i\)个数变换一次就需要给第\(i\simn\)中的一个位置做一次操作,因此我们很自然的就想到了倒推,容易证明这样是不劣的。时间复杂度\(O(n^2)\)。参考代码#include<bits/stdc++.h>usingnamespace......
  • 杂题选讲 cy
    CF1666KKingdomPartition我们首先钦定\(A\)点选了A,\(B\)点选了B,其它点选了C,这样会有一个代价。然后我们尝试将每个C点改成A或者改成B。我们将其看成一个物品,其代价为其所有向外的连边之和。而同时,对于每条边,如果其两端是不同的颜色,其会使代价减少\(2l\)。我们将......
  • 「杂题乱刷」CF1759F
    题目链接CF1759FAllPossibleDigits(luogu)CF1759FAllPossibleDigits(codeforces)题意简述有一个长度为\(n\)的\(p\)进制数,你需要求出至少通过几次操作才可以让\(0\simp-1\)这\(p\)个数字都至少出现过一遍(包括中间过程)。解题思路我们很容易就能发现答案是......
  • 「杂题乱刷」CF1973D
    链接算简单题。你发现最大值肯定可以用\(n\)次查出来。然后可以证明\(ans\le\frac{n}{k}\)。总次数为\(n+\frac{n}{k}\timesk\le2n\)。代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打c......
  • 「杂题乱刷」AT_abc354_f
    大家一起来做下这个典题。链接(at)链接(luogu)我们很容易可以想到处理前后缀的最长上升子序列的长度,然后容易\(O(n\log_2n)\)预处理。做完了。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要......
  • 「杂题乱刷」洛谷 P10467
    题目链接P10467[CCC2007]SnowflakeSnowSnowflakes解题思路字符串哈希板子题。思路就是我们给每个数列的所有排列都哈希一个值,然后判断是否有不同的数列的哈希值相同,如果有,就输出Twinsnowflakesfound.,否则就输出Notwosnowflakesarealike.。参考代码这里使用双哈......
  • 「杂题乱刷」AT_abc211_e
    题目链接[ABC211E]RedPolyomino(luogu)[ABC211E]RedPolyomino(at)解题思路从第三个样例可以看出总的方案数一定很少,因此我们可以直接确定第一个被染色的格子后直接向外爆搜,搜到最后可以使用哈希判重,但光凭这样的话\(2\)秒钟肯定跑不过去,因此我们可以在搜索的过程中使用......
  • 「杂题乱刷」洛谷 P10468 兔子与兔子
    题目链接P10468兔子与兔子解题思路字符串哈希板子题。思路就是我们给字符串的每一个前缀和后缀都用一种特定的方式使其变为一个值,比如取一个乘数和模数,可以证明这样出错的概率极低。参考代码这里使用自然溢出三哈希。#include<bits/stdc++.h>usingnamespacestd;#defin......
  • 最优化杂题乱讲
    你校的最优化杂题乱讲。保证难度随机排序,使用mt19937生成题目序列。最优化问题往往使用贪心,dp,二分,最短路解决。其中贪心往往可以通过感性理解,凭借人类本能想到贪心方式,继而写出正解,但有些比较厉害的题目却需要进行严谨的证明,而且可能会推出与感性结论相差很大的结论。dp则......
  • 杂题选讲II
    CliqueConnectAT_abc352_e朴素的想法是按题意暴力建边跑最小生成树,发现一个联通块内的很多边是冗余的,可以相邻两点建边跑最小生成树即可。//author:yhy#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;usingPii=pair<LL,LL>;constLLkMaxN......