Afişează mesaje
|
Pagini: [1] 2 3 ... 5
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1387 Split
|
: August 10, 2013, 14:14:06
|
Prima greseala : pierzi cazul cand K = j + 2; A 2-a : minimul si maximul sunt doar pe intervalul j+1..k-1 (trebuie pe j+1..k); int Dreapta=0; int K=-1; minim=min(a[j+1],a[j+2]); maxim=max(a[j+1],a[j+2]); for(int k=j+2;k<=n-2;k++) { if(a[k]<minim)minim=a[k]; if(a[k]>maxim)maxim=a[k];
int aux=maxim-minim+MaxD[k+1]-minD[k+1]; if(aux>Dreapta){Dreapta=aux;K=k;} }
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 723 Stiva
|
: Iunie 25, 2013, 20:58:53
|
Ideea se bazeaza pe o dinamica in n^3. In primul rand pentru orice sir vei folosi n operatii de tipul top(); numarul de operatii de tipul push() va fi tot timpul egal cu numarul de operatii de tipul pop(). Acum problema devine in afla numarul minim de operatii de tipul push() a. i. sa obtii sirul [i..j]; Raspunsul final fiind Nr minim de operatii de a obtine sirul 1...n * 2 (nr de pop-uri) + n (nr de top() -uri); dinamica ar fi dp[ i ] [ j ] = nr minim de operatii de tipul push pentru a obtine sirul i...j; dp[i][j] = dp[i][j-1] + 1;// pur si simplu mai pun caracaterul Text[j]; sau dp[i][j] = dp[i][k] + dp[k+1][j-1], cu k = i,j-1 si Text[k] == Text[j];// asta inseamna ca fac sirul i...k cu un numar minim de operatii dupa care il fac pe k+1...j-1 si cand il pun pe j nu il pun in mod practic ( adica numai apelez push() ) ci scot tot ce e pe intervalul [k+1..j-1] si o sa ii dau "top()" de Text[j];
|
|
|
18
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1282 Palindrom3
|
: Iunie 17, 2013, 17:19:43
|
Intr-adevar, rolul cifrei diferite e doar de a minimiza costul; doar ca tu obti acest numar, cred, dintr-un numar pe care nu il puteai forma. Tind sa cred ca formula, dupa care formezi restul, e gresita. Descrie modul cum formezi noul rest...
|
|
|
21
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 909 Permlcs
|
: Iunie 11, 2013, 14:56:01
|
Prima data sa intelegi de ce pica solutia cu cmlsc. Tu cand fixezi 2 siruri( fie primul Sir[ k ] si al 2 -lea Sir[ l ]) faci cmlsc intre astea doua si rezultatul e 3 sa zicem; apoi faci cmlsc intre Sir[ k ] si Sir[ l + 1 ] rezultatul e 2 sa zicem; acum tu iei minimul si zici ca raspunsul e 2. Doar ca nu e corect sa faci chestia asta; pentru ca poate sa apara cazul in care cmlsc gasit la prima verificare sa fie total diferit fata de cel gasit la a 2-a verificare. Uite un exemplu : 5 4 1 3 4 5 2 3 4 1 2 5 3 2 5 1 4 2 5 1 4 3
Sursa ta se comporta total aiurea. cmlsc intre sirul 1 si sirul 2 e: 3 iar sirul e :5 4 3
cmlsc intre sirul 1 si sirul 3 e: 2 iar sirul e :4 1
cmlsc intre sirul 1 si sirul 4 e: 2 iar sirul e :3 1
cmlsc intre sirul 2 si sirul 3 e: 3 iar sirul e :5 2 3
cmlsc intre sirul 2 si sirul 4 e: 2 iar sirul e :5 2
cmlsc intre sirul 3 si sirul 4 e: 4 iar sirul e :4 1 5 2
Sirurile sunt in ordine inversa
|
|
|
23
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: problema afisare descompunere in factori primi
|
: Mai 25, 2013, 18:11:20
|
Ai putea face in felul urmator : pentru fiecare numar afisat care are mai putine cifre decat n-ul initial bagi spatii inainte; uite si cod : #include<iostream> using namespace std;
inline int afla(int x){ int cnt = 0; while(x!=0){ cnt++; x /= 10; } return cnt; }
int main() { int n, d=2, m; cout<<"\n dati numarul natural nenul n = "; cin>>n; cout << "\n"; int nrCifre = afla(n); while(n>1) { while(n%d==0) { m=n; n=n/d; int ceva = afla(m); for(int dif=nrCifre-ceva; dif>0; dif--) cout << " "; cout << m<<" | "<<d<<"\n"; } d++; }
int ceva = afla(n); for(int dif=nrCifre-ceva; dif>0; dif--) cout << " "; cout << n<<" | "<<"\n"; return 0; }
|
|
|
|