| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
I really don't have any idea how to improve my program's effeciency :( Could anyone help me?TLE..
#include<stdio.h>
#define INF 999999999
int n;
double m;
double f[8];
struct point
{
double x;
int win;
};
point a[50000];
int st;
int pointer[8];
double min;
double max;
int main()
{
int i;
int t, testcase;
scanf("%d", &testcase);
for(t=1;t<=testcase;t++)
{
scanf("%lf%d", &m, &n);
for(i=1;i<=n;i++)
{
scanf("%lf", &f[i]);
f[i]=1.0/f[i];
pointer[i]=1;
}
st=1;
a[1].x=1; a[1].win=0;
while(a[st].x<m)
{
max=-1; min=INF;
for(i=1;i<=n;i++)
{
while(a[pointer[i]].x*f[i]<=a[st].x) pointer[i]++;
if(a[pointer[i]].win==0 && max<a[pointer[i]].x*f[i]) max=a[pointer[i]].x*f[i];
if(min>a[pointer[i]].x*f[i]) min=a[pointer[i]].x*f[i];
}
if(max!=-1)
{
st++; a[st].x=max; a[st].win=1;
if(a[st-1].win==1){a[st-1].x=a[st].x; st--;}
}
else
{
st++; a[st].x=min; a[st].win=0;
if(a[st-1].win==0){a[st-1].x=a[st].x; st--;}
}
}
while(m<a[st-1].x) st--;
if(a[st].win==0) printf("Mikael\n");
else printf("Nils\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator