蓝桥杯每日N题 (消灭老鼠)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注

不清楚蓝桥杯考什么的点点下方👇

考点秘籍

想背纯享模版的伙伴们点点下方👇

蓝桥杯省一你一定不能错过的模板大全(第一期)

蓝桥杯省一你一定不能错过的模板大全(第二期)

蓝桥杯省一你一定不能错过的模板大全(第三期)

蓝桥杯省一你一定不能错过的模板大全(第四期)!!!

想背注释模版的伙伴们点点下方👇

蓝桥杯必背第一期

蓝桥杯必背第二期

往期精彩回顾

蓝桥杯上岸每日N题 第一期(一)!!!

蓝桥杯上岸每日N题第一期(二)!!!

蓝桥杯上岸每日N题第一期(三)!!!

蓝桥杯上岸每日N题第二期(一)!!!

蓝桥杯上岸每日N题第三期(一)!!!

蓝桥杯上岸每日N题 第四期(最少刷题数)!!!

蓝桥杯上岸每日N题 第五期(山)!!!

蓝桥杯上岸每日N题 第六期(求阶乘)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

操作系统期末题库 第九期(完结)

LeetCode Hot100 刷题(第三期)

idea创建SpringBoot项目报错解决方案

数据库SQL语句(期末冲刺)

想看JavaB组填空题的伙伴们点点下方 👇

填空题

竞赛干货

算法竞赛字符串常用操作大全

蓝桥杯上岸必刷!!!(模拟/枚举专题)

蓝桥杯上岸必背!!! (第三期 DP)

蓝桥杯上岸必背!!!(第四期DFS)

蓝桥杯上岸必背!!!(第五期BFS)

蓝桥杯上岸必背!!!(第六期树与图的遍历)

蓝桥杯上岸必背!!!(第七期 最短路算法)

蓝桥杯上岸必背!!!(第八期 简单数论)

蓝桥杯上岸必刷!!!(进制、数位专题)

蓝桥杯上岸考点清单 (冲刺版)!!!

蓝桥杯上岸必背模板 (纯享版)

题目

消灭老鼠

分析

直线方程y=kx+b
确定最初的点(x0,y0)后,询问的每个点到该点都看作一个向量。
计算好每个点(x1,y1)到点(x0,y0)差值
y=y1-y0x=x1-x0
由于我们选取了最初的x0、y0作为参照点来处理每个点,类似于向量。
所以我们可以将各点的直线方程的b值看作0
y1-y0=k(x1-x0)
即为y=kx,k=y/x
相当于yx的比值为k倍。
由于比值k只和x、y有关系,
所以我们可以将问题转换成去求x、y最大公约数k
我们知道y/x=k,如何进一步确定是同一条直线?
同一条直线相当于各个点y/x比值均相同
即我们的y/x中的y、x同除于k这样就可以将相同直线情况的点简化到一起。
再将其加入到set中,set的大小有多大就需要发射多少条不同的射线

注意

Java中我们用字符串形式set存储对应的x、y结果时,运算是用对应的字符串String.valueOf来进行处理。
如果直接处理再加入set中会WA

Accode

import java.util.*;
public class Main{
    public static int gcd(int a,int b){
        while(b!=0){
            int temp=a%b;
            a=b;
            b=temp;
        }
        return a;
    }
    public static void main(String []args){
        Scanner sc=new Scanner(System.in);
        Set<String>set=new HashSet<>();
        int T=sc.nextInt();
        int a=sc.nextInt();
        int b=sc.nextInt();
        while(T-->0){
            int x=sc.nextInt();
            int y=sc.nextInt();
            x-=a;
            y-=b;
            int d=gcd(x,y);
            String s=String.valueOf(y/d)+" "+String.valueOf(x/d);
            set.add(s);
        }
        System.out.println(set.size());
    }
}

过7/15个样例

import java.util.*;
public class Main{
    public static int gcd(int a,int b){
        while(b!=0){
            int temp=a%b;
            a=b;
            b=temp;
        }
        return a;
    }
    public static void main(String []args){
        Scanner sc=new Scanner(System.in);
        Set<String>set=new HashSet<>();
        int T=sc.nextInt();
        int a=sc.nextInt();
        int b=sc.nextInt();
        while(T-->0){
            int x=sc.nextInt();
            int y=sc.nextInt();
            x-=a;
            y-=b;
            int d=gcd(x,y);
            x/=d;y/=d;
            if(x<0)x=-x;y=-y;
            set.add(x+" "+y);
        }
        System.out.println(set.size());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寸 铁

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值