1 条题解

  • 0
    @ 2025-10-8 16:59:25
    #include <bits/stdc++.h>
    using namespace std;
    int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
    bool pd(int x, int &r)
    {
        for (int i = 0; i * i <= x; i++) if (x == i * i) { r = i; return 1; }
        return 0;
    }
    int main()
    {
        int T, M; scanf("%d%d", &T, &M);
        while (T--)
        {
            int a, b, c, r; scanf("%d%d%d", &a, &b, &c);
            if (a < 0) a = -a, b = -b, c = -c;
            int delta = b * b - 4 * a * c;
            if (delta < 0) { printf("NO\n"); continue; }
            if (pd(delta, r))
            {
                int p = -b + r, q = 2 * a;
                if (p * q == 0) printf("0\n");
                else
                {
                    if (p * q < 0) { printf("-"); p = abs(p); q = abs(q); }
                    int d = gcd(p, q);
                    p /= d; q /= d;
                    if (q == 1) printf("%d\n", p); else printf("%d/%d\n", p, q);
                }
            }
            else
            {
                int p = -b, q = 2 * a;
                if (p * q != 0)
                {
                    if (p * q < 0) { printf("-"); p = abs(p); q = abs(q); }
                    int d = gcd(p, q);
                    p /= d; q /= d;
                    if (q == 1) printf("%d+", p); else printf("%d/%d+", p, q);
                }
                p = 1, q = 2 * a;
                for (int i = 2; i * i <= delta; i++)
                    while (delta % (i * i) == 0)
                    {
                        p *= i;
                        delta /= (i * i);
                    }
                int d = gcd(p, q);
                p /= d; q /= d;
                if (p != 1) printf("%d*", p);
                if (delta != 1) printf("sqrt(%d)", delta);
                if (q != 1) printf("/%d", q);
                printf("\n");
            }
        }
        return 0;
    }
    
    • 1

    【模拟(难度:8)】[CSP-J 2023] 一元二次方程

    信息

    ID
    1972
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    61
    已通过
    18
    上传者