记录编号 28441 评测结果 AAAAAAAAAA
题目名称 [NOIP 2007]守望者的逃离 最终得分 100
用户昵称 GravatarTruth.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);
}