记录编号 |
49918 |
评测结果 |
AAAAAAAA |
题目名称 |
过河 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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");
}