martes, 12 de julio de 2011

cpp #define y las funciones

Curiosa optimización, en uno de los problemas de CC me sorprendió que el siguiente código
tarda 0.77 segundos y consume 2.6M

#include<iostream>
using namespace std;
int t,n;
#define F(i,n) for(int i=0;i<n;i++)
int main()
{
   int i,j;
   scanf("%d",&t);
   F(i,t)
   {
         scanf("%d",&n);
         int ans=1;
         while(n!=1)
         {
                    ans=ans<<1;
                    n/=2;
         }
         printf("%d\n",ans);
   }
return 0;}

Pero sería mas optimo el uso normal.
#include<iostream>
using namespace std;
int t,n;
int main()
{
   int i,j;
   scanf("%d",&t);
   for(int i=0;i<t;i++)
   {
         scanf("%d",&n);
         int ans=1;
         while(n!=1)
         {
                    ans=ans<<1;
                    n/=2;
         }
         printf("%d\n",ans);
   }
return 0;}
Está última se ejecuta en 0.72 y solo consume 2.5M
Si ha algun interes de para que es esté código aquí teneis el enunciado http://www.codechef.com/problems/DCE05