| ||||||||||
| 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 | |||||||||
这也太坑爹了吧····一个判断,加了0ms 不加就TLE````#include <stdio.h>
#include <math.h>
#define queue_size 300000
typedef struct
{
int num;
int step;
}flag_int;
typedef struct
{
int front;
int rear;
flag_int data[queue_size];
}cir_queue;
int visit[queue_size];
cir_queue cq;
void en_queue(int e,int step);
flag_int de_queue();
void main()
{
int x,y;
flag_int mid;
scanf("%d%d",&x,&y);
if(x>y)
printf("%d\n",x-y);
else
{
cq.front=cq.rear=0;
en_queue(x,0);
while(1)
{
if(cq.data[cq.front].num==y)
break;
else if(cq.data[cq.front].num>y)
{
mid=de_queue();
if(visit[mid.num-1]!=611) //就是这句话!!! 当n大于k的时候肯定只有减1了··· 我这句话没有加一直TLE 我想不通的是 就算不加这句话 也才多了一个要考虑的数!!! 但是下面的判断是一直都在的。真是太坑爹了···加了就0ms 不加就TLE
en_queue(mid.num-1,mid.step+1);
}
else
{
mid=de_queue();
if(visit[mid.num+1]!=611)
en_queue(mid.num+1,mid.step+1);
if(visit[mid.num-1]!=611)
en_queue(mid.num-1,mid.step+1);
if(visit[mid.num*2]!=611)
en_queue(mid.num*2,mid.step+1);
}
}
printf("%d\n",cq.data[cq.front].step);
}
}
void en_queue(int e,int step)
{
if(e<=queue_size)
{
visit[e]=611;
cq.data[cq.rear].num=e;
cq.data[cq.rear].step=step;
cq.rear=(cq.rear+1)%queue_size;
}
}
flag_int de_queue()
{
flag_int he;
he.num=cq.data[cq.front].num;
he.step=cq.data[cq.front].step;
cq.front=(cq.front+1)%queue_size;
return (he);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator