您的位置:首页 > 其它

usaco 洛谷 P2694 接金币 题解

2016-10-24 19:43 204 查看

题目描述

在二维坐标系里,有N个金币,编号0至N-1。初始时,第i个金币的坐标是(Xi,Yi)。所有的金币每秒向下垂直下降一个单位高度,例如有个金币当前坐标是(xf, yf),那么t秒后金币所在的位置就是(xf, yf-t)。初始时,FJ在(0,0)坐标处,FJ每秒只能向左移动一个单位距离或者向右移动一个单位距离,当然FJ也可以不移动。如果在某个时刻某个金币和FJ所在的位置重合,那么FJ就能接住这个金币。FJ能否把所有的金币都接住?如果行输出Abletocatch,否则输出Notabletocatch。

输入输出格式

输入格式:

多组测试数据。

第一行,一个整数G,表示有G组测试数据。1 <= G <= 5。

每组测试数据格式如下:

第一行,一个整数N。 1 <= N <= 50。

接下来有N行,第i行两个整数表示Xi、Yi。

-1000<=Xi<=1000。0<=Yi<=1000。


输出格式:

共G行,每行输出Abletocatch或Notabletocatch。

输入输出样例

输入样例#1:

5
3
-1 1
1 3
0 4
1
-3 2
3
-1 1
1 2
0 4
3
0 9
-1 1
1 3
8
70 141
-108 299
52 402
-70 280
84 28
-29 363
66 427
-33 232


输出样例#1:

Abletocatch
Notabletocatch
Notabletocatch
Abletocatch
Notabletocatch
————————————————————————————————————我是分割线——————————————————————————————————————————
纯模拟。水题目。


/*
Problem:
OJ:
User:    S.B.S.
Time:
Memory:
Length:
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<iomanip>
#include<cassert>
#include<climits>
#include<functional>
#include<bitset>
#include<vector>
#include<list>
#define F(i,j,k) for(int i=j;i<=k;++i)
#define M(a,b) memset(a,b,sizeof(a))
#define FF(i,j,k) for(int i=j;i>=k;i--)
#define maxn 10001
#define inf 0x3f3f3f3f
#define maxm 4001
#define mod 998244353
//#define LOCAL
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,m;
int data[1001];
int main(int argc,const char *argv)
{
std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int g;cin>>g;
while(g--){
cin>>n;bool flag=false;
F(i,1,1000) data[i]=-inf;
F(i,1,n){
int x,y;
cin>>x>>y;
if(data[y]!=-inf&&x!=data[y]){flag=true;}
if(data[y]!=-inf) continue;
data[y]=x;
}
if(flag==true){cout<<"Notabletocatch"<<endl;continue;}
int pos=0,pre=0;flag=false;data[0]=0;
//        F(i,1,n) cout<<data[i]<<" "<<endl;
F(i,1,1000){
if(data[i]==-inf) continue;
int time=abs(i-pre);
//            cout<<i<<" "<<pre<<" "<<data[i]<<" "<<data[pre]<<endl;
if(abs(data[i]-data[pre])>time){flag=true;break;}
pre=i;
}
if(flag==true) cout<<"Notabletocatch"<<endl;
else cout<<"Abletocatch"<<endl;
}
return 0;
}


p2964
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: