Witam, mam pewien problem z zadankiem ze SPOJA. Chodzi konkretnie o http://pl.spoj.com/problems/KC024/
Napisałem kod, dla wszystkich testów z forum spoja + moich własnych działa, mimo to cały czas dostaje WA. Może źle rozpatrzyłem skrajne przypadki?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int liczba=0,ilosc=0,wysokosc=0,suma=0, liczba2=0, element=0, j;
vector <int> v;
int check(int x, int liczba2)
{
if(x==-1) return 0;
if(v[x]<=liczba2)
{
liczba2 -= v[x];
if(liczba2==0) return 1;
check(x-1,liczba2);
}
else check(x-1,liczba2);
}
void ciag()
{
ios_base::sync_with_stdio(0);
cin >> liczba;
cin >> ilosc;
for(j=0; j<ilosc; j++)
{
cin >> wysokosc;
if(wysokosc<liczba) { v.push_back(wysokosc); suma += wysokosc; element++;}
if(wysokosc==liczba) {suma=liczba; break;}
}
if(ilosc==0) cout << 0;
else
if(suma<liczba) cout << 0;
else if (suma==liczba) cout << 1;
else
{
liczba2=liczba;
sort(v.begin(), v.end());
for(j=element-1; j>=0; j--)
{
if(j==0) { cout << 0; break; }
if(check(j,liczba2)==1) { cout << 1; break; }
}
}
}
int main()
{
ciag();
}
przykładowe działanie programu:
In:
21 6 13 6 14 10 2 4
1.sortuje elementy: 14 13 10 6 4 2
2.wykonuje odejmowanie (funkcja o nazwie check) 21-14=7, 7-1=1 <-- nie dostałem 0 więc sprawdzam kolejna liczbe ( i tak do końca wektora) :
21-13=8, 8-6=2, 2-2=0 <-- dostałem 0, wypisuje 1, kończe program.
Dla przypadku, który w żadnym wywołaniu funkcji check nie zwróci mi 0, wypisuje 0 i kończe program.
Proszę o pomoc, bo nie wiem gdzie jest błąd, może o czym zapomniałem?
pozdrawiam