Qualcuno mi sa dare un consiglio su come rendere più veloce l’esecuzione del codice?
I subtask 1-4 funzionano, il subtask 5 che prevede N>1 000 000 da execution timed out.
#include<stdio.h>
#include<stdlib.h>
main()
{
unsigned long N;
unsigned long r;
unsigned long c;
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
r=1;
c=1;
scanf("%lu", &N);
int i=0;
for(i=0; i<N; i+=2)
{
c++;
r++;
}
if(i>N)
r--;
printf("%lu", (r*c));
}
1 Mi Piace
Sei sicuro che sia necessario un for() per sapere quante volte puoi togliere 2 da N?
2 Mi Piace
Non c’è bisogno di un for per risolvere quel esercizio, cerca di trovare un calcolo 
1 Mi Piace
Ho trovato un ottimo algoritmo per ottenere quel risultato e sembra funzionare sempre.
2 Mi Piace
Potresti spiegare il tuo algoritmo per favore? E’ da molto che cerco di risolverlo ma le risposte date sono troppo criptiche, è un bene non dire la soluzione per farci arrivare gli altri, ma questo penalizza chi è agli inizi e non conosce particolari algoritmi come il tuo
5 Mi Piace
Devi effettuare N tagli di cui x orizzontali e y verticali dove x+y=N devi solamente scegliere il valore di x e y, ma se fai qualche tentativo manualmente ti accorgi tu stesso che è banale.
Anche perché il primo codice postato é corretto, ma lento, trasformarlo da O(n) a O(1) è banale.
3 Mi Piace