首页 > 其他分享 >题解

题解

时间:2023-04-29 20:55:42浏览次数:41  
标签:int 题解 long solve ans diff

D. Range and Partition 1800 思维

https://codeforces.com/contest/1631/problem/D
题解:由于严格大于,故其最终前缀和s[n]>=k,而当s[n]>=k,s[0]=0,每步至多下降1,故其中必有至少k个点满足s[i]=x(1<=x<=k),故符合题意,故只需双指针找出最小的满足题意的区间即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
const int inf=1e18;
int a[N],s[N];

void solve(){
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++) s[i]=0;
	for(int i=1;i<=n;i++) cin>>a[i],s[a[i]]++;
	for(int i=1;i<=n;i++) s[i]=s[i-1]+s[i];
	int r=1;
	int ans=1e18,w=(n+k+1)/2,L=1,R=n;
	for(int l=1;l<=n;l++){
		while(r<n&&s[r]-s[l-1]<w) r++;
		if(s[r]-s[l-1]>=w){
			if(ans>r-l) L=l,R=r;
			ans=min(ans,r-l);
		}
	}
	cout<<L<<" "<<R<<endl;
	int sum=0,cnt=1,pre=1,now=1;
	for(int i=1;i<=n;i++){
		if(cnt==k){
			cout<<pre<<" "<<n<<endl;break;
		}
		if(a[i]>=L&&a[i]<=R) a[i]=1;
		else a[i]=-1;
		sum+=a[i];
		if(sum==cnt){
			cout<<pre<<" "<<i<<endl;
			pre=i+1;
			cnt++;
		}
	}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
}

E. MEX vs DIFF 2100

https://codeforces.com/problemset/problem/1684/E
题解:有两个变量,我们尝试枚举(固定)mex(显然O(n)),最小化miff来达到目的。
对于给定的mex,我们发现将出现次数较小的>mex的数移入<mex中最优,再通过map维护出现次数,即可O(nlogn+nsqrt(k)).

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int our[N];
map<int,int> num,f;
void solve(){
	num.clear();f.clear();
	int n,k;cin>>n>>k;
	for(int i=0;i<=n;i++) our[i]=0;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		if(x<=n)
		our[x]=1;
		num[x]++;
	}
	for(int i=1;i<=n;i++)
	our[i]=our[i-1]+our[i];
	for(auto [_,it]:num){
		f[it]++;
	}
	int DIFF=0,MEX;
	DIFF=num.size();
	int need=0,ans=DIFF;
	for(int i=1;i<=n+1;i++){
		if(num[i-1]) DIFF-=1;
		if(num[i-1]) f[num[i-1]]--;  
		MEX=i;
		int diff=DIFF;
		if(our[i-1]+k<i) continue;
		need=k;
		for(auto [x,y]:f){
			if(need>=x*y){
				need-=x*y;diff-=y;
			}
			else{
				diff-=need/x;break;
			}
		}
		ans=min(ans,diff);
	}
	cout<<ans<<endl;
}
signed main(){
	int T;
	cin>>T;
	while(T--) 
	solve();
}

标签:int,题解,long,solve,ans,diff
From: https://www.cnblogs.com/wjhqwq/p/17364469.html

相关文章

  • 4 月 27 日测试题解
    4月27日测试题解最短路专场T1\({\color{green}{\text{100pts}}}\text{/100pts}\)题意给出\(m\)个变量与\(n\)个约束,每个约束形如以下三种中的一种;\(x_i-x_j\lew\)\(x_i-x_j\gew\)\(x_i-x_j=w\)有\(q\)个询问,每个询问为形如\((x_i,x_j)\)的二元......
  • 4 月 21 日测试题解
    4月21日测试题解T1\({\color{green}{\text{100pts}}}\text{/100pts}\)题意给出平面上的两条线段,求线段之间的距离。\(\text{|线段端点坐标|}\le10^4\)。思路一开始想的是分讨,但是又怕自己写挂了,所以就写了三分套三分。至少这个不怕少讨论一个情况。既然是三分套三分,......
  • 问题解决:Component name "xxx" should always be multi-word vue/multi-word-compone
    如题,原因是单个单词命名时语法检测无法通过,可以在导出组件时通过name属性给组件名加一个后缀,比如Component。<script>exportdefault{//当组件名为一个单词时,语法检查是无法通过的,可以设置name的值为2个单词来规避检查。name:'HomeComponent'}<......
  • IdentityServer4 问题解决
    RedirectUris={"https://localhost:7098/signin-oidc"},PostLogoutRedirectUris={"https://localhost:7098/signout-callback-oidc"},服务端添加这个 RequirePkce=false,添加这一句......
  • open3d Reconstruction system 问题解决
    1.https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction 2.open3d版本:0.14.10.16.00.17.0会报错:open3d.cuda.pybind.piplines.odommetry.OdomtryOptionbojecthasnoattribute'max_depth_diff' 3.结果问题一:    根据......
  • [P4145 上帝造题的七分钟 2 / 花神游历各国]题解
    P4145上帝造题的七分钟2/花神游历各国题目描述分析一开始在思考有没有一个数学公式来处理每一个开方的操作但发现数据的\(\le10^{12}\)那么最多开六次就变成1了(突破口)这样每一个数的有用操作只有6次其他就全部是1很显然,我们可以去记录每一段是否全为1再用线段树、分......
  • CodeForces-858#C 题解
    正文♦最坏时间复杂度:\(\mathcal{O}(\lvertS\rvert)\)本题十分简单,但请注意两个条件要同时满足。因为要求分割的次数越少越好,所以只要连续的辅音字母长度不大于2就不需要分割。由于辅音字母太多,只需要标记元音字母即可。#include<iostream>#include<string>#include<cst......
  • 【题解】P3920 [WC2014]紫荆花之恋
    思路点分树+根号重构+*高速平衡树。点分树的两种常见用法无非是直接做和路径有关的暴力还有处理这种有关单点和整树的问题,后者的另一个经典题目是P3241[HNOI2015]开店。回到这个题目,处理路径考虑先上点分治,暂时不考虑强制在线的限制。因为每次加上一个新点,所以可以考......
  • CF1656F Parametric MST 题解
    为了便于解题,先对\(a\)数组从小到大进行排序。首先,根据定义可以得出总价值的表达式:\[\begin{aligned}W&=\sum\limits_{(u,v)\inE}[a_ua_v+t(a_u+a_v)]\\&=\sum\limits_{(u,v)\inE}a_ua_v+t\sum\limits_{(u,v)\inE}(a_u+a_v)\end{aligned}\]接着,我们需要发现一个比较......
  • P6818 [PA2013]Działka 题解
    P6818[PA2013]Działka前言我太菜了。。。。对着jiangly大佬的题解研究了一下午研究了一下午才搞出来(泪目。作为一个蒟蒻,我就详细的讲一下我对与本题的理解。题意本题的的题意描述的还是比较明了。在二维坐标系中,输入\(n\)个点\(m\)次询问,每次询问,给出一个矩阵,......