infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: ditzone din Martie 30, 2006, 20:21:03



Titlul: 211 Spirala
Scris de: ditzone din Martie 30, 2006, 20:21:03
Aici puteţi discuta despre problema Spirala (http://infoarena.ro/problema/spirala).


Titlul: Raspuns: 211 Spirala
Scris de: nivan din Aprilie 25, 2006, 12:39:29
 Deci eu pur si simplu merg pe spirala si pun elementele in un vector auxiliar. Dupa aia verific daca vectorul e progresie aritmetica.

 E ceva special la testul 2 (adica e un caz particular ceva)? Ca ala imi ia WA.


Titlul: Raspuns: 211 Spirala
Scris de: andreit1 din Aprilie 25, 2006, 17:19:10
Ai grija la overflow si ala cazuri particulare. Si incearca sa cauti mai atent greselile inainte sa intrebi pe forum... o sa le ti mai usor minte daca le descoperi singur.


Titlul: Raspuns: 211 Spirala
Scris de: nivan din Aprilie 25, 2006, 18:23:06
 Nu era caz particular. Pur si simplu mai trebuia sa pun un break de care uitasem complet.


Titlul: Raspuns: 211 Spirala
Scris de: Nica Andrei din Mai 03, 2006, 00:04:13
am incercat foarte mult sa vad care ar putea sa fie problema  ](*,),dar nu inteleg de ce la testul 2 nu imi da ????
credeti ca ati putea sa imi dati si mie testul ??


Titlul: Raspuns: 211 Spirala
Scris de: Dobre Catalin Andrei din Mai 03, 2006, 06:14:02
Testele nu se mai posteaza, scrie in regulament.


Titlul: Raspuns: 211 Spirala
Scris de: Toma Radu din Mai 03, 2006, 21:52:32
Vezi posturile de mai sus....poate asta te ajuta....daca nu implementeaza mai multe cazuri si afiseaza spirala parcursa....asa o sa vezi unde gresesti  :)


Titlul: Raspuns: 211 Spirala
Scris de: Adrian Bona din Mai 14, 2006, 19:13:19
eu iau 90 pe problema
parcurg marginile, cand am terminat "merg in interior", cred ca gresesc la conditiile de terminare! nush


Titlul: Raspuns: 211 Spirala
Scris de: Adrian Bona din Mai 29, 2006, 19:43:45
m-am tot chinuit dar tot 90!
sugesti? :?


Titlul: Re: 211 Spirala
Scris de: Valentin Stanciu din Mai 29, 2006, 22:16:04
Vezi cat de mari sunt testele (testul) pe care nu le iei dupa timpii de executie.. daca este unul mic, vezi ce se intampla cu un dreptunghi de 2 pe 2 si daca il parcurge cum trebuie programul tau... apoi incearca alte teste "cheie"; daca testul este unul mare, vezi poate ai probleme la dimensiunile matricei..
.. daca tot nu merge.. lasa problema balta o saptamana, apoi rescrie-o de la 0 fara sa te mai gandesti la vechea rezolvare


Titlul: Raspuns: 211 Spirala
Scris de: mce mec ecm din Septembrie 04, 2006, 21:46:44
mah si totusi cam care ar fi "teste cheie" ?  :-s (infara de 2 2 pt matrice)
ca totusi nu cred sa fie d la tipu datelor. Dak lucrez in Pascal n-ar trebui sa fie nici o problema dak folosesc longint pt numerele din matrice...  :?

( tot testu 2 imi da WA, k restu merg)





Titlul: Raspuns: 211 Spirala
Scris de: Toma Radu din Septembrie 04, 2006, 23:22:14
Vezi daca pe matrici de dimensiuni (m, n) 3 4, 3 5, 4 5, 4 3, 4 4, 5 4, 5 3 parcurgerea este buna. Eu asa am luat 100


Titlul: Raspuns: 211 Spirala
Scris de: nivan din Septembrie 05, 2006, 18:57:35
 Daca testul 2 iti da WA... examineaza mai bine opririle. Eu unu acolo greseam (luam WA pe tetsul 2, la fel ca tine) pentru ca nu opream corect in anumite cazuri si imi parcurgea anumite elemente de 2 ori.


Titlul: Răspuns: 211 Spirala
Scris de: Ionescu Robert Marius din Aprilie 11, 2007, 14:06:10
cate cazuri speciala st ? ca eu iau 70 pct:( si am gasit dooar un caz

eu gresesc la testele 10 8 si 6 au ele ceva in special? :(

Editat de moderator : Incearca sa nu mai postezi de 2 ori consecutiv :)


Titlul: Răspuns: 211 Spirala
Scris de: Gabriel Bitis din Mai 06, 2007, 19:02:06
poate cineva sa imi dea niste teste mai "dubioase".. k iau 80 puncte.. (WA p testele 5 si 9)... si nu imi dau seama ce e gresit.. sau ce nu iau in considerare..


[later edit] never mind.. am rezolvat..:P


Titlul: Răspuns: 211 Spirala
Scris de: Gabi Munteanu din Martie 13, 2008, 22:34:48
Imi puteti da si mie un hint pentru prblema :-k? parcurg matricea corect in spirala(am testat toate tipurile de matrice postate) am calculat ratia si diferentele dintre elemente x[ i ]-elementul precedent si tot iau 50 de puncte ](*,) (imi da WA la 4 6 8 si 10+ kill by signal la 9). poate imi sugerati o matrice pe care sa testez


Nu mai conteaza am rezolvat cu ajutorul unui coleg.  HINT ptr ultimele 3 teste matricea terbuie sa fie mai mare de ex 1000 pe 1000


Titlul: Răspuns: 211 Spirala
Scris de: Andrei Grigorean din Martie 14, 2008, 13:12:46
In general e bine sa declari matricele folosite un pic mai mari decat limitele din enunt. Nu se stie niciodata cand ai nevoie de un N+1 sau un M+2 ca indici ai matricei.

In plus, in C/C++ daca declari un vector V[100], se aloca pozitii incepand de la v[0] la v[99]. Deci daca vrei sa accesezi chiar v[100], nu va merge bine programul :).


Titlul: Răspuns: 211 Spirala
Scris de: Simoiu Robert din Martie 25, 2010, 16:49:24
Iau WA la testul 3. Care sa fie problema, am incercat toate variantele de matrice puse pe forum ...
[LE] Am reusit ....


Titlul: Răspuns: 211 Spirala
Scris de: Vlad Tarniceru din Mai 02, 2010, 20:04:37
conteaza ordinea in care sunt afisate? de ex :

2 3
-1 -3 -5
-15 -5 -7

e corect si

NU
-5 -7


si


NU
-7 -5


nu?si poti avea si

3 3
9 8 7
2 1 6
3 4 5

?


Titlul: Răspuns: 211 Spirala
Scris de: Simoiu Robert din Mai 02, 2010, 20:11:32
Da, conteaza. Trebuie scrise in ordine crescatoare parcurgerii in spirala, adica corect este -7 -5.
Citat
Daca spirala nu formeaza progresie aritmetica, pe prima linie a fisierului de iesire spirala.out se va scrie cuvantul NU. Pe urmatoarea linie se vor scrie doua numere naturale, reprezentand primele doua numere din tabloul dat in cazul carora nu este indeplinita proprietatea de progresie aritmetica.
Sper ca ai inteles :)


Titlul: Răspuns: 211 Spirala
Scris de: Vlad Tarniceru din Mai 02, 2010, 21:30:18
mi-a iesit de 100 puncte multumesc  :D


Titlul: Răspuns: 211 Spirala
Scris de: UAIC.VlasCatalin din Iunie 28, 2011, 22:23:17
am verificat de citeva ori programul si tot nu inteleg ce are specific testul 2 ](*,) ](*,)


Titlul: Răspuns: 211 Spirala
Scris de: FMI Paun Matei din Ianuarie 08, 2012, 23:54:20
Nu inteleg de ce iau numai 30 am dat vreo 10 teste si merg toate ](*,)
Poate sa ma ajute cineva:
Cod sursa:

Cod:
#include<stdio.h>
int a[101][101],i,j,n,m,en,o,dif;
char b[101][101];
int main()
{
freopen("spirala.in","r",stdin);
freopen("spirala.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
scanf("%d",&a[i][j]);
dif=a[1][1]-a[1][2];
for (en=n*m,o=0; ; )
{
for (i=1+o;i<m-o;++i)
{
b[1+o][i]=b[1+o][i+1]='1';
if (a[1+o][i]-a[1+o][i+1]!=dif&&i+1<=m)
{
printf("NU\n%d %d\n",a[1+o][i],a[1+o][i+1]);
return 0;
}
--en;
}
if (en<2) break;
for (j=1+o;j<m-o;++j)
{
b[j][m-o]=b[j+1][m-o]='1';
if (a[j][m-o]-a[j+1][m-o]!=dif&&j+1<=n)
{
printf("NU\n%d %d\n",a[j][m-o],a[j+1][m-o]);
return 0;
}
--en;
}
if (en<2) break;
for (i=m-o;i>1+o;--i)
{
b[n-o][i]=b[n-o][i-1]='1';
if (a[n-o][i]-a[n-o][i-1]!=dif&&i-1>1+o)
{
printf("NU\n%d %d\n",a[n-o][i],a[n-o][i-1]);
return 0;
}
--en;
}
if (en<2) break;
for (j=n-o;j>1+o;--j)
{
b[j][1+o]=b[j-1][1+o]='1';
if (a[j][1+o]-a[j-1][1+o]!=dif&&j-1>1+o)
{
printf("NU\n%d %d\n",a[j][1+o],a[j-1][1+o]);
return 0;
}
--en;
}
if (en<2) break;
++o;
}
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (b[i][j]==0)
{
printf("DA\n%d\n",a[i][j]);
return 0;
}
}

Editat de admin: Foloseste tagul "code" cand postezi surse.


Titlul: Răspuns: 211 Spirala
Scris de: Eduard Stoica din Aprilie 23, 2012, 19:35:14
Cred ca la dif gresesti...dif=a[1][2]-a[1][1] nu invers... :)


Titlul: Răspuns: 211 Spirala
Scris de: Visan Radu din Aprilie 28, 2012, 01:27:26
Incearca pe teste de genul 2 x ceva (ceva >= 9). Vezi daca face bine spirala.


Titlul: Răspuns: 211 Spirala
Scris de: Eduard Stoica din Mai 01, 2012, 17:26:11
Imi explica cineva va rog de ce iau 60 pct. pe varianta asta  ](*,) Am "Inccorect" pe 4 teste  :-k

Cod:
#include <iostream>
#include <fstream>
using namespace std;
int a[100][100], a2[100][100],v[10001];
int main()
{
ifstream g("spirala.in");
ofstream h("spirala.out");
int n, m, x=1, r,ind=1;
g>>n;
g>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
g>>a[i][j];
r=a[1][2]-a[1][1];
for(int k=0;k<=(n*m)/2;k++)
{
for(int i=1+k;i<=m-k;i++) {int l=k+1; if(!a2[l][i])
{v[x]=a[l][i];x++; a2[l][i]=1;}}
for(int j=2+k;j<=n-k;j++) {int l=m-k; if(!a2[j][l])
{v[x]=a[j][l];x++; a2[j][l]=1;}}
for(int i=m-1-k;i>=1+k;i--) {int l=n-k; if(!a2[l][i])
{v[x]=a[l][i];x++; a2[l][i]=1;}}
for(int j=n-1-k;j>=2+k;j--) {int l=k+1; if(!a2[j][l])
{v[x]=a[j][l];x++; a2[j][l]=1;}}
}
x--;
for(int i=1;i<x;i++)
if(v[i]+r!=v[i+1]){ ind=0; h<<"NU\n"<<v[i]<<" "<<v[i+1];break;}
if (ind) h<<"DA\n"<<v[x];
return 0;
}

Editat de admin: Foloseste tagul "code" cand postezi surse.


Titlul: Răspuns: 211 Spirala
Scris de: Craciun Catalin din Mai 09, 2013, 22:01:59
Rog staff-ul Infoarena sa revizuiasca testele acestei probleme, mai ales testele 5 si 9, am incercat cu 5 surse diferote scrise de 3 oameni diferiti (dat fiind si numarul de subsimisi facute) si toate au picat testele 5 si 9...


Titlul: Răspuns: 211 Spirala
Scris de: Paul-Dan Baltescu din Mai 09, 2013, 22:48:17
Am reevaluat ultima sursa care a luat 100 de puncte, precum si sursa unui admin care a luat 100 de puncte in trecut. Ambele continua sa ia 100 de puncte.

Incearca sa gasesti oameni mai priceputi. ;)


Titlul: Răspuns: 211 Spirala
Scris de: Craciun Catalin din Mai 10, 2013, 15:47:46

[Cine are timp si chef] Imi puteti spune ce gresesc la sursa asta? ma uit de trei zile pe ea si am trstat-o in toate conditiile, pe numere mici, pe limite, cu teste random, cu teste "ne-random" si totusi nu merge... am cautat si pe net parcurgerea in spirala caci este o problema comuna, sursele de acolo nu luau mai mult de 70 de puncte... orice as face imi pica testele 5 si 9... :angry: :-k

Cod:
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("spirala.in");
ofstream g("spirala.out");
 
int n,m;
long C[100001];
int c=1;
long A[1500][1500];
bool checked[101][101]; /// In cazul in care elementele au fost parcurese, acestea nu vor mai fi adaugate in vectorul C
long a,b; /// Elementele care nu indeplinesc progresia
 
bool Verificare(){
 
    bool ok=1;
    long dif;
 
    dif=C[2]-C[1];
    for (int i=3;i<c && ok;i++)
        if (C[i]-C[i-1]!=dif){
            ok=0;
            a=C[i];
            b=C[i-1];
        }
 
    return ok;
}
 
void Matrice (short int x1,short int y1,short int x2,short int y2){
 
    while (x1<=x2+1 && y1<=y2+1){
 
        for (short int i=y1;i<=y2;i++){
            if (!checked[x1][i]){
                C[c]=A[x1][i];
                c++;
                checked[x1][i]=1;
            }
        }
        for (short int i=x1+1;i<x2;i++){
            if (!checked[i][y2]){
                C[c]=A[i][y2];
                c++;
                checked[i][y2]=1;
            }
        }
        for (short int i=y2;i>=y1;i--){
            if (!checked[x2][i]){
                C[c]=A[x2][i];
                c++;
                checked[x2][i]=1;
            }
        }
        for (short int i=x2-1;i>x1;i--){
            if (!checked[i][y1]){
                C[c]=A[i][y1];
                c++;
                checked[i][y1]=1;
            }
        }
 
        x1++;
        y1++;
        x2--;
        y2--;
    }
}
 
int main(){
 
    f>>n>>m;
    for (short int i=1;i<=n;i++)
        for (short int j=1;j<=m;j++)
            f>>A[i][j];
    f.close();
 
    Matrice(1,1,n,m);
 
    if (Verificare()){
        g<<"DA\n";
        g<<C[c-1];
    }
    else{
        g<<"NU\n";
        g<<a<<"\n"<<b;
    }
 
    for (int i=1;i<c;i++)
        cout<<C[i]<<endl;
 
    g.close();
 
    return 0;
}


Titlul: Răspuns: 211 Spirala
Scris de: Huhurez Marius din Martie 12, 2014, 21:06:30
Salut!
Imi poate da cineva un hint la testul 2?
La problema am luat 90 din prima iar cel mai mare timp de rulare,inafara de cel de la testul 2 e 4 ms.
Uitati sursa.
http://www.infoarena.ro/job_detail/1141403?action=view-source (http://www.infoarena.ro/job_detail/1141403?action=view-source)

Multumesc anticipat!

LE: Am facut-o, uitasem de niste break-uri.


Titlul: Răspuns: 211 Spirala
Scris de: Radu Criuleni din Mai 30, 2014, 10:30:20
Salut la toti.
 Ce trebuie sa afisezi in cazul cind progresia aritmetica dintre primele doua elemente este egal cu 0, mergi mai departe sau afisezi NU?