Afişează mesaje
|
Pagini: [1]
|
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/FStiu 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: //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; }
|
|
|
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? //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; }
|
|
|
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.
//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; }
|
|
|
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. # 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.
|
|
|
|