首页 > 其他分享 >【题解】CF1764C Doremy's City Construction

【题解】CF1764C Doremy's City Construction

时间:2022-12-11 17:11:26浏览次数:124  
标签:City num 题解 类点 Construction 复杂度 权值 include ll

题目传送门

思路

首先我们思考一个性质,由于不能有连续单调不升/不降的三个点连在一起,所以对于单个点来讲,显然要么只和比它大的连边(称为A类点),要么只和比它小的连边(称为B类点),要么只和与自己一样大的连边(称为C类点),要么不连边(称为D类点)

首先D类点肯定是极力避免的,其次C类点能且仅能连一条边(显然可知),所以我们要优先考虑A类点和B类点

我们先假设所有点都是A类点或者B类点,那么排序后显然A类点可以和权值比该点大的所有B类点连边,反之亦然

我们发现,如果A类点和B类点的数量已知,那么显然让A类点的权值尽可能小、B类点的权值尽可能大最优

这样,问题就变成了对转化后的数组找分界线的问题

根据简单的均值不等式,容易得出分界线落在 \(\lfloor\frac{n}{2}\rfloor\) 是最优的

然而,如果分界线左右的点的权值相等,显然会变成C类点,就不能这么计算答案了

所以,实际上我们要把权值相等的数缩为一个数,然后再寻找分界线

当然,由于排序复杂度就为 \(O(n\log n)\) 了,所以无需优化枚举复杂度,暴力找即可

不过,如果所有点的权值都相等,那么就要尽可能地增多C类点了,这时答案为 \(\lfloor\frac{n}{2}\rfloor\)

总复杂度为排序复杂度,可以通过此题

代码

//吾日九省吾身:
//输入多而不快读乎?
//题目标注而不freopen乎?
//乘除并列先乘后除乎?
//不手撕样例直接写代码乎?
//不仔细读题直接关页面乎?
//1e9而不开long long乎?
//Ctrl+V而不改名称乎?(papaw->papan IMPLIES tg1=->2=)
//相信评测神机乎?
//多测清空不彻底乎?
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<iomanip>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<utility>
#include<deque>
#include<ctime>
#include<sstream>
#include<list>
#include<bitset>
using namespace std;
typedef long long ll;
const ll nanhenhenaaaaaaaaaaa(-1145141919810);
ll T,n,ans;
ll num[5000233];
ll stk[5000233],top,numeral;
ll sum;
int main(){
	cin>>T;
	while(T--){
		cin>>n;ans=n>>1;
		sum=0;
		for(ll i=1;i<=n;++i){
			cin>>num[i];
			stk[i]=0;
		}
		sort(num+1,num+n+1);
		numeral=nanhenhenaaaaaaaaaaa;
		top=0;
		for(ll i=1;i<=n;++i){
			if(numeral!=num[i]){
				numeral=num[i];
				stk[++top]++;
			}
			else stk[top]++;
		}
		for(ll i=0;i<=top;++i){
			sum+=stk[i];
			ans=max(ans,sum*(n-sum));
		}
		cout<<ans<<endl;
	}
	return 0;
}

标签:City,num,题解,类点,Construction,复杂度,权值,include,ll
From: https://www.cnblogs.com/Konjac-Binaries/p/16973910.html

相关文章

  • SP8547 题解
    SP8547题解题意简述:给定\(n\),找到能够使得辗转相除法执行\(n\)次的两个数,使得这两个数的和最小,输出这两个数。\(n\le10^{18}\)分析:对于这种题,一看就是猜结论的题,因......
  • [NOIP2022] 喵了个喵 题解
    [NOIP2022]喵了个喵题解先考虑\(k=2n-2\),这个数字提示我们每个栈放两种颜色,剩下一个栈辅助操作。那么颜色被分为两类在栈底,可以通过操作2消去。在栈顶,可以通过操作1......
  • VUE3 API之reactive和ref常见问题解决
    reactive解构最深的一层,失去响应性问题<scriptsetuplang="ts">lettarget={a:{b:1}};lettarget1={c:1};constobj=reactive(target)constobj1=......
  • MySQL8.0登录提示caching_sha2_password问题解决方法
    背景用​​docker​​构建mysql容器后连接遇到以下问题问题Authenticationplugin'caching_sha2_password'cannotbeloaded:dlopen(/usr/local/mysql/lib/plugin/cachin......
  • 牛客题解——牛牛家的房子
    题目描述城市有n排n列的房子。牛牛在每个格点(x,y)[0≤x,y≤n]建了一所房子,冬天来了,(x,y)的室内温度为t[x*n+y]度。从(x1,y1)处的房子移动到(x2,y2)处的房子需要......
  • ABC281 DEF 简短题解
    G有时间想,但不太擅长这种图论计数,就摆了。Ex直接润。感觉这场打得很烂,全程梦游,吃了5发罚时,很棒。D-MaxMultiple给定\(n\)个数\(a_1\sima_n\),选出\(k\)个......
  • Atcoder-ABC281-DEF题解
    AtcoderBeginnerContest281D.MaxMultiple(DP)题意在长度为\(N\)的序列\(A\)中,找到\(K\)个元素其和为\(D\)的倍数,找出满足要求最大的和,没有则返回-1。数......
  • 常见问题解决 --- IDEA报错 org.apache.jasper.servlet.TldScanner.scanJars 至少有一
    问题描述 问题原因tomcat版本太高,代码使用的是低版本 解决办法降低tomcat版本。或者修改代码到高版本。  ......
  • [POJ1734]Sightseeing 观光之旅 题解
    无向图的最小环问题,前置芝士:\(\text{Floyd}\)传送门题目描述给定一张无向图,求图中一个至少包含\(3\)个点的环,环上的节点不重复,并且环上的边的长度之和最小。你需要......
  • 问题解决系列:io.lettuce.core.RedisCommandExecutionException_ CLUSTERDOWN
    问题场景程序调用​​redis​​集群,总是间歇性地提示报错,报错提示如下:org.springframework.data.redis.RedisSystemException:Errorinexecution;nestedexceptionisio......