Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
45211936 Дорешивание:
LiGuanlin
939F - 31 GNU C++11 Полное решение 31 мс 1776 КБ 2018-11-02 18:36:16 2018-11-02 18:36:16
→ Исходный код
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100050
#define K 105
int n,k;
int f[2][2*N];
int q[N],hd,tl;
int main()
{
	scanf("%d%d",&n,&k);
	memset(f,0x3f,sizeof(f));
	f[0][0]=0;
	for(int l,r,now=1;now<=k;now++)
	{
		scanf("%d%d",&l,&r);
		memcpy(f[now&1],f[!(now&1)],sizeof(f[now&1]));
		hd=1,tl=0;
		for(int i=0;i<=r&&i<=n;i++)
		{
			while(hd<=tl&&f[!(now&1)][i]<=f[!(now&1)][q[tl]])tl--;
			q[++tl]=i;
			while(hd<=tl&&q[hd]+r-l<i)hd++;
			f[now&1][i]=min(f[now&1][i],f[!(now&1)][q[hd]]+2);
		}
		hd=1,tl=0;
		for(int i=r;i>=0;i--)
		{
			while(hd<=tl&&f[!(now&1)][q[tl]]>=f[!(now&1)][r-i])tl--;
			q[++tl]=r-i;
			while(hd<=tl&&q[hd]<l-i)hd++;
			f[now&1][i]=min(f[now&1][i],f[!(now&1)][q[hd]]+1);
		}
	}
	if(f[k&1][n]<=2000)
	{
		printf("Full\n%d\n",f[k&1][n]);
	}else
	{
		printf("Hungry\n");
	}
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования