• 读入 并查集 gcd/exgcd 高精度 快速幂


    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], ed = 1;
    inline void addedge(int u, int v)
    {
            to[++ed] = v;
            nxt[ed] = Head[u];
            Head[u] = ed;
    }
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<stdio.h>
     7 #include<string.h>
     8 #include<algorithm>
     9 #include<map>
    10 #include<set>
    11 #include<vector>
    //睿智OJ头文件

    CLOCK

    printf("Time: %.3lfs
    ", (double)clock() / CLOCKS_PER_SEC);

    枚举子集

    for (int sub = (j - 1)&j; sub; sub = (sub - 1)&j)

    Huyyt

    /*Huyyt*/
    #include<bits/stdc++.h>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int mod = 1e9 + 7;
    const int gakki = 5 + 2 + 1 + 19880611 + 1e9;
    const int MAXN = 2e5 + 5;
    const int MAXM = 2e5 + 5;
    int main()
    {
            ios_base::sync_with_stdio(0);
            cin.tie(0);
            return 0;
    }
    View Code

    读入挂

    template <typename T> inline void read(T&x)
    {
            char cu = getchar();
            x = 0;
            bool fla = 0;
            while (!isdigit(cu))
            {
                    if (cu == '-')
                    {
                            fla = 1;
                    }
                    cu = getchar();
            }
            while (isdigit(cu))
            {
                    x = x * 10 + cu - '0', cu = getchar();
            }
            if (fla)
            {
                    x = -x;
            }
    }
    View Code
    inline void read(int &v)
    {
            v = 0;
            char c = 0;
            int p = 1;
            while (c < '0' || c > '9')
            {
                    if (c == '-')
                    {
                            p = -1;
                    }
                    c = getchar();
            }
            while (c >= '0' && c <= '9')
            {
                    v = (v << 3) + (v << 1) + c - '0';
                    c = getchar();
            }
            v *= p;
    }
    View Code

    输出挂

    struct Quick_Out {
        char buf[BUFFER_MAX_SIZE], *ps = buf, *pe = buf + BUFFER_MAX_SIZE;
        char tmp[100];
        double dx[15] = {5e-1,5e-2,5e-3,5e-4,5e-5,5e-6,5e-7,5e-8,5e-9,5e-10,5e-11,5e-12,5e-13,5e-14,5e-15};
        inline void write() {
            fwrite(buf, sizeof(char), ps - buf, stdout);
            ps = buf;
        }
        inline void oc(char c) {
            *(ps++) = c;
            if (ps == pe) write();
        }
        inline void os(char *s) {
            for (int i = 0; s[i]; ++i) oc(s[i]);
        }
        template<class T>
        inline void oi(T x, char bc = '
    ') {
            if (x < 0) oc('-'), x = -x;
            int len = 0;
            if (!x) tmp[len++] = '0';
            while (x) tmp[len++] = x % 10 + '0', x /= 10;
            while (len)  oc(tmp[--len]);
            oc(bc);
        }
        ~Quick_Out() {
            write();
        }
    } Out;
    View Code

    并查集

    int par[maxn], hs[maxn],int sz[maxn];
    int cnt;
    void init(int n)
    {
            for (int i = 0; i <= n; i++)
            {
                    par[i] = i, hs[i] = i, sz[i] = 1;
            }
    }
    int find(int x)
    {
            return par[x] == x ? x : par[x] = find(par[x]);
    }
    void unite(int x, int y)
    {
            x = find(x);
            y = find(y);
            if (x != y)
            {
                    par[x] = y, sz[y] += sz[x];
            }
    }
    void del(int x)
    {
            sz[find(hs[x])]--;
            hs[x] = ++cnt;
    }
    View Code

    高精度

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 1e9
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-8;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    const int maxn = 3e7 + 10;
    const int  maxm = 300;
    const int turn[4][2] = {{1, 0}, { -1, 0}, {0, 1}, {0, -1}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    ll mod = 1e6;
    using namespace std;
    const int base = 1000000000;
    const int base_digits = 9;
    struct bigint
    {
            vector<int> a;
            int sign;
            int size()
            {
                    if (a.empty())
                    {
                            return 0;
                    }
                    int ans = (a.size() - 1) * base_digits;
                    int ca = a.back();
                    while (ca)
                    {
                            ans++, ca /= 10;
                    }
                    return ans;
            }
            bigint operator ^(const bigint &v)
            {
                    bigint ans = 1, a = *this, b = v;
                    while (!b.isZero())
                    {
                            if (b % 2)
                            {
                                    ans *= a;
                            }
                            a *= a, b /= 2;
                    }
                    return ans;
            }
            bigint() :
                    sign(1)
            {
            }
    
            bigint(long long v)
            {
                    *this = v;
            }
    
            bigint(const string &s)
            {
                    read(s);
            }
    
            void operator=(const bigint &v)
            {
                    sign = v.sign;
                    a = v.a;
            }
    
            void operator=(long long v)
            {
                    sign = 1;
                    if (v < 0)
                    {
                            sign = -1, v = -v;
                    }
                    for (; v > 0; v = v / base)
                    {
                            a.push_back(v % base);
                    }
            }
    
            bigint operator+(const bigint &v) const
            {
                    if (sign == v.sign)
                    {
                            bigint res = v;
    
                            for (int i = 0, carry = 0; i < (int) max(a.size(), v.a.size()) || carry; ++i)
                            {
                                    if (i == (int) res.a.size())
                                    {
                                            res.a.push_back(0);
                                    }
                                    res.a[i] += carry + (i < (int) a.size() ? a[i] : 0);
                                    carry = res.a[i] >= base;
                                    if (carry)
                                    {
                                            res.a[i] -= base;
                                    }
                            }
                            return res;
                    }
                    return *this - (-v);
            }
    
            bigint operator-(const bigint &v) const
            {
                    if (sign == v.sign)
                    {
                            if (abs() >= v.abs())
                            {
                                    bigint res = *this;
                                    for (int i = 0, carry = 0; i < (int) v.a.size() || carry; ++i)
                                    {
                                            res.a[i] -= carry + (i < (int) v.a.size() ? v.a[i] : 0);
                                            carry = res.a[i] < 0;
                                            if (carry)
                                            {
                                                    res.a[i] += base;
                                            }
                                    }
                                    res.trim();
                                    return res;
                            }
                            return -(v - *this);
                    }
                    return *this + (-v);
            }
    
            void operator*=(int v)
            {
                    if (v < 0)
                    {
                            sign = -sign, v = -v;
                    }
                    for (int i = 0, carry = 0; i < (int) a.size() || carry; ++i)
                    {
                            if (i == (int) a.size())
                            {
                                    a.push_back(0);
                            }
                            long long cur = a[i] * (long long) v + carry;
                            carry = (int) (cur / base);
                            a[i] = (int) (cur % base);
                    }
                    trim();
            }
    
            bigint operator*(int v) const
            {
                    bigint res = *this;
                    res *= v;
                    return res;
            }
    
            friend pair<bigint, bigint> divmod(const bigint &a1, const bigint &b1)
            {
                    int norm = base / (b1.a.back() + 1);
                    bigint a = a1.abs() * norm;
                    bigint b = b1.abs() * norm;
                    bigint q, r;
                    q.a.resize(a.a.size());
    
                    for (int i = a.a.size() - 1; i >= 0; i--)
                    {
                            r *= base;
                            r += a.a[i];
                            int s1 = r.a.size() <= b.a.size() ? 0 : r.a[b.a.size()];
                            int s2 = r.a.size() <= b.a.size() - 1 ? 0 : r.a[b.a.size() - 1];
                            int d = ((long long) base * s1 + s2) / b.a.back();
                            r -= b * d;
                            while (r < 0)
                            {
                                    r += b, --d;
                            }
                            q.a[i] = d;
                    }
    
                    q.sign = a1.sign * b1.sign;
                    r.sign = a1.sign;
                    q.trim();
                    r.trim();
                    return make_pair(q, r / norm);
            }
    
            bigint operator/(const bigint &v) const
            {
                    return divmod(*this, v).first;
            }
    
            bigint operator%(const bigint &v) const
            {
                    return divmod(*this, v).second;
            }
    
            void operator/=(int v)
            {
                    if (v < 0)
                    {
                            sign = -sign, v = -v;
                    }
                    for (int i = (int) a.size() - 1, rem = 0; i >= 0; --i)
                    {
                            long long cur = a[i] + rem * (long long) base;
                            a[i] = (int) (cur / v);
                            rem = (int) (cur % v);
                    }
                    trim();
            }
    
            bigint operator/(int v) const
            {
                    bigint res = *this;
                    res /= v;
                    return res;
            }
    
            int operator%(int v) const
            {
                    if (v < 0)
                    {
                            v = -v;
                    }
                    int m = 0;
                    for (int i = a.size() - 1; i >= 0; --i)
                    {
                            m = (a[i] + m * (long long) base) % v;
                    }
                    return m * sign;
            }
    
            void operator+=(const bigint &v)
            {
                    *this = *this + v;
            }
            void operator-=(const bigint &v)
            {
                    *this = *this - v;
            }
            void operator*=(const bigint &v)
            {
                    *this = *this * v;
            }
            void operator/=(const bigint &v)
            {
                    *this = *this / v;
            }
    
            bool operator<(const bigint &v) const
            {
                    if (sign != v.sign)
                    {
                            return sign < v.sign;
                    }
                    if (a.size() != v.a.size())
                    {
                            return a.size() * sign < v.a.size() * v.sign;
                    }
                    for (int i = a.size() - 1; i >= 0; i--)
                            if (a[i] != v.a[i])
                            {
                                    return a[i] * sign < v.a[i] * sign;
                            }
                    return false;
            }
    
            bool operator>(const bigint &v) const
            {
                    return v < *this;
            }
            bool operator<=(const bigint &v) const
            {
                    return !(v < *this);
            }
            bool operator>=(const bigint &v) const
            {
                    return !(*this < v);
            }
            bool operator==(const bigint &v) const
            {
                    return !(*this < v) && !(v < *this);
            }
            bool operator!=(const bigint &v) const
            {
                    return *this < v || v < *this;
            }
    
            void trim()
            {
                    while (!a.empty() && !a.back())
                    {
                            a.pop_back();
                    }
                    if (a.empty())
                    {
                            sign = 1;
                    }
            }
    
            bool isZero() const
            {
                    return a.empty() || (a.size() == 1 && !a[0]);
            }
    
            bigint operator-() const
            {
                    bigint res = *this;
                    res.sign = -sign;
                    return res;
            }
    
            bigint abs() const
            {
                    bigint res = *this;
                    res.sign *= res.sign;
                    return res;
            }
    
            long long longValue() const
            {
                    long long res = 0;
                    for (int i = a.size() - 1; i >= 0; i--)
                    {
                            res = res * base + a[i];
                    }
                    return res * sign;
            }
    
            friend bigint gcd(const bigint &a, const bigint &b)
            {
                    return b.isZero() ? a : gcd(b, a % b);
            }
            friend bigint lcm(const bigint &a, const bigint &b)
            {
                    return a / gcd(a, b) * b;
            }
    
            void read(const string &s)
            {
                    sign = 1;
                    a.clear();
                    int pos = 0;
                    while (pos < (int) s.size() && (s[pos] == '-' || s[pos] == '+'))
                    {
                            if (s[pos] == '-')
                            {
                                    sign = -sign;
                            }
                            ++pos;
                    }
                    for (int i = s.size() - 1; i >= pos; i -= base_digits)
                    {
                            int x = 0;
                            for (int j = max(pos, i - base_digits + 1); j <= i; j++)
                            {
                                    x = x * 10 + s[j] - '0';
                            }
                            a.push_back(x);
                    }
                    trim();
            }
    
            friend istream& operator>>(istream &stream, bigint &v)
            {
                    string s;
                    stream >> s;
                    v.read(s);
                    return stream;
            }
    
            friend ostream& operator<<(ostream &stream, const bigint &v)
            {
                    if (v.sign == -1)
                    {
                            stream << '-';
                    }
                    stream << (v.a.empty() ? 0 : v.a.back());
                    for (int i = (int) v.a.size() - 2; i >= 0; --i)
                    {
                            stream << setw(base_digits) << setfill('0') << v.a[i];
                    }
                    return stream;
            }
    
            static vector<int> convert_base(const vector<int> &a, int old_digits, int new_digits)
            {
                    vector<long long> p(max(old_digits, new_digits) + 1);
                    p[0] = 1;
                    for (int i = 1; i < (int) p.size(); i++)
                    {
                            p[i] = p[i - 1] * 10;
                    }
                    vector<int> res;
                    long long cur = 0;
                    int cur_digits = 0;
                    for (int i = 0; i < (int) a.size(); i++)
                    {
                            cur += a[i] * p[cur_digits];
                            cur_digits += old_digits;
                            while (cur_digits >= new_digits)
                            {
                                    res.push_back(int(cur % p[new_digits]));
                                    cur /= p[new_digits];
                                    cur_digits -= new_digits;
                            }
                    }
                    res.push_back((int) cur);
                    while (!res.empty() && !res.back())
                    {
                            res.pop_back();
                    }
                    return res;
            }
    
            typedef vector<long long> vll;
    
            static vll karatsubaMultiply(const vll &a, const vll &b)
            {
                    int n = a.size();
                    vll res(n + n);
                    if (n <= 32)
                    {
                            for (int i = 0; i < n; i++)
                                    for (int j = 0; j < n; j++)
                                    {
                                            res[i + j] += a[i] * b[j];
                                    }
                            return res;
                    }
    
                    int k = n >> 1;
                    vll a1(a.begin(), a.begin() + k);
                    vll a2(a.begin() + k, a.end());
                    vll b1(b.begin(), b.begin() + k);
                    vll b2(b.begin() + k, b.end());
    
                    vll a1b1 = karatsubaMultiply(a1, b1);
                    vll a2b2 = karatsubaMultiply(a2, b2);
    
                    for (int i = 0; i < k; i++)
                    {
                            a2[i] += a1[i];
                    }
                    for (int i = 0; i < k; i++)
                    {
                            b2[i] += b1[i];
                    }
    
                    vll r = karatsubaMultiply(a2, b2);
                    for (int i = 0; i < (int) a1b1.size(); i++)
                    {
                            r[i] -= a1b1[i];
                    }
                    for (int i = 0; i < (int) a2b2.size(); i++)
                    {
                            r[i] -= a2b2[i];
                    }
    
                    for (int i = 0; i < (int) r.size(); i++)
                    {
                            res[i + k] += r[i];
                    }
                    for (int i = 0; i < (int) a1b1.size(); i++)
                    {
                            res[i] += a1b1[i];
                    }
                    for (int i = 0; i < (int) a2b2.size(); i++)
                    {
                            res[i + n] += a2b2[i];
                    }
                    return res;
            }
    
            bigint operator*(const bigint &v) const
            {
                    vector<int> a6 = convert_base(this->a, base_digits, 6);
                    vector<int> b6 = convert_base(v.a, base_digits, 6);
                    vll a(a6.begin(), a6.end());
                    vll b(b6.begin(), b6.end());
                    while (a.size() < b.size())
                    {
                            a.push_back(0);
                    }
                    while (b.size() < a.size())
                    {
                            b.push_back(0);
                    }
                    while (a.size() & (a.size() - 1))
                    {
                            a.push_back(0), b.push_back(0);
                    }
                    vll c = karatsubaMultiply(a, b);
                    bigint res;
                    res.sign = sign * v.sign;
                    for (int i = 0, carry = 0; i < (int) c.size(); i++)
                    {
                            long long cur = c[i] + carry;
                            res.a.push_back((int) (cur % 1000000));
                            carry = (int) (cur / 1000000);
                    }
                    res.a = convert_base(res.a, 6, base_digits);
                    res.trim();
                    return res;
            }
    };
    
    int main()
    {
            bigint anser;
            int n;
            cin >> n;
            bigint N(n);
            if (n & 1)
            {
                    anser = (N - bigint(1)) * (N - bigint(3)) * (bigint(2) * N * N * N * N - bigint(12) * N * N * N + bigint(25) * N * N - bigint(14) * N + bigint(1)) / bigint(12);
            }
            else
            {
                    anser = N * (N - bigint(2)) * (N - bigint(2)) * (bigint(2) * N * N * N - bigint(12) * N * N + bigint(23) * N - bigint(10)) / bigint(12);
            }
            cout << anser << endl;
            return 0;
    }
    View Code

    GCD

    ll gcd(ll a, ll b){
        ll t;
        while(b){
            t = b;
            b = a % b;
            a = t;
        }
        return a;
    }
    View Code

    EXGCD

    ll exgcd(ll a,ll b,ll &x,ll &y){
        if (!b){
            x=1,y=0;
            return a;
        }
        ll res=exgcd(b,a%b,y,x);
        y-=(a/b)*x;
        return res;
    }
    View Code

     快速幂

    ll Qpow(ll a, ll b)
    {
            ll ans = 1, base = a;
            while (b != 0)
            {
                    if (b & 1 != 0)
                    {
                            ans *= base;
                            ans %= mod;
                    }
                    base *= base;
                    base %= mod;
                    b >>= 1LL;
            }
            return ans;
    }
    View Code

    组合数

    ll ncr(ll n, ll r)
    {
            if (r < 0 || n < 0)
            {
                    return 0;
            }
            if (n < r)
            {
                    return 0;
            }
            ll a = fact[n];
            a = (a * Invfact[r]) % mod;
            a = (a * Invfact[n - r]) % mod;
            return a;
    }
    View Code

    线性逆元

    inv[i] = (p - p / i) * inv[p % i] % p;
    

    方向

    int dir[4][2] = { 0, -1, -1, 0, 0, 1, 1, 0 };

     __Int128

    inline __int128 read(){
        __int128 x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-')
                f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9'){
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*f;
    }
    
    inline void print(__int128 x){
        if(x<0){
            putchar('-');
            x=-x;
        }
        if(x>9)
            print(x/10);
        putchar(x%10+'0');
    }
    
    int main(void){
        __int128 a = read();
        __int128 b = read();
        print(a + b);
        cout<<endl;
        return 0;
    }
    View Code

     Hash

    int hs = 0;
    for (int i = 0; i <= 25; i++)
    {
        hs = (233LL * hs % mod + s[i]) % mod;
    }
    View Code
  • 相关阅读:
    URAL 2034 : Caravans (二分最短路)
    Qt程序的字符编码方式
    Qt程序国际化
    Qt5 + msvc2015编译器 环境配置 (不安装VS)
    error: undefined reference to `Dialog::on_pushButton_clicked()'在程序代码的后台程序代码出现问题
    Qt的inherits()函数判断qt控件是否为某个类实例
    WPS使用书签跳转到指定的文档位置
    Qt error ------ 出现Error
    环境名词
    source insight 联想出Qt库函数
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8970854.html
Copyright © 2020-2023  润新知