Afişează mesaje
|
Pagini: [1] 2 3 ... 5
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Caractere
|
: Februarie 08, 2012, 18:36:17
|
Salut! Ce parere aveti de urmatoarea problema: cout<<(int)'\0342'<<endl; afiseaza 7218, in timp ce afiseaza -30 care mi se pare logic; In primul rand 0342 = 226 in baza 10; Cum in char nu putem avea valori mai mari de 127 atunci ne confruntam cu o depasire care e tratata cilic de compilator datorita modificarii bitului de semn, adica -128 + 98 = -30;
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Cazare
|
: Februarie 25, 2011, 20:08:09
|
Salut! Problema : Problema CazareNu stiu de ce nu merge! Depasesc si memoria si pic si teste! Daca nu gasiti problema pe codul meu, va rog sa imi lasati o idee de abordare, adica cum sa aplic metoda rucsacului ( in cazul in care nu am aplicat-o bine )! Practic recurenta mea se bazeaza pe urmatoarea relatie: sol[k][ b][f] = k daca sol[k-1][b-B[k]][f-F[k]] != 0 si sol[k-1][ b][f] daca este 0; In problema notatiile sunt altele, dar ideea este aceeasi! Initial completez matricele sol[k][ b][f] = k, intr-un for. for(int i=1;i<=K;i++) { in>>clasa[i][0]>>clasa[i][1]; for(int j=1;j<=i;j++) sol[i][clasa[j][0]][clasa[j][1]] = j; } #include <fstream> #include <iostream> #include <vector> #include <memory> #include <alloc.h>
#define bfMax 1000 #define kMax 101
#define fin "cazare.in" #define fout "cazare.out"
using namespace std;
int B, F, K; int clasa[kMax][2];
//bool sol[kMax][bfMax][bfMax]; //int alege[kMax][bfMax][bfMax]; int ***sol; //int ***alege;
void citeste() { fstream in(fin, ios::in); in>>B>>F>>K; sol = (int***)malloc(sizeof(int**)*(K+1)); //alege = (int***)malloc(sizeof(int**)*(K+1)); for(int i=0;i<=K;i++) { sol[i] = (int**)malloc(sizeof(int*)*(B+1)); //alege[i] = (int**)malloc(sizeof(int*)*(B+1)); for(int j=0;j<=B;j++) sol[i][j] = (int*)malloc(sizeof(int)*(F+1)), //alege[i][j] = (int*)malloc(sizeof(int)*(F+1)), memset(sol[i][j], 0, sizeof(int)*(F+1)); //memset(alege[i][j], 0, sizeof(int)*(F+1)); } for(int i=1;i<=K;i++) { in>>clasa[i][0]>>clasa[i][1]; for(int j=1;j<=i;j++) sol[i][clasa[j][0]][clasa[j][1]] = j; } in.close(); }
void solve() { int w1, w2; for(int k=1;k<=K;k++) { for(int i=1;i<=B;i++) for(int j=1;j<=F;j++) { w1 = clasa[k][0]; w2 = clasa[k][1]; //sol[k][w1][w2] = k; //alege[k][w1][w2] = k; if(w1 <= i && w2 <= j) { if(sol[k-1][i-w1][j-w2] && !sol[k][i][j]) { sol[k][i][j] = k; continue; //alege[k][i][j] = k; } else if(sol[k][i][j] == 0) { sol[k][i][j] = sol[k-1][i][j]; continue; //alege[k][i][j] = alege[k-1][i][j]; } } else if(sol[k][i][j] == 0) { sol[k][i][j] = sol[k-1][i][j]; //alege[k][i][j] = alege[k-1][i][j]; } } if(sol[k][B][F]>0) { K=k; break; } } }
void tipar() { int x=B, y=F, k=K, X; int object; vector<int> solution; while(sol[k][x][y]) { object = sol[k][x][y]; X = x; solution.push_back(sol[k][x][y]); x -= clasa[sol[k][x][y]][0]; y -= clasa[sol[k][X][y]][1]; k--; /*while(object == sol[k][x][y]) { X = x; x -= clasa[sol[k][x][y]][0]; y -= clasa[sol[k][X][y]][1]; k--; }*/ } fstream out(fout, ios::out); out<<solution.size()<<endl; for(int i=solution.size()-1;i>=0;i--) out<<solution[i]<<endl; /*for(int i=0;i<=K;i++) { out<<i<<":"<<endl; for(int j=0;j<=B;j++) { for(int k=0;k<=F;k++) out.width(2), out<<sol[i][j][k]<<" "; out<<endl; } }*/ out.close(); }
void Drum(int k, int x, int y, ofstream &out) { if(sol[k][x][y]) { Drum(k-1, x-clasa[sol[k][x][y]][0], y-clasa[sol[k][x][y]][1], out); out<<sol[k][x][y]<<endl; } }
int main(void) { citeste(); solve(); //ofstream out(fout); //Drum(K, B, F, out); //out.close(); tipar(); /*for(int i=0;i<=K;i++) { for(int j=0;j<=B;j++) free(sol[i][j]); free(sol[i]); } free(sol);*/ return 0; }
|
|
|
15
|
infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Răspuns: RV
|
: Octombrie 23, 2010, 19:45:08
|
Pai da dar forul cu n este in interiorul forului cu k; int len = strlen(tr); for(int l=1;l<len;l++) { for(int i=0;i<len-l;i++) { res1[1] = '\0'; res2[1] = '\0'; res1[0] = tr[i]; strcat(res1, sol[0][i+1][i+l]); res2[0] = tr[i+l]; strcat(res2, sol[0][i][i+l-1]); strcpy(sol[1][i][i+l], minimum(res1, res2)); res1[1] = '\0'; res2[1] = '\0'; res1[0] = tr[i]; strcat(res1, sol[1][i+1][i+l]); res2[0] = tr[i+l]; strcat(res2, sol[1][i][i+l-1]); strcpy(sol[0][i][i+l], maximum(res1, res2)); } }
LE: Am rezolvat! Am alocat matricea dinamic! void alocare() { //sol = new char[2][nMax][nMax][nMax]; int len = strlen(tr)+1; sol = new char***[2]; for(int i=0;i<2;i++) { sol[i] = new char**[len]; for(int j=0;j<len;j++) { sol[i][j] = new char*[len]; /*for(int k=0;k<len;k++) sol[i][j][k] = new char[k], sol[i][j][k][1] = '\0';*/ } } for(int i=0;i<len;i++) { for(int j=0;j<len-i;j++) { sol[0][j][j+i] = new char[i]; sol[0][j][j+i][1] = '\0'; sol[1][j][j+i] = new char[i]; sol[1][j][j+i][1] = '\0'; } } }
|
|
|
18
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Numere rotunde
|
: Octombrie 19, 2010, 12:53:48
|
In primul rand imi pare a tema! Ideea este destul de simpla. In niciun caz nu vei genera toate posibilitatile de 0 si 1, care se genereaza prin met BackTracking ci rezolvarea se bazeaza pe reprezentarea numerelor in baza 2! Nu este nevoie sa convertesti un numar in baza 2 pentru ca pc-ul a facut-o deja pentru tine! #include <math.h>
int nr0=0, nr1=0; for(int i=0;i<n;i++) { nr0=nr1=0; for(int j=0;j<(int)(log(i)/log(2))+1;j++) (i&(1<<j))?nr1++:nr0++; if(nr1 == nr0) cout<<i<<" "; } Sper sa mearga, nu am verificat! Succes!
|
|
|
23
|
Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: Introducere in algoritmi
|
: Octombrie 06, 2010, 20:35:44
|
Sal! Legat de algoritmica! A creea un algoritm semnificativ mai bun, inseamna a crea un algoritm cu o complexitate mai buna! Daca alg. are deja sa zicem complex n, ce ai mai putea face....! ; plus ca unii alg au fost demonstrati ca fiind deja optimi, deci prin urmare nu se poate da o solutie mai buna la problema respectiva, numai in cazul in care pica matematica! Legat de programarea comerciala, depinde cu ce te ocupi in firma! Nu ai nevoie de multa algoritmica daca tu de exemplu creezi niste interfete cu VB si le populezi cu cod! Si in final..... [...] [editat de moderator] Nu se face "troc" cu asa ceva
|
|
|
|