【发布时间】:2021-09-01 06:32:23
【问题描述】:
我是一名编程初学者,并试图解决澳大利亚信息学奥林匹克竞赛中的问题。
我被这个问题困住了,尽管对我来说它看起来非常简单直接。 这是问题的链接:
下面是我的代码的 sn-p,只得分 15%:
void solve(){
ll r,b,s,nr,nb;
cin >> r >> b >> s >> nr >> nb;
ll ans = 0;
if (s + r < nr || s + b < nb) ans = 0;
else {
ll diff_b, diff_r;
vector<ll>sum;
diff_r = nr - r -1;
sum.push_back(s - diff_r);
diff_b = nb - b - 1;
sum.push_back(s - diff_b);
sum.push_back(s - diff_b - diff_r - 1);
ll min = INFINITY;
for (int i = 0 ; i < sum.size(); i++) if (sum[i] < min) min = sum[i];
ans = min;
}
cout << ans;}
在这里,我正在考虑减少 spare 和初始红色/蓝色,如果它们分别大于所需的红色/蓝色,则减少后的红色/蓝色 + spare 将等于所需的红色/蓝色 - 1。
请帮助我了解我做错了什么并了解解决此问题的好方法!
【问题讨论】:
-
请在您的问题中直接包含问题的文本,而不是作为网络链接。 (我什至无法打开你的链接)
标签: c++ algorithm math greedy cp