infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: alexandru din Ianuarie 02, 2009, 10:37:04



Titlul: Despre compilatoru de pe sit?
Scris de: alexandru din Ianuarie 02, 2009, 10:37:04
Ce  inseamna  Killed  by  signal 11  (SIGSEGV)?
 


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: Andrei Misarca din Ianuarie 02, 2009, 11:14:39
Citeste Documentatia Evaluatorului (http://infoarena.ro/documentatie/evaluator)
Probabil iesi din limitele unui vector


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: alexandru din Ianuarie 02, 2009, 12:58:25
Pot  sa  aflu  care sunt........nr de  teste?


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: Maria Stanciu din Ianuarie 02, 2009, 13:28:41
Din cate vad tu incerci sa rezolvi problema Tablete. Aceasta problema are 10 teste. Poti vedea numarul testelor in monitorul de evaluare daca dai click pe punctaj dupa ce sursa a fost evaluata, insa nu poi vedea testele propriu zise decat pentru cateva probleme pentru care acest lucru a fost permis. Problema Tablele nu se afla printre ele  :).


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: Andrei Misarca din Ianuarie 02, 2009, 13:37:07
Pentru a afla de ce iti crapa testeaza cu datele maxime (la problema tablete se citesc doar 2 numere, deci nu e o problema)


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: alexandru din Ianuarie 04, 2009, 13:33:59
Pai  am  facut  am facut  si  un program  care  testaeza daca  raspunsul  ii  corect si  mere. Ma  rog  pt  k=1  nu  mere  dar nici  nu trebeuie  ,  este  imposibil. Si aici   imi apare  la 2  Solutii  Gresite...si  m-am  uitat  pe  varianta oficiala  si  ideea  e  aproape  cu ce  m-am  gandit eu


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: Maria Stanciu din Ianuarie 04, 2009, 14:41:17
Trebuie sa fie o problema undeva in solutia ta. Din cate vad, ai probleme cu timpul de executie si ai scapat de raspunsurile gresite pe care le aveai. Inseamna ca implementarea solutiei (chiar daca ideea e asemanatoare cu cea oficiala) nu duce la o rezolvare care sa se incadreze in timp.

De ce nu citesti mai intai topicul problemei Tablete: http://infoarena.ro/forum/?topic=3476.0 ? Eventual, scrie acolo cum ai rezolvat problema si daca cineva observa "ineficienta" probabil vei primi mai mult ajutor decat aici  :).


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: alexandru din Ianuarie 05, 2009, 06:31:47
Multumesc  pt  idee....l-am  postat  si acolo, dar cred k  is slabe sanse asa  k postez  si  aici"
Ma  poate  ajuta cineva?  Am vazut  solutia  oficiala  dar  vreau sa  o rezolv singur, sa  zic, dar  tot trec de  limita  de  timp  :
Eu  m-am  gandit la  urmatoarea  rezolvare:
Pun  pe  coloana   k   un  elemnt  par  a.i    sa  pot  pune  elemtele   de la  k-1......1 daca  nu  se  poate  trec la  urmatorul element  par  si verific daca  pot
Ca sa  nu folosesc de  2  ori  acelasi  nr   folosesc vectorul  uz cu semnificatia  uz[ i ]=0  nefolosit  uz[ i ]=1  folosit.
Si  la  afisarea  afisez  matricea  pana  la k  apoi afisez  numerele  ramase  care vor fi  >de cat cele puse  in  partea  opusa
Aici   gasiti  implementarea:
http://infoarena.ro/job_detail/239250?action=view-source



Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: Emanuel Cinca din Ianuarie 05, 2009, 17:31:06
1. in topicurile speciale pentru probleme vei primi raspunsuri, ai rabdare doar... in 24h de obicei ai raspuns...
2. nu toti putem vedea sursa asa ca degeaba ai pus link... eventual posteaz-o pe forum cu tagul "code"


Titlul: Răspuns: Despre compilatoru de pe sit?
Scris de: alexandru din Ianuarie 05, 2009, 18:33:56
Acesta-i  codul:
Cod:
#include<stdio.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define Nmax 1000
FILE *fin=freopen(InFile,"r",stdin),*fout=freopen(OutFile,"w",stdout);
long  a[Nmax+1][Nmax+1];
int   n,K,uz[Nmax*Nmax+2];
void Tablete(int i)
   {if(i==n+1) return;
    int ok=1;
    long nr=i*K%2==0?i*K:i*K+1,lg=0,j,v[Nmax+1],nr2;
    do
     {if(!ok)
        {nr+=2; for(j=1;j<=lg;j++) uz[v[i]]=0;}
      ok=1;
      if(uz[nr]) while(uz[nr]&&nr<=n*n) nr+=2;
      a[i][K]=nr; uz[nr]=1; v[++lg]=nr;
      for(j=K-1;j>=1&&ok;j--)
         {nr2=a[i][j+1]-1;
          if(uz[nr2]) while(uz[nr2]&&nr2>=1) nr2--;
          if(nr2<=1&&j>1) ok=0;
            else {a[i][j]=nr2; uz[nr2]=1; v[++lg]=nr2;}
         }
     }while(!ok);
    Tablete(i+1);
   }
int main()
  {long i,j,nr;
   scanf("%d %d",&n,&K);
   fclose(fin);
   Tablete(1);
   for(i=1;i<=n;i++)
      {nr=n-K;
       for(j=1;j<=K;j++) printf("%ld ",a[i][j]);
           for(j=a[i][K];j<=n*n&&nr;j++)
              if(!uz[j]) {printf("%ld ",j); uz[j]=1; nr--;}
       printf("\n");
      }
   fclose(fout);
  }