求助 WHOI B
  • 板块学术版
  • 楼主Erine
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/1/20 18:06
  • 上次更新2023/10/24 03:29:48
查看原帖
求助 WHOI B
738474
Erine楼主2023/1/20 18:06
#include <bits/stdc++.h>
#define int __int128

using namespace std;

struct ios {
    inline char read() {
        static const int inlen = 1 << 18 | 1;
        static char buf[inlen], *s, *t;
        return (s == t) && (t = (s = buf) + fread(buf, 1, inlen, stdin)), s == t ? -1 : *s++;
    }
    template<typename T> inline ios& operator>> (T &x) {
        static char c11, boo;
        for (c11 = read(), boo = 0; !isdigit(c11); c11 = read()) {
            if (c11 == -1) return *this;
            boo |= c11 == '-';
        }
        for (x = 0; isdigit(c11); c11 = read()) x = x * 10 + (c11 ^ '0');
        boo && (x = -x);
        return *this;
    }
} fin;

struct exios {
    template<typename _CharT, typename _Traits = char_traits<_CharT>>
    struct typ {
        typedef basic_ostream<_CharT, _Traits>& (* end) (basic_ostream<_CharT, _Traits>&);
    };

    template<typename T> friend exios &operator<<(exios &out, T num) {
        if (num < 0) putchar('-'), num = -num;
        if (num >= 10) out << num / 10;
        putchar(num % 10 + '0');
        return out;
    }

    friend exios &operator<<(exios &out, const char * s) { printf("%s", s); return out; }
    friend exios &operator<<(exios &out, string s) { cout << s; return out; }
    friend exios &operator<<(exios &out, typ<char>::end e) { puts(""); return out; }
} fout;

const int maxn = 1e6 + 10;

int n, m;
int a[maxn];
int c[maxn];
int b[maxn];
int g;

signed main() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++) {
        fin >> a[i];
        c[i] = a[i];
    }
    int _n = unique(c + 1, c + 1 + n) - (c + 1);
    if (_n == 1) {
        if (a[1] >= m - a[1]) {
            fout << a[1] << endl;
            for (int i = 1; i <= n; i++) fout << a[1] << " ";
        } else {
            fout << (m - a[1]) % m << endl;
            for (int i = 1; i <= n; i++) fout << a[1] - m << " ";
        }
        return 0;
    }
    for (int i = 1; i <= n; i++) {
        b[i] = m * m - (a[i] + 1) * m + a[i];
        assert(b[i] >= 0);
        g = __gcd(b[i] >= 0 ? b[i] : -b[i], g);
    }
    fout << g % m << endl;
    for (int i = 1; i <= n; i++) {
        fout << b[i] << " ";
    }
    return 0;
}

两个 Sub 都各错了一个点。。。

2023/1/20 18:06
加载中...