• 简单模拟——接金币


    ·这是太悲催的一题——真的——难受——

    ·洛谷入口:P2694

    ·题目:

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

    ·思想:

    因为要接到所有金币,则先接到高度距离最近的金币,那么就用结构体排序从小到大排出;

    若能接出,则代表横坐标差距小于等于纵坐标差距。

    剩下,就可以码了。

    ·代码:

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int g,n;
    struct node
    {
    	int x;
    	int y;
    }a[10005];
    int cmp(node a,node b)
    {
    	return a.y<b.y;
    }
    bool flag=true;
    int main()
    {
    	int t,xi;
    	
    	cin>>g;
    	for(int j=1;j<=g;j++)
    	{t=0;xi=0;
    		flag=true;
    		cin>>n;
    		for(int i=1;i<=n;i++)
    	    {
    		    cin>>a[i].x>>a[i].y;
    		    }
    		sort(a+1,a+n+1,cmp);
    		for(int i=1;i<=n;i++)
    		{	
    //注意此处横坐标范围为-1000~1000,则横坐标之差要带绝对值。 if((a[i].y-t)>=abs(a[i].x-xi)) { t=a[i].y; xi=a[i].x; } else {flag=false;break;} } if(flag==true) cout<<"Abletocatch"<<endl; if(flag==false) cout<<"Notabletocatch"<<endl; } return 0; }

    ·WA天天有,昨天特别多。

  • 相关阅读:
    5. java 的类和对象
    java 的变量以及构造方法
    idea运行Test时为啥会运行两次
    MYSQL(三)
    MYSQL(二)
    MySql密码操作
    MYSQL(一)
    【数据结构】2.线性表及其结构
    【数据结构】1.数据结构及算法的入门
    推荐四款可视化工具,解决99%的可视化大屏需求
  • 原文地址:https://www.cnblogs.com/konglingyi/p/11299270.html
Copyright © 2020-2023  润新知