记录编号 |
28441 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2007]守望者的逃离 |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.038 s |
提交时间 |
2011-10-14 18:25:10 |
内存使用 |
0.26 MiB |
显示代码纯文本
//跑步速度,为17m/s,
//闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。
//魔法值恢复的速度为4点/s,在原地休息状态时才能恢复。
//允许刚好沉下,刚好脱离。(同一秒完成)
//“脱离“定义:行进距离大于等于总距离长度
#include <cstdio>
using namespace std;
int main(void)
{
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
int mp,maxdis,maxtim,disnow=0,timnow=0;
bool done=false,escaped=false;
scanf("%d %d %d",&mp,&maxdis,&maxtim);
if (mp&1==1)
mp--;
while (!done)
{
if (mp>=10)
{
mp-=10;
disnow+=60;
timnow++;
if (timnow==maxtim)
done=true;
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
else
break;
}
/*error under here*/
/**/
if (!done&&mp==4)
{
int tempdis,temptim;
tempdis=disnow;
temptim=timnow;
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
disnow+=60;
timnow+=3;
if (timnow==maxtim)
{
done=true;
}
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
}
mp=2;
}
/**/
if (!done&&mp==8)
{
int tempdis,temptim;
tempdis=disnow;
temptim=timnow;
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
disnow+=60;
timnow+=2;
if (timnow==maxtim)
{
done=true;
}
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
}
mp=2;
}
/**/
if (!done&&mp==2)
{
int tempdis,temptim;
tempdis=disnow;
temptim=timnow;
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
disnow+=60;
timnow+=3;
if (timnow==maxtim)
{
done=true;
}
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
}
mp=0;
}
/**/
/*error up to here*/
if (!done&&mp==6)
{
int tempdis,temptim;
tempdis=disnow;
temptim=timnow;
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
disnow=tempdis;
timnow=temptim;
}
else if (!done)
{
disnow+=60;
timnow+=2;
if (timnow==maxtim)
done=true;
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
mp=0;
}
/**/
while (!done)
{
int i,tempdis,temptim;
tempdis=disnow;
temptim=timnow;
for (i=1;!done&&i<=7;i++)
{
tempdis+=17;
temptim++;
if (temptim==maxtim)
{
done=true;
disnow=tempdis;
timnow=temptim;
}
if (tempdis>=maxdis)
{
done=true;
escaped=true;
}
}
disnow=tempdis;
timnow=temptim;
if (i==8&&!escaped)
{
disnow++;
if (disnow>=maxdis)
{
done=true;
escaped=true;
}
}
}
if (escaped)
printf("Yes\n%d\n",timnow);
else
printf("No\n%d\n",disnow);
fclose(stdin);
fclose(stdout);
return(0);
}