Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Γενικά θέματα για το διαγωνισμό. Ερωτήσεις, προτάσεις και ό,τι άλλο ταιριάζει.
Άβαταρ μέλους
mariosal
Δημοσιεύσεις: 63
Εγγραφή: Σάβ Μαρ 20, 2010 12:00 am
Τοποθεσία: Χολαργός, Ελλάδα
Επικοινωνία:

Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από mariosal »

Αὕτη ἡ ἐμὴ λύσις, παῖδες.

Κώδικας: Επιλογή όλων

#include <stdio.h>

int main( void ) {
    int N;
    short i, j = 1000;
    float P = 1, p;

    FILE *file = fopen( "profit.in", "r" );
        fscanf( file, "%d", &N );
        while ( N-- ) {
            fscanf( file, "%hd", &i );

            j = i < j ? i : j;
            p = ( float )i / j;
            P = p > P ? p : P;
        }
    fclose( file );

    file = fopen( "profit.out", "w" );
        fprintf( file, "%.3f\n", P );
    fclose( file );

    return 0;
}

sotiris
Δημοσιεύσεις: 422
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από sotiris »

Είχα στείλει 2 λύσεις , μία σε Pascal και μία σε C . Τελικά κράτησα αυτή σε C.

Κώδικας: Επιλογή όλων

#include <stdio.h>
int i , n;
float x , P , paran=1000.0f;
int main(){
 FILE*fin=fopen("profit.in","r");
 FILE*fout=fopen("profit.out","w");
 fscanf(fin,"%d",&n);
 for(i=0;i<n;++i){
 fscanf(fin,"%f",&x);
 if(x < paran)paran=x;
 if(x/paran > P)P=x/paran;
 }fclose(fin);
 fprintf(fout,"%.3f\n",P);
 fclose(fout);
 return 0;   
}

Κώδικας: Επιλογή όλων

program profit;

var
    fin , fout: text;
    i , n : integer;
    x , P , paran : Real;    

begin

        assign( fin, 'profit.in' );
        assign( fout, 'profit.out' );
        reset( fin );
        rewrite( fout );

        read( fin , n);
        paran := 1000;
        P:=0;

        for i := 1 to n do
        begin
        read( fin , x);

        if x < paran then
        paran := x;

	    if (x / paran) > P then
        P := x / paran;
        end ;

        writeln( fout, P : 0 : 3);

        close( fin );
        close( fout );
        halt(0);
end.

Εικόνα

mr.muffin
Δημοσιεύσεις: 43
Εγγραφή: Σάβ Νοέμ 20, 2010 11:32 am

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από mr.muffin »

Κώδικας: Επιλογή όλων

#include <fstream>
#include <iomanip>
using namespace std;
int a=0;
int valuesize=0;
int counter=0;
int main () {
    double logos=1.000;
    
   
ifstream input("profit.in");
  	input >> valuesize;
  	int arx,tel;
		input >> arx;
  		while (!input.eof()) {
        input >> tel;
        if(arx<tel)
        {
            if(float(tel)/float(arx)>logos)
        logos=float(tel)/float(arx);
        }
        else
        arx=tel;
        
        }

    input.close();
  
    ofstream save("profit.out");
save << fixed << setprecision (3) << logos << "\n";

    save.close();
    
    return 0;
}

Τι λεει η δικια μου λυση?

chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από chris »

Το ίδιο με του Σωτήρη κάνω μου φαίνεται:
[pastebin]http://pastebin.com/JM4prEeq[/pastebin]

Πραγματικά ελπίζω να μην έχω καμιά βλακεία γιατί έκανα 1 υποβολή συνολικά (δεν θυμάμαι πότε)... Χθες που το είδα σωστό μου φάνηκε!
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.

errietta
Δημοσιεύσεις: 30
Εγγραφή: Τετ Απρ 28, 2010 10:50 am
Επικοινωνία:

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από errietta »

Είναι σε C++... Enjoy =P

Κώδικας: Επιλογή όλων

#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
	vector <int> smallest;
	float maxProfit = 0.000;
	ifstream in ("profit.in");
	ofstream out ("profit.out");
	int N;
	in >> N;
	int minN = 1001;
	vector <int> numbers;
	for (int i = 0; i < N; i++) {
		int x;
		in >> x;
		if ( x < minN ) {
			minN = x;
		}
		numbers.push_back (x);
		smallest.push_back (minN);
	}
	for (int i = 0; i < N; i++) {
		if ( ( (float) numbers[i] / (float) smallest[i] ) > maxProfit )
			maxProfit = (float) numbers[i] / (float) smallest[i];
	}
	out << fixed << setprecision(3) << maxProfit << endl;
	return 0;
}


Virus•Hacker•Kontos
Δημοσιεύσεις: 170
Εγγραφή: Πέμ Νοέμ 26, 2009 9:59 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από Virus•Hacker•Kontos »

chris έγραψε:Το ίδιο με του Σωτήρη κάνω μου φαίνεται:
[pastebin]http://pastebin.com/JM4prEeq[/pastebin]

Πραγματικά ελπίζω να μην έχω καμιά βλακεία γιατί έκανα 1 υποβολή συνολικά (δεν θυμάμαι πότε)... Χθες που το είδα σωστό μου φάνηκε!

και εγώ τον ίδιο κώδικα έχω αν και μπορεί να έχω τίποτα παραπάνω (που δεν χρειάζεται) αλλά η λύση είναι ακριβώς η ίδια στη λογική, (δεν υπάρχει περίπτωση να τον βρώ στον υπολογιστή, δεν ξέρω κιόλας...)
DFS Hole:
Spoiler: show
http://virushackerwhizkid.blogspot.com/ ... ze-it.html
DFS = Deep Freeze System
Είμαι σίγουρος ότι το πιστέψατε.

sotiris
Δημοσιεύσεις: 422
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από sotiris »

Virus•Hacker•Kontos έγραψε:
chris έγραψε:Το ίδιο με του Σωτήρη κάνω μου φαίνεται:
[pastebin]http://pastebin.com/JM4prEeq[/pastebin]

Πραγματικά ελπίζω να μην έχω καμιά βλακεία γιατί έκανα 1 υποβολή συνολικά (δεν θυμάμαι πότε)... Χθες που το είδα σωστό μου φάνηκε!

και εγώ τον ίδιο κώδικα έχω αν και μπορεί να έχω τίποτα παραπάνω (που δεν χρειάζεται) αλλά η λύση είναι ακριβώς η ίδια στη λογική, (δεν υπάρχει περίπτωση να τον βρώ στον υπολογιστή, δεν ξέρω κιόλας...)
Ένας int απλά δεν αρκούσε;
Εικόνα

chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από chris »

Σε περίπτωση που δεν είναι κατανοητή η λύση μου μετά από 10 δευτερόλεπτα ανάγνωσης, βασικά:

Για κάθε τιμή χ
αν x < min, τότε min = x
αλλιώς αν x/min > best, τότε best = x/min

Έπειτα δίνω στην έξοδο το best.
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.

chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από chris »

sotiris έγραψε:
Virus•Hacker•Kontos έγραψε:
chris έγραψε:Το ίδιο με του Σωτήρη κάνω μου φαίνεται:
[pastebin]http://pastebin.com/JM4prEeq[/pastebin]

Πραγματικά ελπίζω να μην έχω καμιά βλακεία γιατί έκανα 1 υποβολή συνολικά (δεν θυμάμαι πότε)... Χθες που το είδα σωστό μου φάνηκε!

και εγώ τον ίδιο κώδικα έχω αν και μπορεί να έχω τίποτα παραπάνω (που δεν χρειάζεται) αλλά η λύση είναι ακριβώς η ίδια στη λογική, (δεν υπάρχει περίπτωση να τον βρώ στον υπολογιστή, δεν ξέρω κιόλας...)
Ένας int απλά δεν αρκούσε;
Αρκούσε :P

EDIT:
Αχαχαχαχα, έλεος με τον τίτλο του topic :P
Errieta, σωστό μου φένεται. Το ίδιο με εμάς κάνεις κατά κάποιον τρόπο.
mariosal, βάλε και καμιά μεταβλητή με κανονικό όνομα χD.
Τελευταία επεξεργασία από το μέλος chris την Δευ Ιαν 24, 2011 4:11 pm, έχει επεξεργασθεί 1 φορά συνολικά.
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.

Chapeiro
Δημοσιεύσεις: 7
Εγγραφή: Πέμ Δεκ 02, 2010 3:20 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από Chapeiro »

Ορίστε και η δικιά μου : (C++)

Κώδικας: Επιλογή όλων

#define inputFile "profit.in"
#define outputFile "profit.out"
#include <fstream>

using namespace std;

int calculateMaxProfit();
float extract(istream* in, int N);
float getProfit(float sell, float buy);

int main() {
	return calculateMaxProfit();
}

int calculateMaxProfit() {
	int N;
	//open input file
	ifstream in(inputFile);
	//open output file
	ofstream out(outputFile);
	if (in.is_open()) {
		in >> N;	//reads number of days
		float maxProfit = extract(&in, N);
		FILE * out = fopen(outputFile, "w");
		fprintf(out, "%.3f\n", maxProfit);
		fclose(out);
		in.close();
		return 0;
	} else {
		return -1;
	}
}

float getProfit(float sell, float buy) {
	return (sell / buy);
}

float extract(istream* in, int N) {
	int a;
	*in >> a;				//get first day's price
	int minBuyingPrice = a;
	float maxProfit = 1;	//	(a/a)=1
	for (int i = 2; i <= N; i++) {
		*in >> a;			//get ith's day price
		if (a < minBuyingPrice) {
			minBuyingPrice = a;
		} else {
			float newProfit(getProfit(a, minBuyingPrice));
			if (newProfit > maxProfit) {
				maxProfit = newProfit;
			}
		}
	}
	return maxProfit;
}
Τελευταία επεξεργασία από το μέλος Chapeiro την Δευ Ιαν 24, 2011 4:11 pm, έχει επεξεργασθεί 1 φορά συνολικά.
To err is human - and to blame it on a computer is even more so. R. Orben

Belief is the death of intelligence. R. A. Wilson

Genius always finds itself a century too early. R. W. Emerson

sotiris
Δημοσιεύσεις: 422
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από sotiris »

chris έγραψε:Σε περίπτωση που δεν είναι κατανοητή η λύση μου μετά από 10 δευτερόλεπτα ανάγνωσης, βασικά:

Για κάθε τιμή χ
αν x < min, τότε min = x
αλλιώς αν x/min > best, τότε best = x/min

Έπειτα δίνω στην έξοδο το best.
Α γιαυτό έχεις else .....
Εικόνα

Virus•Hacker•Kontos
Δημοσιεύσεις: 170
Εγγραφή: Πέμ Νοέμ 26, 2009 9:59 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από Virus•Hacker•Kontos »

Κώδικας: Επιλογή όλων


   1. #include <stdio.h>  
   2.   
   3. #define FINAL_SOLOUTION  
   4.   
   5. #ifndef FINAL_SOLOUTION  
   6.     #define CLOCK_COUNT  
   7.     #include <conio.h>  
   8.     #include <time.h>  
   9. #endif  
  10.   
  11. #ifndef FINAL_SOLOUTION  
  12. #define N_FINAL_SOL  
  13.   
  14. #endif  
  15.   
  16.   
  17. //#define BRUTE_FORCE  
  18. #define FAST_SOL  
  19.   
  20. FILE *fin;  
  21. FILE *fout;  
  22.   
  23.   
  24. int N;  
  25. int timi_meras[1000000];  
  26.   
  27. float result = 0.0f;  
  28.   
  29. float brute_force_soloution();  
  30. float fast_soloution();  
  31.   
  32. int main()  
  33. {  
  34.     #ifdef CLOCK_COUNT  
  35.     printf("CLOCK START TIME: %d\n=============================================\n",clock());  
  36.     #endif  
  37.       
  38.       
  39.     fin = fopen("profit.in","r");  
  40.     fscanf(fin,"%d",&N);  
  41.       
  42.     for(int i=0;i<N;i++)  
  43.     {  
  44.         fscanf(fin,"%d",&timi_meras[i]);  
  45.     }  
  46.   
  47.   
  48. #ifdef BRUTE_FORCE  
  49. result = brute_force_soloution();  
  50. #endif  
  51. #ifdef FAST_SOL  
  52. result = fast_soloution();  
  53. #endif  
  54.       
  55.   
  56. #ifdef N_FINAL_SOL  
  57.     printf("To arxeio eksodou einai: \n%.3f\n",result);   
  58. #endif  
  59.   
  60.     #ifdef FINAL_SOLOUTION  
  61.     fout = fopen("profit.out","w+");  
  62.     fprintf(fout,"%.3f\n",result);  
  63.     fclose(fout);  
  64.     #endif  
  65.   
  66.     fclose(fin);  
  67.   
  68.     #ifdef CLOCK_COUNT  
  69.     printf("\n=============================================\nCLOCK END TIME: %d\n=============================================",clock());  
  70.     #endif  
  71.       
  72. #ifdef N_FINAL_SOL  
  73.     getch();  
  74. #endif  
  75.     return 0;  
  76. }  
  77.   
  78.   
  79.   
  80.   
  81. float brute_force_soloution()  
  82. {  
  83.     float max_sol = 1.0f;  
  84.       
  85.     int i=0,i2=0;  
  86.     for(i=0;i<N;i++)  
  87.         for(i2=i+1;i2<N;i2++)  
  88.             if(max_sol < (float) ((float)timi_meras[i2] / (float) timi_meras[i]))  
  89.                 max_sol = (float)timi_meras[i2] /  (float)timi_meras[i];  
  90.           
  91.     //printf("\n===============================================\nMax_sol: %.3f\n",max_sol);   
  92.       
  93.   
  94.     return max_sol;  
  95. }  
  96.   
  97. float fast_soloution()  
  98. {  
  99.     float max_sol = 1.0f;  
 100.       
 101.     int i;  
 102.     int lowest_price = timi_meras[0];  
 103.     for(i=0;i<N;i++)  
 104.     {  
 105.         if(lowest_price > timi_meras[i])  
 106.             lowest_price = timi_meras[i];  
 107.         if(max_sol < (float)timi_meras[i] / (float)lowest_price)  
 108.             max_sol = (float)timi_meras[i] / (float)lowest_price;  
 109.     }  
 110.   
 111.     return max_sol;  
 112. }


Απο το hellenico...


Oooo, τελικά δεν είχα βγάλει τα περιτά!!! Ελπίζω να μην το πληρώσω...

Ήταν όταν είχα ξαναγράψει τη λύση μου σε Visual Studio... Τι το ήθελα και την πόσταρα...

Ευτιχώς βγάζει σωστά αποτελέσματα...
DFS Hole:
Spoiler: show
http://virushackerwhizkid.blogspot.com/ ... ze-it.html
DFS = Deep Freeze System
Είμαι σίγουρος ότι το πιστέψατε.

sotiris
Δημοσιεύσεις: 422
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από sotiris »

Offtopic , αλλά συγκλονιστικές και ανεπανάληπτες στιγμές σήμερα
Spoiler: show
Περισσότερα μέλη σε σύνδεση 42 την Δευτ Ιαν 24, 2011 12:59 pm
Εικόνα

chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από chris »

sotiris έγραψε:Offtopic , αλλά συγκλονιστικές και ανεπανάληπτες στιγμές σήμερα
Spoiler: show
Περισσότερα μέλη σε σύνδεση 42 την Δευτ Ιαν 24, 2011 12:59 pm
σχολείο δεν πήγατε;;; :P
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.

Άβαταρ μέλους
zaxeilasfc
Δημοσιεύσεις: 118
Εγγραφή: Δευ Οκτ 18, 2010 8:15 pm
Τοποθεσία: Macintosh HD

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από zaxeilasfc »

Χαχαχα απ οτι φαίνεται όλοι είχαν αγωνία για τα αποτελέσματα (που απ' ότι φαίνεται θα αργήσουν να βγούν) και δεν πήγανε σχολείο.

Ορίστε λοιπόν και η δική μου λύση:

Κώδικας: Επιλογή όλων

/*
Author: Ioannis Zaxeilas
Language: C++
Problem: Maxprofit
*/

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
  	ifstream fin("profit.in");
	ofstream fout("profit.out");
	
	int ndays;
	float  a, b, c, min, max;
	float maxprofit, pmax;
	
	fin>>ndays;
	fin>>a;
	fin>>b;
	
    if(a>b)
    {
        max=a;
        min=b;
     	}
   else { 
		max=b;
		min=a;
		pmax=b/a;
       	}

  while (!fin.eof())
	{
        fin>>c;
		
        if(c>max) {
			
			max=c;   
			pmax=c/min;
			if(pmax>maxprofit) maxprofit=pmax;
       		}              
        else if(c<min)
		{
			min=c;
			max=1;
        }
		
	}              
	fout<<setprecision(3)<<fixed<<maxprofit<<endl;
	fin.close();
	fout.close();
		return 0;
}
Κάθε σχόλιο καλοδεχούμενο!

themis5
Δημοσιεύσεις: 5
Εγγραφή: Δευ Ιαν 24, 2011 6:43 pm
Επικοινωνία:

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από themis5 »

Κώδικας: Επιλογή όλων

    #include <cstdio>  
      
    using namespace std;  
      
    float find_profit( int* array, int elems ) {  
        int k, o = 0;  
        int buy;  
        int sell;  
        float profit = 1.0;  
        for ( int i = 0; i < elems; ++i ) {  
            for ( k = i; k < elems; ++k ) {  
                if ( ( (double)array[ k ] / array[ i ] ) > profit ) {  
                    profit = (double)array[ k ] / array[ i ];  
                }  
            }  
        }  
        return profit;  
    }  
      
    int main() {  
        int n, x, l;  
        FILE * out;  
        FILE * in;  
      
        in = fopen( "profit.in", "r" );  
        fscanf( in, "%i", &n );  
      
        int a[ n ];  
      
        for ( l = 0; l < n; ++l ) {  
            fscanf( in, "%i", &x );  
            a[ l ] = x;  
        }  
      
        fclose( in );  
        out = fopen( "profit.out", "w" );  
      
        fprintf( out, "%.3f\n", find_profit( a, n ) );  
      
        fclose( out );  
        return 0;  
    }  

Άβαταρ μέλους
zaxeilasfc
Δημοσιεύσεις: 118
Εγγραφή: Δευ Οκτ 18, 2010 8:15 pm
Τοποθεσία: Macintosh HD

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από zaxeilasfc »

themi, exw valei tin lisi sou kai trexei edw kai 2 lepta me n=1.000.000
whats goin' on :?:

errietta
Δημοσιεύσεις: 30
Εγγραφή: Τετ Απρ 28, 2010 10:50 am
Επικοινωνία:

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από errietta »

Η δικιά μου πάντως με 1.000.000 γραμμές τυχαίο input είναι γρήγορη... :geek:


Άβαταρ μέλους
compileGuy
Δημοσιεύσεις: 218
Εγγραφή: Δευ Ιαν 19, 2009 5:39 pm

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από compileGuy »

zaxeilasfc έγραψε:themi, exw valei tin lisi sou kai trexei edw kai 2 lepta me n=1.000.000
whats goin' on :?:
Έχει πολυπλοκότητα Ο ( Ν^2 ) . Για Ν=1.000.000 θα κάνει περίπου 2.5 ώρες για να τελειώσει.

Δεν λέει να βάλω την λύση μου , αφού τουλάχιστον 5-6 παρόμοιες υπάρχουν πιο πανω ;)

Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις Α´ Φάσεως ΚΓ´ Πανελληνίου Διαγωνισμοῦ Πληροφορικῆς

Δημοσίευση από kernelpanic »

Λοιπόν εγώ έκανα 2 βελτιώσεις στην απλή γραμμική λύση:
  • Άλλαξα το

    Κώδικας: Επιλογή όλων

    if((float)a/(float)b>(float)c/(float)d)
    με το ισοδύναμό του

    Κώδικας: Επιλογή όλων

    if(a*d>c*b)
    Κέρδος: Από 4 εντολές μηχανής fld, 2 εντολές fdiv, κάμποσες εντολές fxch, μια εντολή fcmp, μια εντολή sahf, και μια εντολή που δε θυμάμαι συνολικά για τη σύγκριση κλασμάτων, σε 2 εντολές mul/imul και μια cmp ή sub. 8-)
  • Φόρτωσα όλο το αρχείο με μια εντολή fread και μετά το επεξεργάστηκα όπως ήταν. Ο χρόνος εκτέλεσης έγινε περίπου το 1/10 του αρχικού :D
Spoiler: show

Κώδικας: Επιλογή όλων

#include "stdio.h"
//#include "assert.h"

FILE *io;
char file[6000100];

int main(){

	int i,n,t,max_panw=1,max_katw=1,panw,katw,len;

	io=fopen("profit.in","rb");
	//assert(io);
	
	fseek(io,0,SEEK_END);
	len=ftell(io);
	fseek(io,0,SEEK_SET);
	//printf("%d bytes\n",len);
	fread(file,len,1,io);
	//printf("Text:\n%s",file);
	
	i=0;
	for(t=0;file[i]>='0';i++){
		t*=10;
		t+=file[i]-'0';
	}
	n=t;
	//printf("%d\n",n);
	for(;file[i]<'0';i++);
	for(t=0;file[i]>='0';i++){
		t*=10;
		t+=file[i]-'0';
	}
	panw=katw=t;
	//printf("%d\n",panw);
	t=0;
	
	
	for(;i<len;i++){
		for(;file[i]<'0';i++);
		for(t=0;file[i]>='0';i++){
			t*=10;
			t+=file[i]-'0';
		}
		if(t<katw){
			//printf("katw\n");
			if(katw*max_panw<panw*max_katw){
				//printf("NEO PROFIT!!!(%d/%d)\n",panw,katw);
				max_katw=katw;
				max_panw=panw;
			}
			panw=katw=t;
			//printf("tmp PROFIT:(%d/%d)\n",panw,katw);

		}else if(t>panw){
			//printf("NEO PEKOP!!!\n");
			panw=t;
		}				
	
	}
	
	if(katw*max_panw<panw*max_katw){
		//printf("NEO PROFIT!!!(%d/%d)\n",panw,katw);
		max_katw=katw;
		max_panw=panw;
	}

	freopen("profit.out","w",io);
	fprintf(io,"%.3f\n",((float)max_panw)/((float)max_katw));
	fclose(io);
	return(0);
}
Ηθικό δίδαγμα: Όταν ο διαθέσιμος χρόνος μετράται σε μήνες, οι χακιές επιβάλλονται :P
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.

Απάντηση