无法在代码厨师七月挑战中找到我的逻辑错误
Unable to find error in my logic in a codechef july challenge
Chef有一个计算器,它有两个屏幕和两个按钮。最初,每个屏幕都显示数字零。按下第一个按钮会使第一个屏幕上的数字增加 1,每次单击第一个按钮都会消耗 1 个单位的能量。
按下第二个按钮会将第二个屏幕上的数字增加当前显示在第一个屏幕上的数字。每次单击第二个按钮都会消耗 B 个单位的能量。
最初,计算器具有 N 个能量单位。
现在厨师想知道最大可能的数字是多少,他在有限的能量下进入计算器的第二个屏幕。 这是链接:https://www.codechef.com/JULY17/problems/CALC/
比赛结束了,所以我不想作弊。 这是我对问题的解决方案:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,b;
cin>>n>>b;
int count = 1;
int ans = n-b;
while((n - count*b)>=0)
{
if(count*(n - count*b)>ans)
ans = count*(n - count*b);
count++;
}
cout<<ans<<endl;
}
return 0;
}
我已经尝试了我能想到的所有测试用例......谁能帮忙找到我的逻辑中的错误。
我认为的错误可能是:
1:您没有处理 N<=B 案例
if (n<=b) {
ans = 0;
}
2:您没有处理子任务 2 约束
long long int ans = n-b;
3:最后答案将是 n-b,如果 b 小于 n 的三倍
if (n<=3*b) {
ans = n-b;
}
4:寻找直接的方法
k1 = ((n-(b+1))/(2*b))+1;
i2 = (double((n-(3*b)))/(2*b));
i1 = ceil(i2);
i = n-((3*b)+((i1-1)*(2*b)));
ans = ((2*b)*((k1*(k1-1))/2))+(k1*i);
cout << ans;
希望这对:)有所帮助
这主要是一个数学问题: 跟
N
能量单位-
B
第二屏的能源成本 -
p
点击第一个按钮的次数 s
单击第二个按钮的次数
你试图最大化
s * p
而
p + B * s <= N
所以
p <= N - B * s
然后
最大化:N * s - B * s²
s0 = 0
s1 = N / B
sMax 是(s0 + s1) / 2
->N / (2*B)
所以最大值是
N²/2B - N²/4B -> N²/4B
所以
std::cin >> n >> b;
std::cout << n * n / b / 4 << std::endl
相关文章:
- C++:处理错误,看不懂我的错误
- 我用C++做了一个计算器,但我对"type of calculator"的要求循环了两次。有人可以帮助指出我的错误吗?
- 我不明白我的错误需要返回一个指针数组
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 这是 Clang 的错误还是我的错误?
- [堆栈][列表]我无法理解我的错误
- 检查我的 C++ 代码!我的cmd屏幕在运行后关闭!我的错误可能是什么
- 在C 中继承类功能:一般问题,以更好地理解,如果有人可以指出我的错误
- 我正在尝试学习使用 SDL 制作游戏。我的书教SDL1.2.3,我无法让它在Visual Studio上工作。谁能帮忙?我的错误:
- 马洛克或我的错误
- 我正在尝试遍历 20x20 网格并计算产品,但总是得到不正确的结果。你能帮忙发现我的错误吗?
- C++自动问题还是我的错误?
- 这是标准库错误,还是我的错误
- while 循环的两个条件。我的错误是什么?
- 我的错误,还是英特尔编译器的错误?非静态成员错误的大小
- 将每个单词的第一个字符大写-帮助查找我的错误
- 是什么导致了我的错误?我试图创建一个球员类和存储球员的名字作为一个变量
- 如何解决我的错误LNK2019
- 找不到我的错误!错误:"("标记之前的预期标识符
- 找不到我的错误 - 抽象错误