商汤科技的行人检测(简单)

商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等。在行人检测问题中,最重要的就是对行人移动的检测。由于往往是在视频监控数据中检测行人,我们将图像上的行人抽象为二维平面上若干个的点。那么,行人的移动就相当于二维平面上的变换。

在这道题中,我们将行人的移动过程抽象为 平移,有两个 移动参数dxd_xdxdyd_ydy。每次行人的移动过程会将行人对应的所有点全部平移,对于平移前的点 (x,y)(x, y)(x,y),平移后的坐标为 (x+dx,y+dy)(x + d_x, y + d_y)(x+dx,y+dy)

我们现在已知一个行人对应着 nnn 个点,坐标分别为 (x1,y1),(x2,y2)…(xn,yn)(x_1,y_1),(x_2,y_2)\ldots (x_n,y_n)(x1,y1),(x2,y2)(xn,yn),平移后的坐标分别为 (x1′,y1′),(x2′,y2′)…(xn′,yn′)(x_1',y_1'),(x_2',y_2')\ldots (x_n',y_n')(x1,y1),(x2,y2)(xn,yn)

很显然,通过平移前后的正确坐标,很容易算出行人的移动参数,但问题没有这么简单。由于行人实际的移动并不会完全按照我们预想的方式进行,因此,会有一部分平移后的坐标结果不正确,但可以确保 结果不正确的坐标数量严格不超过一半

你现在作为商汤科技的实习生,接手了这个有趣的挑战:算出行人的移动参数。如果不存在一组合法的移动参数,则随意输出一组参数;如果有多种合法的移动参数,输出其中任意一组合法的即可。

输入格式

第一行输入一个整数 n(1≤n≤105)n(1 \le n \le 10^5)n(1n105),表示行人抽象出的点数。

接下来 nnn 行,每行 444整数。前两个数表示平移前的坐标,后两个数表示平移后的坐标。

坐标范围在 −109-10^910910910^9109 之间。

输出格式

一行两个整数,dxd_xdxdyd_ydy,表示行人的移动参数。

样例输入
5
0 0 1 1
0 1 1 2
1 0 2 1
1 1 0 0
2 1 1 0
样例输出
1 1
只要结果的个数大于等于n/2就行
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define LL  long long
LL a[100050];
LL b[100500];
int main()
{
    int n;
    while(cin>>n)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        int x,y,x1,y1;
        int p=0;
        int p1=0;
        for(int i=1;i<=n;i++)
        {
            cin>>x>>y>>x1>>y1;
            a[p++]=x1-x;
            b[p1++]=y1-y;
        }
        sort(a,a+p);
        sort(b,b+p1);
        int ha=0,haha=0;
        int we=a[0],ni=b[0];
        for(int i=0;i<p;i++)
        {
            if(a[i]!=a[i+1])
            {
                if(ha>=n/2)
                {
                    we=a[i];
                    break;
                }
                else
                {
                    ha=0;
                }
            }
            else
            {
                ha++;
            }
        }
        for(int j=0;j<p1;j++)
        {
            if(b[j]!=b[j+1])
            {
                if(haha>=n/2)
                {
                    ni=b[j];
                    break;
                }
                else
                {
                    haha=0;
                }
            }
            else
            {
                haha++;
            }
        }
       printf("%d %d\n",we,ni);
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值