Manipulacja rankingu

0

Witam!
Ostatnio zajmowałem się zadaniem Manipulacja Rankingu http://main.edu.pl/pl/archive/ilocamp/2010/ran .
Napisałem taki program:

 
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;

ll n, m, tab[1000 + 7][1000 + 7], setki, takie_same, wynik=1;

int main()
{
    ios_base::sync_with_stdio(0);
    
    cin >> n >> m;
    for(int i=1; i<=m; i++)
    {
        cin >> tab[1][i];
        if(tab[1][i]==100)setki++;
    }
    for(int i=2; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cin >> tab[i][j];
            if(tab[i][j]==tab[1][j])takie_same++;
        }
        if(takie_same==setki)wynik++;
        takie_same=0;
    }
    cout << "1" << " " << wynik;
    
    return 0;    
}

Program działał na tescie przykładowym, ale kiedy wrzuciłem na maina to dostałem 0 punktów.
Następnie zajrzałem na przykładowe rozwiązania tego zadania w internecie i za ich pomocą napisałem taki program:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;

ll n, m, tab[1000 + 7][1000 + 7], egzekwo=1;
bool lepszy;

int main()
{
    ios_base::sync_with_stdio(0);
    
    cin >> n >> m;
    for(int i=1; i<=m; i++)
    {
        cin >> tab[1][i];
    }
    for(int i=2; i<=n; i++)
    {
        lepszy=true;
        for(int j=1; j<=m; j++)
        {
            cin >> tab[i][j];
            if(tab[i][j]!=100 && tab[1][j]==100)lepszy=false;
        }
        if(lepszy==true)
        {
            egzekwo++;
        }
    }
    cout << "1" << " " << egzekwo;
    
    return 0;    
}
 

Teoretycznie doprowadzają one do tego samego wniosku, ale jednak pierwszy dał mi 0 punktów, a drugi 100. Nie rozumiem gdzie w tym pierwszym jest błąd. Czy mógłby mi to ktoś wytłumaczyć? Z góry dziękuję za pomoc.

C.P.

0

Nie masz wyzerowanych zmiennych setki, takie_same

0

Mówiono mi, że jak zmienna jest deklarowana globalnie to wtedy automatycznie jest ustawiona na 0, tak i zawsze korzystałem i tak działało.

PS: Zerowanie też nic nie dało.

0

To że tyle samo pozytywnych wyników to za mało.

http://ideone.com/2ZEqJf
http://ideone.com/Z58Pir

0

Tylko że ja nie sprawdzam czy jest tyle samo pozytywnych wyników, ale czy są takie same. Jeśli we wszystkich miejscach mieli to samo to wtedy zgadza się to z ilością rozwiązań pierwszego.

0

Dostałeś mały przykład dla którego masz różnicę.
Patrz uważnie linki.

Twój kod widzi że drugi zawodnik ma tyle samo setek więc uważa że będzie z nim egzekwo, ale widać że tak nie jest, przecież wystarczy wyzerować zadanie trzecie i pierwszy zawodnik jest najlepszy.

0

Rozumiem o co ci chodzi i przewidziałem właśnie taką ewentualność, i chciałem ten problem zlikwidować tym, że w tej linijce

if(tab[i][j]==tab[1][j])takie_same++; 

nie odwołuję się bezpośrednio czy dana liczba jest setką czy nie, tylko czy u pierwszego zawodnika jest dokładnie w tym samym zadaniu dokładnie ten sam wynik i jeśli ten drugi miałby zrobione wszystkie zadania pierwszego wtedy i liczba zadań zrobionych przez pierwszego równałyby się tyle samo. Nie mogę spostrzec błędu w swoim myśleniu :/

PS: Ok, już widzę :D, dzięki za pomoc :P, temat do zamknięcia.

0

Z trzecim zawodnikiem masz wspólną setkę oraz wspólne zero, razem to daje takie_same=2, czyli tyle samo co setek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1