求助求助 k型好数列
如题,求一个思路?一个长度大于等于2的数列,且其中任意两个元素 A;和4;(2+j)的和 4;十 A;都能整除飞,我们称其为区
型好数列。
现在输入一个长度为 N 的数列 A=[Ai,As,…AN 以及一个整数不,请你找出 A 的最长的区型好数列 B,输
出B的长度。
如果这样的子数组不存在,输出一1.
输入格式
筆一行包含两个整数 N 和区。
第二行包含 N 个整数 Ai, A2, ...AN。
1 ≤N≤100000
1≤4,5≤1000000000
例:输入53
输出13236 看不明白题目? 是的,希望大佬给点思路和方法
chenwhccc 发表于 2021-11-21 10:31
是的,希望大佬给点思路和方法
我看不明白你的题目。
“A;和4;(2+j)的和 4;十 A;都能整除飞”这是啥意思,没看明白 一个长度大于等于2的数列,且其中任意两个元素Ai和Aj的和能够整除K,则称K为K型好数列。
现在输入一个长度为N的数列A={A1 A2 …An}以及一个整数K,找出A的最好K型好数列B,输出B的长度
这是原题目 jhq999 发表于 2021-11-21 10:35
我看不明白你的题目。
“A;和4;(2+j)的和 4;十 A;都能整除飞”这是啥意思,没看明白
还在吗?😶 本帖最后由 jhq999 于 2021-11-21 11:46 编辑
不知道我理解的对不对?
//数列A,int len=A的大小
int begin=0,end=0,i=0,j=0,flag=0,K=0;
cin>>K;
for(begin=0;begin<len-1;begin++)
{
for(end=begin+1;end<len;end++)//在A中截取元素数量>=2的数列
{
flag=0;//初始化flag=0
for(i=beging;i<end;i++)
{
for(j=i+1;j<=end;j++)//在截取的数列中取得任意两个数相加
{
if((A+A)%K)//如果有一组相加不能整除K,跳出,并且让flag=1
{
flag=1;
break;
}
}
if(flag)break;
}
if(flag)//如果flag=1
{
//A——A不是K型好数列
}
else//如果flag=0,说明这组数列两两相加都能够整除K
{
//A——A是K型好数列
}
}
} jhq999 发表于 2021-11-21 11:27
不知道我理解的对不对?
这个意思是三种情况吗? chenwhccc 发表于 2021-11-21 11:36
这个意思是三种情况吗?
刚才应该是(A+A)%K
已经改过来了 jhq999 发表于 2021-11-21 11:37
cin>>K 是什么意思? chenwhccc 发表于 2021-11-21 11:41
cin>>K 是什么意思?
输入数值给K,"整除K" chenwhccc 发表于 2021-11-21 11:41
cin>>K 是什么意思?
输入数值给K jhq999 发表于 2021-11-21 11:44
输入数值给K
最终是要求得数列的长度,最后三行是不是错了? chenwhccc 发表于 2021-11-21 11:49
最终是要求得数列的长度,最后三行是不是错了?
既然知道两两相加都能够整除K数列{A到A},长度不就是end-begin+1 靠!不会是在A里面找出条件是两两相加能够整除K的所有元素吧 jhq999 发表于 2021-11-21 11:58
靠!不会是在A里面找出条件是两两相加能够整除K的所有元素吧
对 所有元素的集合长度 chenwhccc 发表于 2021-11-21 12:00
对 所有元素的集合长度
最大子列存在于:1全部是k的倍数2当k为偶数时全部是k/2的倍数3两数模k之和等于k(如果存在该情况,结果只能是2)。取三者最大
我现在基本思路是这样 但是第三种情况不知道怎么实现 本帖最后由 jhq999 于 2021-11-21 12:11 编辑
又想错了,唉{:5_104:}
本帖最后由 jhq999 于 2021-11-21 13:10 编辑
看看这个思路怎么样
末位淘汰制,直到大家整除的数量一样,且数量=剩下的-1 jhq999 发表于 2021-11-21 13:09
看看这个思路怎么样
末位淘汰制,直到大家整除的数量一样,且数量=剩下的-1
能具体一点吗?属实想不明白
页:
[1]
2