Informatică, întrebare adresată de iustinian57, 7 ani în urmă

De ce nu merge acest program pe pbinfo la problmea #3734?


#include
#define MAXNRPIL 100
#define MAXNUME 100

char nume[MAXNRPIL][MAXNUME+1];
int timppil[MAXNRPIL];
int main( ) {
FILE *fin, *fout;
int cer, maxture, ture, nrpil, turk, min, sec, t, i, j, mint, maxtk, pil, pilk, cat, rest, u, max, p;
char aux;

fin = fopen( "formula1.in", "r" );
fscanf( fin, "%d%d%d%d%d", &cer, &maxture, &ture, &nrpil, &turk );

maxtk = -1;
mint = 30 * 60 + 1;
cat = maxture / ture;
rest = maxture % ture;
for ( i = 0; i < nrpil; i++ ) {
fgetc( fin );
j = 0;
nume[i][j] = fgetc( fin );
while ( nume[i][j] != '\n' ) {
nume[i][++j] = fgetc( fin );
}

for ( j = 0; j < ture; j++ ) {
fscanf( fin, "%d.%d", &min, &sec );
// Transform in secunde
t = min * 60 + sec;

switch ( cer ) {
case 1:
if ( t < mint ) {
mint = t;
pil = i;
}
break;
case 2:
if ( j + 1 == turk && t > maxtk ) {
maxtk = t;
pilk = i;
}
break;
case 3:
timppil[i] += j < rest ? t * ( cat + 1 ) : t * cat;
break;
}
}
}

fclose( fin );
fout = fopen( "formula1.out", "w" );
switch ( cer ) {
case 1:
i = 0;
while ( nume[pil][i] != '\n' ) {
fputc( nume[pil][i++], fout );
}
break;

case 2:
i = 0;
while ( nume[pilk][i] != '\n' ) {
fputc( nume[pilk][i++], fout );
}
break;

case 3:
// Ordonez timpii pilotilor cu select sort
for ( u = nrpil - 1; u > 0; u-- ) {
max = timppil[0];
p = 0;
for ( i = 1; i <= u; i++ ) {
if ( timppil[i] > max ) {
max = timppil[i];
p = i;
} else if ( timppil[i] == max ) {
// Ordonez lexicografic
j = 0;
while ( nume[i][j] == nume[p][j] && j < MAXNUME + 1 ) {
j++;
}
if ( nume[i][j] > nume[p][j] ) {
max = timppil[i];
p = i;
}
}
}
timppil[p] = timppil[u];
timppil[u] = max;
// Interschimb numele pilotilor
for ( i = 0; i < MAXNUME + 1; i++ ) {
aux = nume[p][i];
nume[p][i] = nume[u][i];
nume[u][i] = aux;
}
}

for ( i = 0; i < nrpil; i++ ) {\
fprintf( fout, "%d. ", i + 1 );
j = 0;
while ( nume[i][j] != '\n' ) {
fputc( nume[i][j++], fout );
}
fputc( '\n', fout );
}
break;
}
fclose( fout );

return 0;
}


VxF: Sigur e rezolvarea pentru 3734?

Răspunsuri la întrebare

Răspuns de lucaciucandrei
1

#include<iostream>

#include<fstream>

#include<cmath>

using namespace std;

int main()

{

  ifstream cin ("formula1.in");

  ofstream cout ("formula1.out");

  long long c, k, n;

  cin >> c >> k >> n;

  if (c == 1)

     cout << (k*2-1)*(k*2-1);

  else

  {

     n = n*2 - 1;   c = 0;

     for (long long i=3; i<=n; i+=2)

        c += i*i/2;

     c += c+1;

     c = sqrt(c);

     if (c%2 == 0)

        c--;

     cout << c*c;

  }

  return 0;

}

Alte întrebări interesante