Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1211 PalM  (Citit de 979 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Noiembrie 20, 2011, 21:30:32 »

Aici puteţi discuta despre problema PalM.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #1 : Noiembrie 21, 2011, 16:57:49 »

As dori si eu sa stiu urmatorul lucru: daca subsirul este palindrom, deci simetric, asta nu inseamna obligatoriu ca varful muntelui este la mijloc (format din unul sau mai multe elemente egale)? Imi da WA pe multe teste.
Memorat
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #2 : Noiembrie 21, 2011, 19:41:48 »

Sunt 3 situatii:

1. are varf ( gen : "abcba")
2. are "platou" (gen : "abccba")
3. este plat ( gen : "aaaaa")

Toate cele de mai sus sunt considerate subsiruri palindromice munte, deci ceea ce ai zis tu este adevarat.
Memorat
valentin.harsan
Strain
*

Karma: 33
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« Răspunde #3 : Noiembrie 22, 2011, 11:38:01 »

Imi puteti da un test mai mare? nu stiu ce e gresit in sursa mea...  Whistle

Cod:
#include<fstream>
#include<string.h>
using namespace std;

ifstream in("palm.in");
ofstream out("palm.out");

char a[503];
int n,smax=1;

void pal1(int poz) {
    int i,lung=1;

    for(i=poz-1;i!=0 && 2*poz-i<=n;--i)
        if(a[i]==a[2*poz-i] && a[i]<=a[i+1])
            lung+=2;
        else
            break;

    if(lung>smax)
        smax=lung;
}

void pal2(int poz) {
    int i,lung=2;

    if(a[poz]!=a[poz+1])
        return;

    for(i=poz-1;i!=0 && 2*poz-i+1<=n;--i)
        if(a[i]==a[2*poz-i+1] && a[i]<=a[i+1])
            lung+=2;
        else
            break;

    if(lung>smax)
        smax=lung;
}

int main() {
    int i;

    in.getline(a+1,501);

    a[0]=90;

    n=strlen(a);

    if(n!=1 && a[1]==a[2])
        smax=2;

    for(i=2;i!=n;++i) {

        if(i!=1)pal1(i);
        pal2(i);

    }

    out << smax;

    return 0;
}
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #4 : Noiembrie 22, 2011, 12:47:44 »

Iti dau un test mic Smile
Cod:
aacddeffeca
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines