蓝桥杯每日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());
    }
}

你可能感兴趣的:(蓝桥杯上岸,蓝桥杯,java,算法,数据结构,leetcode,每日N题)