【发布时间】:2017-08-22 20:35:33
【问题描述】:
给定n,数组元素的数量和arr[n],数字数组,需要找到数组可以划分的最大子数组数,使得GCD(a,b)=1对于每个@987654325 @ 和b 属于不同的子数组。
例如:
5
2 3 4 5 6
Ans: 2 ----> {(2,3,4,6),(5)}
任何其他进一步划分它的尝试都不会满足条件。
我的方法:
1. 对数组进行排序。
2. 继续计算元素的lcm。
3.每次元素的gcd和之前元素的lcm为1时,增加计数器。
int main()
{
int n;
cin>>n;
long long int arr[n];
for(int i=0;i<n;++i)
cin>>arr[i];
sort(arr,arr+n);
long long int ans=1,l=arr[n-1];
for(int i=n-2;i>=0;i--)
{
if(gcd(l,arr[i])==1)
ans++;
l=lcm(l,arr[i]);
}
cout<<ans<<endl;
return 0;
}
在我的答案被wrong answer 多次判断后,我很困惑我的解决方案是否正确。由于n 的限制是10^6 并且数组元素是10^7,解决方案失败的另一个原因是LCM 可以超过long long 限制。有没有其他可能的解决方案?还是目前的做法有什么错误?
【问题讨论】:
-
你指的是这个问题吗:codechef.com/problems/CHEFGRUP 因为约束声明 2 1。
-
@Shubham .. 是的,它是一样的......我只是举了一个例子......编辑!