记录编号 49918 评测结果 AAAAAAAA
题目名称 过河 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.124 s
提交时间 2012-11-09 20:38:55 内存使用 3.16 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int a[1002]={0},b[1002]={0};
bool s[1002]={1};
struct array{
	bool x[1002];
}f1,f2;
bool situation(int a,int b,int t){//时间为t升1降0
	int temp=t%(a+b);
	if(temp==0) temp=a+b;
	if(temp<=a) return 1;
	return 0;
}
void set(int t){
	for(int i=1;i<=n;i++) s[i]=situation(a[i-1],b[i-1],t);
}
void work(void){
	int i,j;
	for(i=1;i<=n;i++) f2.x[i]=0;
	for(i=0;i<=n;i++){
		if(f1.x[i]){
			for(j=i-5;j<=i+5;j++){
				if(j<0||j>n+1||s[j]==0) continue;
				if(s[j]==1) f2.x[j]=1;
			}
		}
	}
	f2.x[0]=1;
	f1=f2;
}
int main(){
	freopen("rivera.in","r",stdin);
	freopen("rivera.out","w",stdout);
	scanf("%d",&n);
	int i,t=0;
	f1.x[0]=1,s[n+1]=1;
	for(i=1;i<=n;i++) f1.x[i]=0;
	for(i=0;i<n;i++) scanf("%d%d",&a[i],&b[i]);
	while(f1.x[n+1]==0){
		t++;
		set(t);
		work();
		if(t>10000) goto FAIL;
	}
	printf("%d",t);
	return 0;
	FAIL:;
	printf("NO\n");
}