大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
蓝桥杯省一你一定不能错过的模板大全(第三期)
蓝桥杯省一你一定不能错过的模板大全(第四期)!!!
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日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());
}
}