比赛 ctime蒟蒻生日赛 评测结果 AAAAAAAAAA
题目名称 守望者的逃离 最终得分 100
用户昵称 胡嘉兴 运行时间 0.171 s
代码语言 C++ 内存使用 0.12 MiB
提交时间 2017-10-17 15:08:15
显示代码纯文本
#include<stdio.h>   
int M, S, T, max = 0, min = 30000000;
void dfs(int dis, int t, int m)
{  
	int i,j = 0,flag = 0,x,y; 
	if(t <= T)
	{
		if(dis > max&&dis <= S)
		{
			max = dis;  
		} 
		if(dis >= S&&t < min)
		{
			min = t;
		}
		if(m >= 10)
		{
			dfs(dis + 60, t + 1, m - 10);
		}
		else  
		{
			while(flag==0)  
			{  
				j++;  
				for(i = 1;i <= T-t;i++)
				{	  
					if(m + i * 4 >= j * 10)
					{
						break;
					}
				}
				if(t + i + j <= T)  
				{    
					if(17 * (i + j) < 60 * j)
					{  
						if(dis + 60 * j > S)  
						{   
							x = (S - dis) / 17;
							y = (S - dis) % 17;  
							if(y != 0)
							{
								x++; 
							}
							if(min > t + x)
							{
								min = t + x; 
							}
						}         
						else  
						{            
							flag = 1;
							dfs(dis + 60 * j, t + i + j, m + i * 4 - j * 10);  
						}  
					}  
				}  
				else
				{  
					flag = 1;
					dfs(dis + 17, t + 1, m);  
				}  
			}  
		}
	}
 }  
   
int main()  
{
	freopen("escape.in", "r", stdin);
	freopen("escape.out", "w", stdout);
	scanf("%d%d%d", &M, &S, &T);
	dfs(0, 0, M);  
	if(min != 30000000) 
	{
		printf("Yes\n%d\n", min);  
	}
	else  
	{
		printf("No\n%d\n", max);  
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}