infoarena

infoarena - concursuri, probleme, evaluator, articole => .CAMPION => Subiect creat de: Visan Radu din Februarie 12, 2012, 17:34:57



Titlul: Sircifre
Scris de: Visan Radu din Februarie 12, 2012, 17:34:57
Problema este aceasta: http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1216
Cod:
#include <stdio.h>
#include <stdlib.h>

 

int main()
{
    //freopen("sircifre.in","r",stdin);
    //freopen("sircifre.out","w",stdout);
    int v[500],n,i,gasit=1,ap[10],k=0;
    scanf("%i", &n);
    for(i=0;i<10;i++)
    {
                     ap[i]=0;
    }
    for(i=0;i<n;i++)
    {
                    scanf("%i", &v[i]);
                    ap[v[i]]++;
    }
    while(gasit && n)
    {
               gasit=0;
               k=0;
               for(i=0;i<n-1;i++)
               {
                                 if(abs(v[i]-v[i+1])==1)
                                 {
                                         gasit=1;
                                         k=i;
                                         ap[v[i]]--;
                                         ap[v[i+1]]--;
                                         break;
                                 }
               }
               if(gasit)
               {
                        if(k<n-2)
                        {
                               for(i=k;i<n-2;i++)
                               {
                                     v[i]=v[i+2];
                               }
                        }
                        n-=2;
               }
    }
    gasit=0;
    for(i=0;i<10;i++)
    {
                     if(ap[i])
                     {
                               gasit=1;
                               break;
                     }
    }
    if(gasit)
    {
         for(i=0;i<10;i++)
         {
                     if(ap[i])
                     {
                             printf("%i %i\n", i, ap[i]);
                     }
         }
    }else
    {
         printf("-1\n");
    }
    return 0;
}
Iau doar 60 de pct pe sursa asta, pe celelalte 4 teste primesc WA. Am incercat sursa pe primul test picat, care are n=400 si imi afiseaza un 2 in plus si un 4 in minus (sau invers, nu mai tin minte exact). Care ar fi problema?


Titlul: Răspuns: Sircifre
Scris de: Eftime Andrei Horatiu din Februarie 05, 2014, 23:03:32
Am avut si eu aceasi problema,cu o sursa care facea cam acelasi lucru. Parcurge vectorul ,vezi daca gasesti numere a caror diferenta e 1, le elimini(doar pe cele pe care le-ai gasit initial), iti faci noul vector fara cele 2 elemente si continui sa faci asta pana nu mai ai ce elmina,apoi afisezi elementele ramase . Asta-i tot,sper sa iei suta ea  8)


Titlul: Răspuns: Sircifre
Scris de: Adrian Craciun din Februarie 06, 2014, 01:17:34
Si a durat numai doi ani ca sa primeasca raspuns.
Te rog, citeste si data posturilor. Te rog eu.