Afişează mesaje
|
Pagini: [1] 2
|
1
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Afisare din subprogram
|
: Martie 15, 2015, 21:54:03
|
sa zicem ca avem un main foarte foarte simplu
int main() { long n; cin>>n; Operatii(n); }
Si evident un subprogram numit operatii:
long Operatii(long n) { bla bla bla bla bla bla bla bla }
in subprogramul asta trebuie sa umplem un vector cu niste valori efectuand niste operatii cu n.Uite ca avem vectorul umplut ,valorile sunt corecte doar ca trebuie afisate pe ecran.Si acum intrebarea care ma macina : cum pot fi afisate pe ecran?apelare recursiva?return .. in for?cout... in for? declarare de tip void si ...?
|
|
|
4
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / OJI - Text
|
: Februarie 28, 2015, 17:25:24
|
Cerinţă Pentru un text dat, se cere să se afişeze numărul de cuvinte din text, apoi numărul minim de cuvinte ce pot fi eliminate astfel încât în textul rămas orice cuvânt (cu excepţia ultimului) să se termine cu aceeaşi literă cu care începe cuvântul următor, iar în final să se afişeze cuvintele din text rămase după eliminare, fiecare cuvant fiind afişat pe câte o linie.
Date de intrare Fişierul text.in conţine un text scris pe mai multe linii. Pe fiecare linie se află cuvinte formate din litere mici ale alfabetului latin. Cuvintele sunt despărţite între ele prin exact câte un spaţiu.
Date de iesire Fişierul text.out va conţine pe primele doua linii două numerele x şi y, unde x va fi numărul de cuvinte din text, iar y numărul minim de cuvinte ce trebuie eliminate. Pe liniile următoare se vor afişa, în ordine, cuvintele rămase după eliminarea celor y cuvinte, câte un cuvant pe o linie.
Restricţii şi precizări • Numărul de cuvinte din text este maximum 20000. • Lungimea maximă a unui cuvânt este 20. • Fiecare linie de text din fişierul de intrare are cel mult 200 de caractere. • În fişier pot exista rânduri goale. • Se acordă 10 % din punctaj pentru determinarea corectă a numărului de cuvinte din text. • Se acordă 40 % din punctaj pentru rezolvarea corectă a primelor două cerinţe. • Pentru rezolvarea corectă a tuturor cerinţelor se acordă tot punctajul.
Exemplu text.in text.out Explicaţii pentru ca nu are
timp ion spune ca nu urmareste nici emisiuni interesante si evident nici altfel de
emisiuni 19 13 ion nu urmareste emisiuni interesante evident Din întregul text care este format din 19 cuvinte se elimină 13 cuvinte şi se obţin, în ordine, cuvintele: ion, nu, urmareste, emisiuni, interesante, evident
Timp maxim de executare/test : 0.1 sec Total memorie disponibilă : 2 MB (din care 1 MB pentru stivă) Dimensiune maximă a sursei: 5 KB
Sa elimine cat mai putine cuvinte adica sa se determine cea mai munga secventa de cuvinte care incep cu ultima litera a celuilalt.Cum as putea sa scot aceasta secventa?Idei mai simple?
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Secventa palindromica
|
: Februarie 04, 2015, 15:09:43
|
Se citeste un sir de caractere.Sa se specifice cea mai lunga secventa cu prop. palindromica.Daca sunt mai multe,se afiseaza toate. Ex:" Acojoctar eabbbar" si se afiseaza cojoc si abbba ma gandeam sa delimitez cuvintele cu strtok.apoi sa adaptez int i = k, j = n; ok = true; while ( ok && i < j ) { if ( s[i] != s[j] ) ok = false; i++; j--; } if ( ok == true ) { is = k, js = n; return; } asta pentru toate,cu k=j=0 ,dar nu prea a mers...
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 006 Factorial
|
: Ianuarie 27, 2015, 18:21:10
|
#include <iostream> #include<fstream>
using namespace std;
int main() { long P; int v[1000],stop,i=1,n=0,k,t; ifstream f("factorial.in"); ofstream g("factorial.out"); f>>P; v[1000]=1; while(stop!=P) {t=0; stop=0; k=1000; v[k]*=i; while(v[k]>=10){n=v[k];k--;v[k+1]=n%10;v[k]+=n/10;} for(n=1000;n<=k&&t==0;n--){if (!v[n])stop++ ;else t=1;} i++; } g<<i; f.close();g.close(); } de ce nu merge?
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / subsiruri suma
|
: Ianuarie 24, 2015, 18:55:47
|
se citeste un sir de n numere.sa se scrie numerele care adunate ,dau o suma egal cu nr k.
exemplu n=10 9 2 7 4 5 10 3 8 1 6 si k =13
10 +3 9+4 7+5 +1 etc...
ma gandeam sa sortez crescator vectorul si apoi cu i=0,i<n-1 si j=i+1;j<n sa fac o suma care cat timpe mai mica decat k sa adune in ea....nu prea iese
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Ianuarie 17, 2015, 18:51:04
|
http://campion.edu.ro/arhiva/www/arhiva_2009/seds/7/index.htmasta poate sa ajute? #include<stdio.h> #include<algorithm> using namespace std; const int Valoare=(1<<30); int C[205][205],sol[205][205];bool ok; int modul(int x) { if(x>0) return x; return -x; } int main() { int N,M,P; freopen("robot.in","r",stdin); freopen("robot.out","w",stdout); scanf("%d%d%d",&P,&N,&M); for(int i=1;i<=N;++i) for(int j=1;j<=M;++j) scanf("%d",&C[i][j]); for(int i=0;i<=N+1;++i) sol[i][0]=sol[i][M+1]=Valoare; for(int i=0;i<=M+1;++i) sol[0][i]=sol[N+1][i]=Valoare; for(int i=N-1;i;--i) for(int j=1;j<=M;++j){ sol[i][j]=min(sol[i+1][j-1]+modul(C[i][j]-C[i+1][j-1]),min(sol[i+1][j]+modul(C[i][j]-C[i+1][j]),sol[i+1][j+1]+modul(C[i][j]-C[i+1][j+1]))); } for(int i=1;i<=M;++i) if(sol[1][i]<P){ printf("%d ",i); ok=1; } if(!ok) printf("-1"); fclose(stdin);fclose(stdout); return 0; } am am invatat niste programare dinamica si am niste intrebari despre codul tau : pot sa pun fstream in loc de stdio si f>> respectiv g<< in loc de printf si scanf? in partea cu (C [j]-C[i+1][j-1]),min(sol[i+1][j] ce cauta virgula aia acolo?
min ( ) e o functie din biblioteca algorithm?
|
|
|
19
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Ianuarie 07, 2015, 19:54:15
|
esti sigur ca numai prin prog dinamica se rezolva.am incercat sa refac putin codul si cred ca e aproape bine ,dar nu stiu cum sa il fac sa o ia din nou pe aceeasi coloana de fiecare data cand se blocheaza in vecini #include <iostream> #include <fstream> #include <cstdlib>
using namespace std; int main() { int n,m,j,a[200][200],afisaj=0,gasit,lin,col,ene,x=0; ifstream f("nrdiv.in"); ofstream g("nrdiv.out"); f>>ene>>n>>m; for(lin=1;lin<=n;lin++)for(j=1;j<=m;j++)f>>a[lin][j]; x=ene; for(j=1;j<=m;j++) {ene=x; lin=1; col=j; gasit=0; while(ene>0&&gasit==0) { if(ene>=abs(a[lin][col]-a[lin+1][col])) { lin++; ene-=abs(a[lin][col]-a[lin+1][col]); if(lin==n)gasit=1; } else if(col-1>=1&&ene>=abs(a[lin][col]-a[lin+1][col-1])) { lin++; ene-=abs(a[lin][col]-a[lin+1][col-1]); if(lin==n)gasit=1; } else if(col+1<=m&&ene>=abs(a[lin][col]-a[lin+1][col+1])) { lin++; ene-=abs(a[lin][col]-a[lin+1][col-1]); if(lin==n)gasit=1; } if (gasit==1) { g<<j; afisaj++; } else { if(j==m&&afisaj==0)g<<-1; }
} }
}
e prob de olimp de clasa a X-a locala,si in cls X nu se invata prog dinamica.si daca spune sa se afiseze o Valoare (de exemplu -1) trebuie sa il pun intre " " sau doar -1 fara ele?Am mai vazut prob de genul la locale(adica coborare si cercetare daca merge drept in fata sau dreapta sau stanga ,tot a 10-a si nu cred ca e cu dinamica.
|
|
|
20
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Răspuns: Robot
|
: Decembrie 22, 2014, 23:53:36
|
Imi pare rau dar nu am invatat ,,programare dinamica" ,functii,siruri de caractere si ce alte lucruri mai apar in codul tau.O alta rezolvare mai simpla ca amterie nu exista.Sa nu uitam totusi ca este vorba de un exercitiu de la faza locala din Bucuresti ,si nu cred ca elevii respectivi au ajuns la asa ceva,chiar daca sunt la intensiv.(poate doar siruri de caractere,dar programare dinamica...)
|
|
|
24
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Robot
|
: Decembrie 20, 2014, 18:04:30
|
http://www.olimpiade.ro/materiale/informatica-2013-subiecte-si-bareme-bucuresti-5 Subiectul I #include <iostream> #include <fstream> #include <math.h>
using namespace std;
int main() {int c[200][200], m,n,p,i,j,salvarep=0,v,l,existasolutii=0; ifstream f("robot.in"); f>>p>>m>>n; ofstream g("robot.out"); salvarep=p; for(i=1;i<=n;i++)for(j=1;j<=m;j++)f>>c[i][j]; for(j=1;j<=m;j++) {p=salvarep; i=1; while(p>0) { l=i; v=j; if(c[l+1][v]<=c[l+1][v+1]&&c[l+1][v]<c[l+1][v-1]) {l++; p=p- abs(c[l-1][v]-c[l][v]); } else if(c[l+1][v+1]<=c[l+1][v]&&c[l+1][v+1]<c[l+1][v-1]) {l++; v++; p=p-abs(c[l-1][v-1]-c[l][v]); } else if(c[l+1][v-1]<=c[l+1][v+1]&&c[l+1][v-1]<c[l+1][v]) {l++; v--; p=p-abs(c[l-1][v+1]-c[l][v]); } if(l==n&&p>0){g<<j<<" ";p=-1;existasolutii=1; }
} } if(existasolutii==0)g<<"-1"; }
Prima problema este in legatura cu functia abs,care stiam ca se foloseste pentru modulul numarului.Desi am declarat biblioteca math.h (codeblocks) imi apare o eroare "abs wasn't declared in this scope".
|
|
|
|