zoukankan      html  css  js  c++  java
  • 题解 CF21B 【Intersection】

    本题需掌握知识:一次函数相关知识、分支结构

    要想考虑全面确实起码绿的难度,再加上 if 不写乱,蓝题也是差不多的罢(个人向)。


    考虑各种情况,我们一 一分析:

    1. 有一个式子三个系数都是0:很显然无论 x,y 取何值,0=0 这个恒等式绝对成立,那么这个式子是覆盖整个坐标系的,肯定有无限个点重合,-1石锤。
    2. 有一个式子 a,b 两系数为0,c不为0:很显然这个式子无解,所以绝对没有重合,0石锤。
    3. 在上述均不满足的条件下,有一个式子 b 系数为0:此时该直线平行于 y 轴,另一条直线一定会与它相交。
    4. 在两个式子的 b 均为0的情况下:
      1. 有一个式子 a 为0 但c不为0,同2.所述。
      2. 两个式子 c都为0 或 a都为0 或 a,c 成比例关系,说明两直线重合,输出-1
      3. 剩余情况肯定平行或无解,0石锤。
    5. 在上述均不满足且a,b成比例关系时
      1. 如果 b,c 也成比例关系,说明两直线重合,-1走人。
      2. 肯定平行。
    6. 肯定相交。

    心态差点炸了

    注意:因为涉及到除法运算,建议使用floatdouble类型存储六个数据。

    #include<bits/stdc++.h>
    using namespace std;
    double a1,b1,c1,a2,b2,c2;
    int solve() {
    	if(b1||b2) {
    		if((!a1&&!b1&&!c1)||(!a2&&!b2&&!c2)) return -1;
    		if((!a1&&!b1)||(!a2&&!b2)) return 0;
    		if(!b1||!b2) return 1;
    	} else {
    		if((!a1&&c1)||(!a2&&c2)) return 0;
    		if(!(c2||c1)||!(a2||a1)||a1/c1==a2/c2) return -1;
    		return 0;
    	}
    	if(a1/b1==a2/b2) {
    		if(c1/b1==c2/b2) return -1;
    		return 0;
    	}
    	return 1;
    }
    int main() {
    	cin>>a1>>b1>>c1>>a2>>b2>>c2;
    	cout<<solve();
    	return 0;
    }
    

    代码还是很短的,但是调好有点难

    另:可以使用desmos帮助理解。

  • 相关阅读:
    shell脚本批量检查网站是否正常
    测试运维-linux中常用的操作命令以及工作思路
    软件自动化测试工程师面试题集锦(2)
    UI自动化测试常用操作函数(3)
    软件自动化测试工程师面试题集锦(1)
    UI自动化测试常用操作函数(2)
    UI自动化测试常用操作函数(1)
    滑屏找元素
    代码报错解析
    心情20.4.6
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12748212.html
Copyright © 2011-2022 走看看