比赛 20121106 评测结果 AAAAAAAA
题目名称 过河 最终得分 100
用户昵称 Truth.Cirno 运行时间 0.040 s
代码语言 C++ 内存使用 5.72 MiB
提交时间 2012-11-06 09:39:11
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;

struct quetype
{
	int pos,tim;
};

int a[1010],b[1010],c[1010];
bool used[1010][2530];//[1000][2520]
queue<quetype> que;

int main(void)
{
	freopen("rivera.in","r",stdin);
	freopen("rivera.out","w",stdout);
	quetype from,to;
	int i,n,maxtim,temp;
	bool get;
	cin>>n;
	for (i=1;i<=n;i++)
	{
		cin>>a[i]>>b[i];
		c[i]=a[i]+b[i];
	}
	for (maxtim=c[1];maxtim<=2520;maxtim++)
	{
		get=true;
		for (i=1;i<=n;i++)
		{
			if (maxtim%c[i])
			{
				get=false;
				break;
			}
		}
		if (get)
			break;
	}
	to.pos=0;
	to.tim=0;
	used[0][0]=true;
	que.push(to);
	while (!que.empty())
	{
		from=que.front();
		to.tim=from.tim+1;
		for (to.pos=from.pos-5;to.pos<=from.pos+5;to.pos++)
		{
			if (to.pos<0||to.pos>n+1)
				continue;
			if (to.pos!=0&&to.pos!=n+1)
			{
				temp=to.tim%c[to.pos];
				if (!temp)
					temp=c[to.pos];
				if (temp<=a[to.pos])
				{
					temp=to.tim%maxtim;
					if (!used[to.pos][temp])
					{
						used[to.pos][temp]=true;
						que.push(to);
					}
				}
			}
			else
			{
				if (to.pos==n+1)
				{
					cout<<to.tim<<endl;
					return(0);
				}
				else
				{
					temp=to.tim%maxtim;
					if (!used[to.pos][temp])
					{
						used[to.pos][temp]=true;
						que.push(to);
					}
				}
			}
		}
		que.pop();
	}
	cout<<"NO\n";
	return(0);
}