Giao của đường thẳng và đường tròn


Submit solution

Points: 2 (partial)
Time limit: 1.0s
Memory limit: 10M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Titi học về tọa độ Đề-các vuông góc thấy rất thích. Titi gặp phải bài toán khó là cho phương trình đường thẳng \(y=ax+b\) và đường tròn \((x-x_0)^2+(y-y_0)^2=r^2\) tìm giao điểm của hai đường. Bạn hãy lập trình giúp Titi nhé

Input

Dòng một chứa hai số thực \(a, b\) là hệ số của phương trình đường thẳng \(y=ax+b (|a|,|b| \le 10^4 )\)

Dòng hai chứa 3 số thực tương ứng với tọa độ tâm \(x_0, y_0\) có giá trị tuyệt đối không vượt quá \(10^4\) và bán kính hình tròn \( r (0< r \le 10^4)\)

Ouput

Nếu hai đường không cắt nhau in ra "Hai duong khong cat nhau"

Nếu hai đường tiếp xúc in ra "Hai duong tiep xuc tai (x, y)" với x, y lấy độ chính xác 3 chữ số sau dấu chấm thập phân

Nếu hai đường cắt nhau tại hai điểm phân biệt in ra "Hai duong cat nhau tai hai diem phan biet (x1, y1) va (x2, y2)" trong đó \(x_1, y_1, x_2, y_2\) lấy độ chính xác 3 chữ số thập phân và \(x_1 <= x_2\)

enter image description here

Ví dụ 1

Input

1.0 10.0
0.0 0.0 2.0

Output

Hai duong khong cat nhau

Ví dụ 2

Input

0.0 2.0
0.0 0.0 2.0

Output

Hai duong tiep xuc tai (0.000, 2.000)

Ví dụ 3

Input

1.0 -2.0
0.0 0.0 2.0

Output

Hai duong cat nhau tai hai diem phan biet (0.000, -2.000) va (2.000, 0.000)

Chú ý: các khoảng trống trong các output để output cho đúng nhé

tichpx

Comments


  • 0
    tranchithanh2212  commented on Nov. 16, 2018, 1:17 a.m. edited
    //Giao cua duong thang y=ax+b va duong tron (x-x0)^2+(y-y0)^2=r^2
    #include<stdio.h>
    #include<math.h>
    #define bp(x) (x)*(x)
    #define f(x) (a*x+b)
    int main()
    {
        double a,b,x0,y0,r,A,B,C,D,x1,x2;
        scanf("%lf%lf",&a,&b);
        scanf("%lf%lf%lf",&x0,&y0,&r);
        A=1+bp(a);
        B=-x0+(b-y0)*a;
        C=bp(x0)+bp(b-y0)-bp(r);
        D=B*B-A*C;
        if(D<0) printf("Hai duong khong cat nhau");
        else if(D==0) printf("Hai duong tiep xuc tai (%.3lf, %.3lf)",
        x1=-B/A,f(-B/A));
        else
        {
            D=sqrt(D); x1=(-B-D)/A; x2=(-B+D)/A;
            printf("Hai duong cat nhau tai hai diem phan biet (%.3lf,%.3lf) va (%.3lf,%.3lf)",
            x1,f(x1),x2,f(x2));
            }
    
    
    
        }