60pts求调
查看原帖
60pts求调
754438
Maxwell1楼主2024/10/25 18:36
#include<bits/stdc++.h>
using namespace std;
int delta;
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

void fan(int &a) {
    a = 0 - a;
}

int huajiangenshi(int n) {
    int ans = 1;
    for(int i = 2; i * i <= n; i++) {
        while(n % (i * i) == 0) {
            n /= (i * i);
            ans *= i;
        }
    }
    return ans;
}

bool op = true;

pair<int, int> huajianfenshu(int a, int b) {
    int op = 1;
    if(a < 0) {
        fan(op);
        fan(a);
    }
    if(b < 0) {
        fan(op);
        fan(b);
    }
    int x = gcd(a, b);
    return make_pair(a / x * op, b / x);
}

int a, b, c;
pair<int, int> l;

int main() {
    int t, m;
    scanf("%d%d", &t, &m);
    while(t--) {
        op = 1;
        scanf("%d%d%d", &a, &b, &c);
        delta = b * b - 4 * a * c;
        if(delta < 0) {
            printf("NO\n");
            continue;
        }
        if(delta == 0) {
            l = huajianfenshu(-b, 2 * a);
            if(l.second == 1)
                printf("%d\n", l.first);
            else
                printf("%d/%d\n", l.first, l.second);
            continue;
        }
        int x = huajiangenshi(delta);
        if(x * x == delta) {
            if(a >= 0) {
                l = huajianfenshu(-b + x, 2 * a);
            } else
                l = huajianfenshu(-b - x, 2 * a);
            if(l.second == 1)
                printf("%d\n", l.first);
            else
                printf("%d/%d\n", l.first, l.second);
            continue;
        }
        l = huajianfenshu(-b, 2 * a);
        if(l.second == 0) {
            op = 0;
        } else if(l.second == 1)
            printf("%d", l.first);
        else
            printf("%d/%d", l.first, l.second);
        if(a > 0) {
            l = huajianfenshu(x, 2 * a);
        } else
            l = huajianfenshu(-x, 2 * a);
        if(l.first > 0 && op)
            printf("+");
        if(l.first == -1)
            printf("-");
        else if(l.first != 1)
            printf("%d*", l.first);
        printf("sqrt(%d)", delta / x / x);
        if(l.second != 1)
            printf("/%d", l.second);
        printf("\n");
    }
    return 0;
}

dalao们,有几个点WA了,赛前求调!

2024/10/25 18:36
加载中...