Afişează mesaje
|
Pagini: [1]
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Concursuri / Răspuns: OJI 2014
|
: Martie 02, 2014, 00:39:27
|
Felicitari celor calificati si tuturor participantilor! Ah, super Pe noi nici nu ne-au lasat sa luam problemele.La 'triunghi' nu se specifica daca trebuie luate in calcul si triunghiurile degenerate sau nu si cred ca unii au pierdut din cauza aceasta. Aici cele degenerate nu erau considerate triunghiuri, deci multimea 1 1 2 era anti-triunghi de exemplu. Nu sunt foarte sigur de solutia de 100, dar cred ca era un greedy asemanator cu Fibonacci.Avand un vector sortat V[], incercai sa inserezi un element pe pozitia i astfel incat sa fie mai mare sau egal cu V[ i-1 ]+V[ i-2 ] si mai mic sau egal decat V[ i+1 ]-V[ i ] pana ajungeai la K elemente.Mai trebuiau tratate cateva cazuri particulare.Eu am luat 80 pe ea pentru ca nu am pastrat minimul la punctul a) si am uitat si de un caz particular. M-am bazat pe ideea asta si datorita faptului ca al 46-lea termen Fibonacci e fix sub 2000000000.
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1126 Dominouri
|
: Februarie 23, 2014, 16:27:41
|
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 ? Si eu am aplicat ideea aceasta si am luat 100. Eu am facut functia DFS de tip int si DFS(nod) returneaza numarul minim de dominouri care trebuie daramate pentru ca nodul 'nod' sa cada. Incearca in loc de inline void dfs(int x) { int i,v[nmax],L=0; viz[x]=true; for(i=0;i<G[x].size();++i) if(!viz[G[x][i]]) { dfs(G[x][i]); v[++L]=a[G[x][i]]; } sort(v+1,v+L+1); int s=0; for(i=1;i<=a[x];++i) s+=v[i]; F[x]=max(F[x],s); }
sa faci: int dfs(int x) { if(!F[x]) return 1; int i,v[nmax],L=0; for(i=0;i<G[x].size();++i) v[++L]= dfs(G[x][i]); sort(v+1,v+L+1); int s=0; for(i=1;i<=L && F[x];++i,--F[x]) s+=v[i]; return s; }
Sper sa te ajute
|
|
|
|