视频:https://ideone.com/Ba3Nw7
#include <iostream>
using namespace std;
int main() {
int i,n,b25,b50,temp;
cin>>n;
for(i=0;i<n;i++)
{
cin>>temp;
if(temp==25)
b25++;
else if(temp==50)
{
if(b25>0)
{
b25--;
b50++;
}
else
{
cout<<"NO";
return 0;
}
}
else if(temp==100)
{
if(b25>0 && b50>0)
{
b25--;
b50--;
}
else if(b25>2)
b25-=3;
else
{
cout<<"NO";
return 0;
}
}
}
cout<<"YES";
return 0;
}
尝试的测试用例是:2.25 100ideone的输出是"否",这是正确的答案,但在codeforces自定义测试中,它给出了"是",为什么?
我看到的一个非常明显的错误是没有初始化变量b25
和b50
。
在您的代码中,您不断地递增和递减这两个变量,因此,您的答案每次都会出错。
我建议:
int i,n,b25=0,b50=0,temp=0;
您可能得到了正确或错误的答案,因为任意任何值都可以存储在b25
和b50
中。有时它可能满足NO
条件,而在其他时候,它可能满足YES
条件。
如果您的变量是静态的或在文件范围内,它们将被初始化为0。但是,您的变量是本地定义的,因此其值将是不确定的,从而调用未定义的行为。
您使用的变量b25
、b50
未初始化,但根据代码猜测,您假设它们最初为零。
它们的初始值目前可能因运行而异,因此在其中一个平台上再次使用可能会产生更多不同的结果。(除非ideone使用BSD或默认情况下内存最初为零的东西)