2017计蒜客复赛签到题

确实,最近临近期末,各种事情要多起来了,这估计是这学期最后一次acm的题了。由于时间因素只做了一道签到题就匆匆走人,不过完美ac签到题,也算是给这学期的acm画上了一个圆满的句号了吧,开始了自己的博客生涯,挺好。

 


B. Windows 画图

 

思路:这题根据题意,很容易想到直接模拟,而数据范围显示可以直接开二元数组强行记录,而对于直线上的点,可以分为斜率为非负,负和不存在三种情况,分别利用直线两点式遍历整数点进行更新记录就好了

 

 

/*
Author:Owen_Q
*/

#include <bits/stdc++.h>

using namespace std;

int ip[251][251];

int main()
{
    int n,m,q;
    memset(ip,0,sizeof(ip));
    scanf("%d%d",&n,&m);
    /*int a = 5;
    int b = 3;
    swap(a,b);
    cout << a << b << endl;*/
    for(int i=1;i<=n;i++)
    {
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if((x1<x2&&y1<y2)||(x1>x2&&y1>y2))
        {
            if(x1>x2&&y1>y2)
            {
                swap(x1,x2);
                swap(y1,y2);
            }
            int dx = x2-x1;
            int dy = y2-y1;
            for(int x=x1;x<=x2;x++)
            {
                int y = (x-x1)*dy;
                if(y%dx == 0)
                {
                    y = y / dx + y1;
                    ip[x][y] = i;
                }
            }
        }
        else if((x1<x2&&y1>y2)||(x1>x2&&y1<y2))
        {
            if(x1>x2&&y1<y2)
            {
                swap(x1,x2);
                swap(y1,y2);
            }
            int dx = x2-x1;
            int dy = y1-y2;
            for(int x=x1;x<=x2;x++)
            {
                int y = (x-x1)*dy;
                if(y%dx == 0)
                {
                    y = y1 - y / dx;
                    ip[x][y] = i;
                }
            }
        }
        else
        {
            if(y2<y1)
            {
                swap(y1,y2);
            }
            for(int y=y1;y<=y2;y++)
            {
                ip[x1][y] = i;
            }
        }
    }
    scanf("%d",&q);
    //cout << q << endl;
    while(q--)
    {
        //cout << q << endl;
        int x,y;
        scanf("%d%d",&x,&y);
        printf("%d\n",ip[x][y]);
    }
    return 0;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值