大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
蓝桥杯省一你一定不能错过的模板大全(第三期)
蓝桥杯省一你一定不能错过的模板大全(第四期)!!!
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日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-y0
、x=x1-x0
由于我们选取了最初的x0、y0
作为参照点来处理每个点,类似于向量。
所以我们可以将各点的直线方程的b值看作0
即y1-y0=k(x1-x0)
即为y=kx,k=y/x
。
相当于y
和x
的比值为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());}
}