我正在解决这个来自CodeForces的问题:
我们给出了三个值:R
、G
和B
,它们分别代表三堆中红色、绿色和蓝色糖果的数量。Tanya不能一天吃两个相同颜色的糖果,也就是说,她每天吃两个不同颜色的糖果。找出Tanya可以吃糖果的最大天数。
int main() {
int t, r, g, b;
cin>>t;
while(t--) {
int counter=0;
cin >> r >> g >> b;
while(r && g) {
r--;
g--;
counter++;
}
while(g && b) {
g--;
b--;
counter++;
}
while(r && b) {
r--;
b--;
counter++;
}
cout<<counter<<"\n";
}
return 0;
}
即使您的解决方案得到了纠正,它也可能无法通过对codeforces的所有测试,因为它的时间复杂度与输入数字的值成正比。但是,存在一个解,它的运行时间与输入数无关。
首先,对3
输入数字进行排序。如果它们没有排序,那么在每次迭代中,我们将需要找到最大和最小元素,然后递减它们。如果这些数字是排序的,那么我们马上就知道最大和最小的数字在哪里,所以我们可以立即递减它们。
现在,在排序之后,让我们考虑a、b、c的可能情况:a<=b<=c
:
3.这种方法可以在O(1)
时间复杂度下实现。
...
int main() {
int t;
std::cin >> t;
for (int i = 0; i < t; i++) {
std::vector<int32_t> array(3);
for (int32_t& value : array) {
std::cin >> value;
}
std::sort(array.begin(), array.end());
int32_t days = 0;
int32_t diff = array[2] - array[1];
days += (std::min(array[0], diff));
array[0] -= days;
array[2] -= days;
array[2] -= array[0] / 2;
days += (array[0] / 2);
array[1] -= array[0] / 2;
days += (array[0] / 2);
days += std::min(array[1], array[2]);
std::cout << days << std::endl;
}
return 0;
}
...
给出不同整数的列表 我的想法:< br >一种简单的方法是一个接一个地选择一个元素,看看它形成的完美子集的大小,然后我们可以简单地返回最大值。这将是计算密集型的。< br >有什么好的解决方案吗
给定一个数N,我们如何求最大P*Q null 因此,暴力解决方案起作用。 再进一步,我们看到Q_max<=n/2,如果我们确实同意P =√n。 我们可以将我们的解决方案集细化为仅有那些值{P,n\2},其中n\2>=√N。 这可能看起来微不足道,但它只是消除了可能的解决方案集的1/3。 我们是否可以添加其他聪明的程序来进一步减少设置?
我试着写一个代码,它接受一个介于1和1_000_000之间的整数,并返回一个比相同数字的整数大的最小整数,如果它不存在,则打印0。 举个例子 输入:156 输出165 输入330 输出0 输入27711 输出71127 我的问题是,下面的代码没有为其他输入返回正确的输出。 例如,在输入4231中,输出应该是4312。 我很难找到为每个输入返回正确输出的最佳算法。 TNX提前 }
本文向大家介绍C ++中给定乘积的N个整数的最大GCD,包括了C ++中给定乘积的N个整数的最大GCD的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个整数N和P。P是N个未知整数的乘积。我们必须找到这些整数的最大可能GCD。假设N = 3,且P = 24,则不同的组将像{1,1,24},{1,2,12},{1,3,8},{1,4,6},{2 ,2,6},{2,3,4}。GCD为:1、1、1
给定一个无序整数列表,以这种方式打印两个总计为的整数(int 1小于或等于int 2,它们之间用空格隔开)。假设整数列表中总是有的解。int1和int2必须是正整数。 如果有多个解决方案,请打印差异最小的整数对。 例子: 这是我的代码,但是根据我们的编译器(这是我们班的一个练习),我对隐藏的测试用例有错误的输出。 更新:代码工作!
正整数的二进制权重是其二进制表示中1的个数。例如,十进制数1的二进制权重为1,十进制数7(二进制为111)的二进制权重为3。 给定一个正整数N,找出与N具有相同二进制权重的大于N的最小整数。 我的解决方案运行良好,但它的复杂性似乎是O(NlogN)。这可以通过其他方法在O(N)或O(logn)中实现吗?