1 条题解

  • 0
    @ 2025-8-24 22:31:57

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Nt_Tsumiki
    火星咖啡馆 || 我们终将相遇,在那悠远的苍穹 || xp是傲娇少女 || 绀海厨子捏 || 会不定时红温 || NOIP 2024 全国唯一一个 263 || 我是粘土投诉米奇

    搬运于2025-08-24 22:31:57,当前版本为作者最后更新于2021-06-29 19:33:44,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意

    在平面上有 nn 个点,每个店有自己的坐标 xix_iyiy_i,现在给你一个数 kk,求最小的 ii 使得前 ii 个数中有 kk 个数在同一直线上。

    做法

    根据题意我们知道,需要求在一个平面上点的个数,而在同一条直线上的点,有以下特征:

    1. xx 一样
    2. yy 一样
    3. xxyy 的和一样
    4. xxyy 的差一样

    我们就可以定义四个桶数组来记录每一条直线上点的个数,直到出现一个 ii 让某一条直线满足要求(即点的个数等于 kk),就输出,如果循环结束还没出现,就输出 1-1,上代码。

    Code

    #include <iostream>
    
    using namespace std;
    int n,k;
    int x,y;
    int h[1000001],s[1000001],lx[2000001],rx[2000001];//桶数组,记录点数
    
    int main() {
        cin>>n>>k;
        for (int i=1;i<=n;i++) {
            cin>>x>>y;
            h[y]++;
            s[x]++;
            lx[x+y]++;
            rx[x-y+1000000]++;
            if (h[y]==k or s[x]==k or lx[x+y]==k or rx[x-y+1000000]==k) { //满足要求
                cout<<i;
                return 0;
            }
        }
        cout<<-1;//没找到
    }
    
    • 1

    信息

    ID
    6821
    时间
    2000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者