测试用例的意外输出
Unexpected output for test case
Codeforces问题158B-http://codeforces.com/problemset/problem/158/B
我得到了测试用例5的意外输出。我认为我应该得到1作为输出,但我是2。请指导我。法官日志:
测试:#5,时间:30ms,内存:380KB,退出代码:0,检查器退出代码:1,判决:WRONG_ANSWER输入2.2 1输出2.答复1.检查器日志应为错误答案1,找到2
我的解决方案:
#include<iostream>
using namespace std;
int n,a[100000],i,b,c,d,e,f,g,h;
int main()
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
b=0;
c=0;
d=0;
e=0;
for(i=0;i<n;i++)
{
if(a[i]==1) //To check for number of 1,2,3 and 4 membered groups.
b=b+1;
if(a[i]==2)
c=c+1;
if(a[i]==3)
d=d+1;
if(a[i]==4)
e=e+1;
}
f=e;
if(d>b) //More 3 member groups than 1.
{
f=f+d; //f=f+b+(g-b) 3 and 1 member groups combine.Remaining 3 i.e. (g-b) member groups will can't combine with 2 member groups.Hence,they take separate taxies.
g=-1;
}
if(b>=d) //More 1 member groups than 3.
{
f=f+d;
g=b-d; //g=remaining 1 member groups.
}
h=(2*c)%4; //Empty seats in last taxi.Possible values can be 0,1,2,3.
if(h==0)
f=f+(c/2);
else
f=f+((c+1)/2);
if(g!=-1)
{
g=g-h; //Remaining 1 member groups after combining with remaining seats in last 2 member taxi.
if((g%4)==0)
f=f+(g/4);
else
f=f+(g/4)+1;
}
cout<<f;
}
如果您的输入是2 2 1
,则b
和c
都将为1,使第一组条件句中的f
为0,g
为1。h
将是(2 * 1) % 4
或2,从而对f
(0+1=1)进行更新。由于g
是1,g-h
是-1,这将导致您执行f=f+(g/4)+1
,即整数数学中的f=1 + (-1/4)+1
,即1+0+1=2。
我想您想检查是否是g-h>0
而不是g!=-1
,但有很多地方可以简化代码。请注意,使用调试器并逐步完成这项工作会向您显示问题的速度要快得多,并且比询问SO更有助于提高您的技能
对于其他关注这个问题的人来说,这是一个相当简单的问题答案。
- 用手做,看看你是否得到同样的答案。如果你手工得到的答案与计算结果相同,那么你的算法就是错误的。如果你不这样做,你的代码就是错误的
- 打印中间计算中的变量,看看它们是否是您认为应该的
- 如果重要的话,请确保在每次使用之前重新初始化变量(包括数组)
其他提示:
- 请使用switch语句,而不要使用多个if equal语句
- 命名变量。它可以帮助您在查看代码时保持跟踪
- 如果有多个用途相似的变量,请考虑使用数组。
b
、c
、d
和e
看起来都很相似
相关文章:
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 字符串比较中的意外输出
- 每次在 c++ 中输出不同(意外行为)
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 标准输出C++意外行为
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出