Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Wrong answer : Octombrie 31, 2014, 09:49:26
Stiu ca la aceasta problema trebuie sa folosim standard input/output(cin/cout).
Asa am facut, fisierele sunt numai pentru verificare Smile) Very Happy
2  infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Wrong answer : Octombrie 31, 2014, 09:47:47
Salut, am si eu o problema de pe Codeforces la care iau wrong answer:
http://codeforces.com/gym/100513/problem/F
Stiu ca am postat intr-o sectiune gresita, dar nu am gasit niciuna pentru Codeforces.
Acum, problema mi se pare destul de banala, daca am inteles bine enuntul.
Algoritmul face asa:
1) daca 2*k>n afisam suma elementelor.
2) altfel, calculez cea mai mare suma de k elemente consecutive, o elimin, si apoi o calculez pe a doua cea mai mare din ce a ramas.
Sursa mea:
Cod:
//horatiu11
# include <iostream>
# include <fstream>
# define nmax 2000001
using namespace std;
ifstream f("F.in");
ofstream g("F.out");
int n,k,a[nmax],p,q,nou[nmax],m;
long long s1,s2,sp;
int main()
{
    int i;
    f>>n>>k;
    for(i=1;i<=n;++i)
        f>>a[i];
    if(2*k>n)
    {
        for(i=1;i<=n;++i)
            s1+=a[i];
        g<<s1<<'\n';
    }
    else
    {
        sp=0;
        for(i=1;i<=k;++i)
            sp+=a[i];
        p=1;q=k;s1=sp;
        for(i=k+1;i<=n;++i)
        {
            sp-=a[i-k];
            sp+=a[i];
            if(s1<sp)s1=sp,p=i-k+1,q=i;
        }
        for(i=1;i<p;++i)
            nou[++m]=a[i];
        for(i=q+1;i<=n;++i)
            nou[++m]=a[i];

        sp=0;
        for(i=1;i<=k;++i)
            sp+=nou[i];
        s2=sp;
        for(i=k+1;i<=m;++i)
        {
            sp-=nou[i-k];
            sp+=nou[i];
            if(s2<sp)s2=sp;
        }
        g<<s1+s2<<'\n';
    }
    return 0;
}
3  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 297 Permutari 4 : Aprilie 24, 2014, 22:07:08
Nu cred ca ar trebui sa iti intre in 0.2 secunde in O(n*k). Atat k, cat si n pot fi 3000. Iar 3000*3000 trece peste 0.2 secunde dupa parerea mea  Smile
4  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / ec-killed by signal : Ianuarie 26, 2014, 23:24:50
Buna. Am lucrat problema ec de pe campion. Ideea ar fi ca nu inteleg de ce urmatorul cod primeste killed by signal pe toate testele, iar pe calculatorul meu merge foarte bine. Banuiesc ca e datorita faptului ca evaluarea se face sub linux, iar eu rulez pe windows. Cum pot scapa de killed by signal si pe linux?
Cod:
//horatiu11
# include <cstdio>
# include <cstring>
# include <cmath>
# define nmax 10001
using namespace std;
int v[2*nmax],n,k,x,y,L,nr2,nr1,nrx,nrxp,k1,k2,val,delta;
long double rez1,rez2;
char ch,s[nmax];
int main()
{
    int i;
    freopen("ec.in","r",stdin);
    freopen("ec.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n*n;++i)
    {
        scanf("%d",&val);
        v[val+10000]=1;
    }
    scanf("%c",&ch);
    while(k)
    {
        gets(s);L=strlen(s);
        if(!strchr(s,'^'))
        {
            ++x;
            i=0;nrx=0;nr1=0;nr2=0;
            while(s[i]!='x')nrx=nrx*10+int(s[i]-'0'),++i;
            i+=2;
            while(s[i]!='=')nr1=nr1*10+int(s[i]-'0'),++i;
            ++i;
            while(i<L)nr2=nr2*10+int(s[i]-'0'),++i;
            rez1=(long double)(nr2-nr1)/nrx;
            if(rez1==int(rez1))
                if(v[(int)rez1+10000]==1)++k1;
        }
        else
        {
            ++y;
            i=0;nrxp=0;nrx=0;nr1=0;nr2=0;
            while(s[i]!='x')nrxp=nrxp*10+int(s[i]-'0'),++i;
            i+=4;
            while(s[i]!='x')nrx=nrx*10+int(s[i]-'0'),++i;
            i+=2;
            while(s[i]!='=')nr1=nr1*10+int(s[i]-'0'),++i;
            ++i;
            while(i<L)nr2=nr2*10+int(s[i]-'0'),++i;
            nr1-=nr2;
            delta=nrx*nrx-4*nrxp*nr1;
            if(delta<0)continue;
            if(delta==0)
            {
                rez1=(long double)nrx*(-1)/(long double)2*nrxp;
                if(rez1==(int)rez1)
                    if(v[(int)rez1+10000]==1)++k2;
            }
            else
            {
                rez1=(long double)nrx*(-1)+sqrtl((long double)delta)/(long double)2*nrxp;
                rez2=(long double)nrx*(-1)-sqrtl((long double)delta)/(long double)2*nrxp;
                if(int(rez1)==rez1)
                {
                    if(v[(int)rez1+10000]==1)++k2;
                }
                else if(int(rez2)==rez2)
                    if(v[(int)rez2+10000]==1)++k2;
            }
        }
        --k;
    }
    printf("%d %d\n%d %d\n",x,k1,y,k2);
    return 0;
}
5  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1126 Dominouri : Ianuarie 16, 2014, 06:32:21
Am incercat sa fac problema asta cu un dfs din nodul 1 si cu o sortare pe nivel in dfs. Pe testele mele imi da ok dupa parerea mea. Insa pe evaluator iau 0  puncte cu multe incorect si cateva killed by signal 11. Cei care ati facut problema, puteti sa ma ajutati cu sursa asta
http://www.infoarena.ro/job_detail/1083183?action=view-source  ?
6  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 086 Luna : Ianuarie 14, 2014, 22:57:47
Tu spui ca ar trebui sa trec pe linia urmatoare cand intalnesc o valoare diferita(adica sa parasesc forul cu j pt coloane)?
Poti da un exemplu mai bun sa inteleg ?
Merci Very Happy
7  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 086 Luna : Ianuarie 02, 2014, 14:34:51
Buna!
Nu stiu de ce iau 50 de puncte. Pe restul iau incorect. Construiesc o matrice M[j] in care memorez pt tipul i si lungimea j, inaltimea maxima.
Apoi afisez in functie de datele citite.
Cod:
//horatiu11
# include <cstdio>
# define nmax 53
# define vmax 5003
using namespace std;
int n,m,k,a[nmax][nmax],M[vmax][nmax],type,l1,l2;
int main()
{
    int i,j,l,c,x,y;
    freopen("luna.in","r",stdin);
    freopen("luna.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]);
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
        {
            c=j;type=a[i][j];
            while(a[i][c]==type)--c;
            x=j-c;
            l=i;
            while(a[l][j]==type)--l;
            y=i-l;
            if(y>M[type][x])M[type][x]=y;
        }
    scanf("%d",&k);
    for(i=1;i<=k;++i)
    {
        scanf("%d%d%d",&type,&l1,&l2);
        if(M[type][1]==0)printf("Tara de provenienta nu are parcele pe Luna!\n");
        else if(M[type][l1]>=l2 || M[type][l2]>=l1)printf("Cererea poate fi satisfacuta!\n");
        else printf("Cererea nu poate fi satisfacuta!\n");
    }
    return 0;
}


8  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1445 Peluza Nord : Noiembrie 20, 2013, 20:52:43
Buna, imi puteti da si mie o idee cam cum ar trebui rezolvata problema asta?
Am citit acest articol http://en.wikipedia.org/wiki/Harshad_number , insa nu prea pricep ce si cum.
9  Comunitate - feedback, proiecte si distractie / Feedback infoarena / Răspuns: Bug reports : Septembrie 09, 2013, 10:31:28
La problema rfinv am trimis o sursa. Si imi apre in asteptare de mult timp...
10  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Răspuns: Subtitrare : Noiembrie 14, 2012, 19:25:21
Ai dreptate. Era gresit acolo. Insa tot 20 de puncte iau si asa. O fi ceva in neregula cu compilatorul? Mi-a mai facut la cateva probleme asa.(de exemplu la o problema imi afisa ce trebuie insa era considerat tot wrong)
11  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Subtitrare : Noiembrie 13, 2012, 23:27:58
Am o problema la problema subtitrare de pe campion. Iau doar 20 de puncte si nu prea stiu de ce. Imi da wrong cu toate ca imi afiseaza bine. Cred ca e ceva datorita tipului double, dar nu sunt sigur.
Asa am gandit.

Cod:
# include <fstream>
# include <cstring>
# include <cstdlib>
using namespace std;
ifstream f("subtitrare.in");
ofstream g("subtitrare.out");
int n,nant;
double hh,mm,ss,fff,nr;
char srt[101],sir[101],c,sirant[101];
int main()
{
    while(f>>n)
    {
        if(n==nant)break;f.get();
        f.getline(srt,101);
        hh=atof(srt);
        mm=atof(srt+3);
        ss=atof(srt+6);
        fff=atof(srt+9);
        nr=hh*3600+mm*60+ss+fff/1000;
        nr*=25; nr=(int)nr;
        g<<'{'<<nr<<'}';
        hh=atof(srt+17);
        mm=atof(srt+20);
        ss=atof(srt+23);
        fff=atof(srt+26);
        nr=hh*3600+mm*60+ss+fff/1000;
        nr*=25; nr=(int)nr;
        g<<'{'<<nr<<'}';
        f.getline(sir,101);strcpy(sirant,sir);
        while(f.getline(sir,101))
        {
            if(sir[0]=='\0')
            {
                g<<sirant<<'\n';
                break;
            }
            else g<<sirant<<'|',strcpy(sirant,sir);
        }
        nant=n;
    }
    g<<sirant<<'\n';
    return 0;

Editat de admin: Foloseste tagul "code" cand postezi surse.
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines