Codechef:从数组元素中移除成对的公共因子,并找到最小乘积.为什么回答错误
Codechef: Remove pairwise common factors from array elements and find minimum product. Why Wrong Answer?
问题声明:您得到一个由N个正整数组成的数组a,您可以对该数组执行以下操作
1) 在数组(i!=j)中拾取任意两个索引i
和j
2) 将A[i]
和A[j]
除以A[i]和A[j]的一些公因子
您可以根据需要多次执行上述操作,其目的是最小化生成的数组的乘积。查找此最小产品。由于答案可能是一个大数字,所以打印出以1000000007为模的乘积。
输入:
第一行包含T,测试用例的数量。每个测试用例包含2行。每个测试用例的第一行包含一个整数N,即数组的大小。
每个测试用例的第二行包含N个空格分隔的整数,数组A
输出:
对于每个测试用例,输出一行指示该测试用例的答案
CONSTRAINTS:
1<=T<=10
30 points : 1<=N<=2000, 1<=A[i]<=10^6
70 points : 1<=N<=20000, 1<=A[i]<=10^8
SAMPLE INPUT:
1
3
2 3 6
SAMPLE OUTPUT:
1
我的代码:
#include <iostream>
#include <vector>
using namespace std;
// Take two elements of vector by reference. Then divide them by their common factors.
void common(unsigned long long int &sm, unsigned long long int &big)
{
while (sm%2 == 0 && big%2 == 0)
{
sm /= 2;
big /= 2;
}
for (unsigned long long int i = 3; i <= big && i <= sm; i = i+2)
{
while (sm%i == 0 && big%i == 0)
{
sm /= i;
big /= i;
}
}
}
int main()
{
long long int T, N;
vector<unsigned long long int> v(20000);
unsigned long long int prod = 1;
cin >> T;
while ( T-- )
{
cin >> N;
for ( long long int i = 0;i < N; i++ )
cin >> v[i];
for ( long long int i = 0; i < N; i++ )
for ( long long int j = i+1; j < N; j++ )
{
if (v[j] >= v[i] && v[j] % v[i] == 0) {
v[j] /= v[i];
v[i] = 1;
break;
}
if (v[i] > v[j] && v[i] % v[j] == 0) {
v[i] /= v[j];
v[j] = 1;
continue;
}
common( v[i], v[j] );
}
prod = 1;
for ( long long int i = 0; i < N; i++ )
prod = (prod * v[i]) % 1000000007;
cout << prod << endl;
}
return 0;
}
我理解问题制定者给出的解决方案。它是找到每个元素的主要因素,然后以有效的方式消除它们。
但我不清楚的是,为什么我的算法不起作用,错误在哪里。不幸的是,测试用例不是公开的,否则我本可以自己调试代码。
有人能帮我发现吗?
谢谢!
这是错误的,因为您必须找到数组的minimum
乘积。使用代码时,您不需要搜索以最小化此乘积,只需在可能的情况下对整数进行除法。
考虑以下示例:
1
5
1 3 6 9 2
输出必须为1。根据您的代码,它是9。为什么?因为你取3和6对,得到1 1 2 9 2
。但如果你得到3和9,你就得到1 1 6 3 2
。。。然后你就可以拥有1 1 2 1 2
了。
相关文章:
- 我的字符计数代码计算错误.为什么
- C++ 错误 为什么这个矢量不输出?
- 当在函数调用中递增值时,程序正常工作,但是如果我们在单独的行中增加值而不是呼叫函数,则会出现错误.为什么
- 我正在将QPixmap传递给QAbstractButton::setIcon而不是QIcon,但我没有得到错误...为什么?
- 在 ZeroMQ 中绑定订阅者套接字并连接发布者套接字会在代码运行时给出错误.为什么
- 分段错误:为什么这里的数组索引越界了
- Box2D不寻常的错误.为什么 0阻止错误
- c++分段错误:为什么这个程序给出运行时错误(SIGSEGV)
- 链接列表错误 - 为什么头和尾引用指向相同地址
- VC++的一个大错误?为什么初始值设定项列表不对结构进行值初始化
- 分配大量内存会产生错误?为什么
- 得到一个段错误.为什么
- 变量名称与函数名称相同,导致编译器错误.为什么
- 访问在相应类的静态函数中创建的对象的私有成员变量不会导致错误.为什么?
- Qt5:此代码使用msvc2012编译正常,但使用MinGW编译时出现错误..为什么?
- 奇怪的错误-为什么编译器试图调用复制构造函数
- 我在使用 std::map 时收到此错误.为什么
- 我写了这个程序来反转链表中的元素,在编译这个程序后,在reverse()中显示错误.为什么
- Valgrind报告写入错误?为什么?
- 编译器错误 - 为什么我不能在Sublime Text 2中构建C++?