Проблема Codeforces 158B-http://codeforces.com/problemset/problem/158/B
Я получаю неожиданный вывод для тестового примера 5. Я думаю, что я должен получить 1 как вывод, но я его как 2. Пожалуйста, направьте меня. Журнал судьи:
Тест: № 5, время: 30 мс, память: 380 КБ, код выхода: 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.
Просто для тех, кто смотрит на этот вопрос, этот это довольно простой ответ на проблему.
Другие советы:
b
, c
, d
, а также e
все кажутся похожими.