Afişează mesaje
|
Pagini: 1 ... 5 6 [7]
|
152
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 823 Reteta2
|
: Februarie 03, 2013, 16:44:25
|
Imi poate spune si mie cineva de ce imi spune ca afisez ingredientele incorect...pe testele oficiale merge perfect...mie ca e ceva ce tine de afisare nu de rezolvare...dar nu-mi dau seama cea... #include <iostream> #include <fstream> #include <cstring> #include <cstdio> using namespace std; char s[1005]; char a[1005]; int l=0; ifstream f("reteta2.in"); ofstream g("reteta2.out"); struct retetar{ char nume[1000]; int nr; }; retetar v[1005]; void citire(){ f.getline(s,1000); f.close(); } void pune(char c[],int x){ int t=1; for(int i=1;i<=l;i++){ if(strcmp(v[i].nume,c)==0){ v[i].nr+=x; t=0; break; } } if(t){ l++; strcpy(v[l].nume,c); v[l].nr=x; } } void sortare(){ int gata,i; char x[30]; int aux; do{ gata=0; for(i=1;i<l;i++) if(strcmp(v[i].nume,v[i+1].nume)==1){ strcpy(x,v[i].nume); strcpy(v[i].nume,v[i+1].nume); strcpy(v[i+1].nume,x); aux=v[i].nr; v[i].nr=v[i+1].nr; v[i+1].nr=aux; gata=1; } }while(gata); } int main() { citire(); int i=1,nr,suma=0; strcpy(a,s); while(i<strlen(s)) if(isspace(s[i])) strcpy(s+i,s+i+1); else i++; i=0; while(i<strlen(s)){ nr=0; if(isdigit(s[i]) && s[i-1]==')') while(isdigit(s[i])){ nr=nr*10 + s[i]-48; i++; } suma+=nr; i++; } i=0; while(i<strlen(s)){ if(isdigit(s[i]) && s[i-1]==')' ) while(isdigit(s[i])){ strcpy(s+i,s+i+1); } i++; } i=0; while(i<strlen(s)) if(s[i]<48) strcpy(s+i,s+i+1); else i++; i=0; while(i<strlen(s)){ nr=0; char c[30]; int k=0; while(isalpha(s[i])) c[k++]=s[i++]; if(isdigit(s[i])) while(isdigit(s[i])){ nr=nr*10 + s[i]-48; i++; } c[k]='\0'; pune(c,nr); } sortare(); g<<suma<<endl; for(int i=1;i<=l;i++){ g<<v[i].nume<<" "<<v[i].nr<<endl; } g.close(); return 0; }
|
|
|
153
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / dinamica
|
: Februarie 02, 2013, 20:24:55
|
Sunt nou in programare dinamica si am o problema la care as avea nevoie de ajutor:
"Coriolan Nepriceputeanu este un intelectual desăvârşit, care are o colecţie impresionantă formată din N cărţi. Fiecare dintre acestea are asociat un cod ISBN format din cel mult 9 cifre. Fiind foarte ataşat de cărţile sale lui Coriolan i-ar plăcea ca acestea să fie ordonate riguros, după anumite reguli, care unor neiniţiaţi le-ar putea părea uşor bizare. Astfel, pe primul raft, pe care încap exact M cărţi, el ar vrea să pună volume având suma codurilor ISBN divizibilă cu 100. Cum însă matematica nu e punctul lui forte, vă roagă pe voi să-l ajutaţi să calculeze numărul de variante de alegere a celor M cărţi conform criteriului impus de el. Fiind vorba de un număr foarte mare, Coriolan preferă să afle restul la împărţirea cu 9001 a acestuia."
|
|
|
159
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1010 Pietre2
|
: Ianuarie 26, 2013, 23:16:55
|
Gresesti in for-uri. Cand faci primul drum(in fiecare for) il faci pe mxp = 0, ceea ce este corect. Dar cand faci al doilea drum in fiecare for il faci pe mxp = 0 dupa ce faci drumul si nu inainte de apelul functie drum. Schima for-urile cu for(j=1;j<=n;j++) {mxp=0; Drum(1,j,0);if (mxp>mx) {mx=mxp;xm=1;ym=j;}mxp=0;Drum(n,j,0);if (mxp>mx) {mx=mxp;xm=n;ym=j;} } for(i=1;i<=n;i++) {mxp=0; Drum(i,1,0);if (mxp>mx) {mx=mxp;xm=i;ym=1;}mxp=0;Drum(i,n,0);if (mxp>mx) {mx=mxp;xm=i;ym=n;}}
si o sa iei 100p
|
|
|
163
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 064 Cobai
|
: Ianuarie 22, 2013, 22:44:56
|
Poate sa-mi spuna si mie cineva ce gresesc: #include <iostream> #include <fstream> #include <cstdio> #include <algorithm> #include <cstring> #include <iomanip>
#define pp pair<int,int> #define ox first #define oy second
#define Nmax (1<<6)
using namespace std;
char mat[Nmax][Nmax]; char s[Nmax*Nmax];
int n, m, nr; int xP, yP; float total, vizitat, raspuns;
pp coada[Nmax*Nmax]; pp coada_aux[Nmax*Nmax]; pp v[Nmax*Nmax];
int LgC, LgAuxC;
void citire(){
freopen("cobai.in", "r", stdin);
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%s", s);
for(int j = 0; j < m; j++){
mat[i][j] = s[j];
if(s[j] == '*') xP = i, yP = j;
if(s[j] == '.') total++; } }
scanf("%s", s);
nr = strlen(s);
for(int i = 0; i < nr; i++) switch(s[i]){
case 'N': v[i].ox = -1, v[i].oy = 0; break; case 'E': v[i].ox = 0, v[i].oy = 1; break; case 'S': v[i].ox = 1, v[i].oy = 0; break; case 'V': v[i].ox = 0, v[i].oy = -1; break; } }
void lee(){
int p, tr, ts;
LgC = 1; coada[0].ox = xP, coada[0].oy = yP;
for(int p = 0; p < nr; p++){
for(int i = 0; i < LgC; i++) mat[coada[i].ox][coada[i].oy] = '.';
LgAuxC = 0;
for(int i = 0; i < LgC; i++){
tr = coada[i].ox; ts = coada[i].oy;
while(1){
tr += v[p].ox; ts += v[p].oy;
if(tr < 0 || tr >= n || ts < 0 || ts >= m) break;
if(mat[tr][ts] != '.') break;
coada_aux[LgAuxC].ox = tr; coada_aux[LgAuxC].oy = ts; LgAuxC++;
mat[tr][ts] = '*'; } }
for(int i = 0; i < LgAuxC; i++) coada[i] = coada_aux[i];
LgC = LgAuxC; } }
void gaseste(){
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) if(mat[i][j] == '*') vizitat++; }
void afis(){
ofstream g("cobai.out");
g << setprecision(10) << vizitat*100/total << '\n'; }
int main(){
citire(); lee(); gaseste(); afis();
return 0; }
|
|
|
164
|
infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Problema lanturi
|
: Ianuarie 10, 2013, 12:59:36
|
Am si eu nevoie de ceva ajutor la problema: http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1004Am nevoie de o indicatie de cum sa aflu toate drumurile de cost minim intre x si y. Cred ca gresesc in functia rez dar nu imi dau seama cum sa corectez. #include <iostream> #include <cstdio>
#define Nmax 1001 #define inf 0x3f3f3f3f
using namespace std;
int cost[Nmax][Nmax]; int nr[Nmax]; bool viz[Nmax]; int d[Nmax]; int tata[Nmax];
int n, m, inceput, sfarsit; int a, b, c; int coada[Nmax]; int inc, sf;
void citire(){
FILE *f = fopen("lanturi.in", "r");
fscanf(f,"%d %d %d %d", &n, &m, &inceput, &sfarsit);
for(int i=1; i<=m; i++){
fscanf(f,"%d %d %d", &a, &b, &c);
cost[a][b] = cost[b][a] = c; }
fclose(f); }
void init(){
for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(cost[i][j]==0) cost[i][j] = inf;
for(int i=1; i<=n; i++){
viz[i]=0;
d[i] = cost[inceput][i];
if(d[i] < inf) tata[i]= inceput; else tata[i] = 0; }
viz[inceput]=1; tata[inceput]=0; d[inceput]=0;
}
void dijkstra(){
int k = 1, min;
for(int i=1; i<n; i++){
min = inf;
for(int i=1; i<=n; i++) if(viz[i]==0 && d[i]<min) min = d[i], k = i;
coada[sf++] = k;
viz[k] = 1;
for(int i=1; i<=n; i++) if(viz[i]==0 && cost[k][i] + d[k] < d[i]) d[i] = cost[k][i] + d[k], tata[i] = k; } }
void rez(){
for(int i=inc ; i<sf; i++) for(int j=1; j<=n; j++) if(cost[coada[i]][j] < inf) if(d[j] == d[coada[i]] + cost[coada[i]][j]) nr[coada[i]]++, nr[j]++;
}
void afis(){
FILE *g = fopen("lanturi.out","w");
fprintf(g,"%d\n", nr[sfarsit]);
fclose(g); }
int main() { citire(); init(); dijkstra(); rez(); afis();
return 0; }
|
|
|
|