Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: ec-killed by signal  (Citit de 11723 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
horatiu11
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« : 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;
}
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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