求助!有没有巨佬想在NOIP考前一天帮本蒟蒻调一下代码?
查看原帖
求助!有没有巨佬想在NOIP考前一天帮本蒟蒻调一下代码?
84987
LJY_ljy楼主2020/12/4 01:29

RT,只有6060分,辛苦各位巨佬了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ZZ register long long
using namespace std;

inline long long gcd(long long a, long long b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

inline long long exgcd(long long a, long long b, long long &x, long long &y) {
    if (b == 0) {
        x = 1; y = 0;
        return a;
    }
    long long r = exgcd(b, a % b, x, y);
    long long t = x;
    x = y; y = t - a / b * y;
    return r;
}

inline long long read() {
    ZZ x = 0, f = 1;
    char ch = getchar();
    while (!isdigit(ch)) {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (isdigit(ch)) {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

int n;

inline void ZSX() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        long long a, b, c, x, p;
        a = read(); b = read(); c = read();
        long long m = gcd(a, b);
        a /= m; b /= m;
        if (c % m != 0) printf("-1\n");
        else {
            c /= m;
            long long d = exgcd(a, b, x, p);
            x *= c; p *= c;
            long long ans1, ans2, ans3, ans4;
            if (x < 0) {
                long long s = (-x) / b;
                if (x + s * b <= 0) x += (s + 1) * b;
                else x += s * b;
                ans1 = x;
                ans4 = (c - ans1 * a) / b;
            }  else {
                long long s = x / b;
                if (x - s * b <= 0) x -= (s - 1) * b;
                else x -= s * b;
                ans1 = x;
                ans4 = (c - ans1 * a) / b;
            }
            if (p < 0) {
                long long s = (-p) / a;
                if (p + s * a <= 0) p += (s + 1) * a;
                else p += s * a;
                ans2 = p;
                ans3 = (c - ans2 * b) / a;
            }  else {
                long long s = p / a;
                if (p - s * a <= 0) p -= (s - 1) * a;
                else p -= s * a;
                ans2 = p;
                ans3 = (c - ans2 * b) / a;
            }
            if (ans3 < 0 || ans4 < 0) printf("%lld %lld\n", ans1, ans2);
            else
                printf("%lld %lld %lld %lld %lld\n", (ans3 - ans1) / b + 1, ans1, ans2, ans3, ans4);
        }
    }
}

int main() {
    ZSX();
    return 0;
}

@⚡小林子⚡

@陆麟瑞

@zhangyuhan

@Catalan1906

@Rainy7

@暴力出奇迹

@LHQing

@WYXkk

@zimujunqwq

2020/12/4 01:29
加载中...