首页 > 其他分享 >C. Sequence Master

C. Sequence Master

时间:2023-04-12 16:45:54浏览次数:55  
标签:ch Sequence int cdots Master 2n include define

题目链接

挺有意思的一道题

题意:给定一个\(2*n\)长度的数组\(p\),要求构造一个长度也为\(2*n\)的整数数组\(q\),使得\(q\)满足从\(q\)中任选\(n\)个数字的积等于\(q\)中剩下\(n\)个数的和,求出\(p\)与\(q\)的最短距离

最短距离定义为对应元素差的绝对值之和

由于\(q\)的要求有点严苛,先考虑如何构造\(q\)(条件严格的话\(q\)的数量可能很小,因此后面算最小距离时可能可以暴力枚举)

分为两种情况考虑:

\(\forall i,j\)有\(q_i==q_j\)

因为其强对称性考虑全部元素都相等,此时有\(q_i^n==n*q_i\)

·得到一组通解\(q_i=0\)

·以及当\(n==1\)时,\(q_i\)可以为任意值

·当\(n==2\)时,\(q_i==2\)

当\(q_i\)不全相等时,不妨设有\(q_1!=q_2\)

此时有方程组:

\(\begin{cases}q_1*q_3*q_4*\cdots*q_{n+1}=q_2+q_{n+2}+\cdots+q_{2n}\\q_2*q_3*q_4*\cdots*q_{n+1}=q_1+q_{n+2}+\cdots+q_{2n}\end{cases}\)

两式相减得: \((q_1-q_2)*q_3*q_4*\cdots*q_{n+1}=q_2-q_1\)

即: \((q_1-q_2)*(q_3*q_4*\cdots*q_{n+1}+1)=0\)

由于\(q_1!=q_2\),所以\(q_3*q_4*\cdots*q_{n+1}=-1\)

因为\(q\)的限制是任意\(n\)个数,所以其实\(q_{3,\cdots,2n}\)这些数中任意取\(n-1\)个的乘积都为\(-1\)

又因为\(q_i\)为整数,所以只有当\(2|n\)时,才有解:\(q_3=q_4=\cdots=q_2n=-1\)

代回方程得:\(q_1*(-1)=q_2-n+1\)

即:\(q_1+q_2=n-1\)

又有:\(q_1*q_2*\cdots*q_n=q_{n+1}+\cdots+q_{2n}\)

即:\(q_1*q_2=-n\)

解得 \(q_1=n,q_2=-1\),无论顺序

综上,由于只有三种情况,暴力讨论距离最小值即可

点击查看代码
#include<bits/stdc++.h>
#include<vector>
#include<map>
#include<queue>
#define int long long
#define inf 1e18
#define inc 0xcfcfcfcf
#define N 300007
#define M 500007
#define mod 1000000007
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
inline int Read()
{
	char ch=getchar();bool f=0;int x=0;
	for(;!isdigit(ch);ch=getchar())if(ch=='-')f=1;
	for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
	if(f==1)x=-x;return x;
}
int T=1,n,m;
bool Solve()
{
 	//freopen("test.in","r",stdin);
	n=Read();
	vector<int> a;
	for(int i=1;i<=2*n;++i)
	{
		int in=Read();
		a.emplace_back(in);
	}
	if(n==1)
	{
		printf("%lld\n",abs(a[1]-a[0]));
		return 1;
	}
	sort(a.begin(),a.end());
	int s1=0,s2=0,s3=0;
	for(int i=0;i<a.size();++i)
	{
		s1+=abs(a[i]);
		s2+=abs(a[i]-2);
		if(i+1!=a.size())
			s3+=abs(a[i]+1);
	}
	s3+=abs(a[a.size()-1]-n);
	if(n==2)
	{
		printf("%lld\n",min(s1,min(s2,s3)));
		return 1;
	}
	if(n%2==0)
		printf("%lld\n",min(s1,s3));
	else
		printf("%lld\n",s1);
	return true;
}
signed main()
{
	T=Read();
	while(T--)
		if(!Solve())
			printf("-1\n");
	return 0;
}
/*
-std=c++11
-std=c99
*/


标签:ch,Sequence,int,cdots,Master,2n,include,define
From: https://www.cnblogs.com/yexinqwq/p/17310311.html

相关文章

  • UVa 10049 Self-describing Sequence (自描述序列&二分递推)
    10049-Self-describingSequenceTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=34&page=show_problem&problem=990SolomonGolomb's self­describingsequence  istheonlynon­decreas......
  • (KMP 1.1)hdu 1711 Number Sequence(KMP的简单应用——求pattern在text中第一次出现的
    题目:NumberSequenceTimeLimit:10000/5000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):12902    AcceptedSubmission(s):5845ProblemDescriptionGiventwosequencesofnumbers:a[1],a[2],......,a[N],andb[1......
  • Redis集群添加master到当前集群,并重新分槽
    文档课题:Redis集群添加master到当前集群,并重新分槽.操作系统:rhel7.964位数据库:redis6.2.6环境说明:第1台机器:主机名leo-redis626-a192.168.133.1008001端口8002端口第2台机器:主机名leo-redis626-b192.168.133.1018001端口8002端口第3台机器:主机名leo-redis626-c192.......
  • UML建模之时序图(Sequence Diagram)
     一、时序图简介(Briefintroduction) 二、时序图元素(SequenceDiagramElements)  角色(Actor)  对象(Object)  生命线(Lifeline)  控制焦点(FocusofControl)  消息(Message)  自关联消息(Self-Message)  CombinedFragments  三、时序图实例分析(SequeceDiagramExampleA......
  • ava: 程序包com.alibaba.nacos.api.common不存在_RuoYi-Cloud-Plus-master_jar包不存
    来看看原因吧,jar包是存在的,但是就是在idea中引用不到,来看看怎么回事: 原来就是这个包找不到,但是从下面看是有的: 但是注意,这里的com.alibaba.nacos.api...原来可不是这样的,这个是我后来修改过的,原来是只有com.alibaba.nacos.common,而引用的是com.alibaba.nacos.api.commo......
  • MySQL Replication--Failed to flush master info 问题
    问题描述MySQL复制不定期出现问题,报错为:Failedtoflushmasterinfo,但具体原因尚未定位到。涉及代码查看MySQL5.7.34版本的代码:intflush_master_info(Master_info*mi,boolforce){DBUG_ENTER("flush_master_info");assert(mi!=NULL&&mi->rli!=NULL);/*......
  • ZOJ - 2421 Recaman's Sequence(打表水题)
    题目大意:A0=0Am=A(m-1)-m,如果Am小于0或者Am前面已经出现过了,那么Am=A(m-1)+m解题思路:打表水题我用的是map,纪录数是否出现过了#include<cstdio>#include<cstring>#include<map>usingnamespacestd;constintN=500010;typedeflonglongLL;map<LL,int>Ma......
  • UVA - 10706 Number Sequence 子序列
    #include<cstdio>#include<cmath>#include<algorithm>usingnamespacestd;constintmaxn=32761;longlongS[maxn];//存放的是S1,S2,到SK的和,S[5]表示了S1到S4的和,当数字变化到K的时候,一共有多少个字数了intborder[9]={0,1,10,100,1000,10000,100000,1000000,10000000......
  • xUtils-master开源框架
    下载地址   点击打开链接  https://github.com/tablle/xUtils-master用于下载资源使用的框架xUtils-master xUtils简介xUtils包含了很多实用的android工具。xUtils最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加......
  • 使用 kubeadm 安装单 master kubernetes 集群
    配置要求检查centos/hostname检查网络安装docker及kubelet初始化master节点初始化worker节点获得join命令参数初始化worker常见错误原因移除worker节点并重试检查初始化结果安装IngressController配置要求对于Kubernetes初学者,在搭建K8S集群时,推荐在阿里云或......