Cells(2021牛客暑期多校训练营9 C,LGV引理 + 范德蒙德行列式 + NTT)

2024-03-30 13:38

本文主要是介绍Cells(2021牛客暑期多校训练营9 C,LGV引理 + 范德蒙德行列式 + NTT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目链接

Cells

二、题目大意

在一个二维平面内,有 n n n 个起点 ( 0 , a i ) (0, a_i) (0,ai) 要走到对应的终点 ( i , 0 ) (i, 0) (i,0),每次可以向下走或向左走,问不相交路径组的方案数.

1 ≤ n ≤ 5 × 1 0 5 , 0 ≤ a i ≤ 1 0 6 , a i < a i + 1 1 \leq n \leq 5 \times 10^5, 0 \leq a_i \leq 10^6, a_i < a_{i+1} 1n5×105,0ai106,ai<ai+1.

三、分析

易知从 ( 0 , a i ) (0, a_i) (0,ai) 走到 ( j , 0 ) (j,0) (j,0) 的方案数为 ( a i + j j ) \binom{a_i + j}{j} (jai+j).
M = [ ( a 1 + 1 1 ) ( a 1 + 2 2 ) ⋯ ( a 1 + n n ) ( a 2 + 1 1 ) ( a 2 + 2 2 ) ⋯ ( a 2 + n n ) ⋮ ⋮ ⋯ ⋮ ( a n + 1 1 ) ( a n + 2 2 ) ⋯ ( a n + n n ) ] M = \left [ \begin{matrix} \binom{a_1 + 1}{1} & \binom{a_1 + 2}{2} & \cdots & \binom{a_1 + n}{n} \\ \binom{a_2 + 1}{1} & \binom{a_2 + 2}{2} & \cdots & \binom{a_2 + n}{n} \\ \vdots & \vdots & \cdots & \vdots \\ \binom{a_n + 1}{1} & \binom{a_n + 2}{2} & \cdots & \binom{a_n + n}{n} \end{matrix} \right] M=(1a1+1)(1a2+1)(1an+1)(2a1+2)(2a2+2)(2an+2)(na1+n)(na2+n)(nan+n)
则由 LGV 引理可知 ∣ M ∣ |M| M 即为答案.

由于 m a x ( n ) = 5 × 1 0 5 max(n) = 5 \times 10^5 max(n)=5×105,直接高斯消元是无法承受的,考虑简便计算 ∣ M ∣ |M| M 的方法.
∣ M ∣ = ∣ ( a 1 + 1 1 ) ( a 1 + 2 2 ) ⋯ ( a 1 + n n ) ( a 2 + 1 1 ) ( a 2 + 2 2 ) ⋯ ( a 2 + n n ) ⋮ ⋮ ⋯ ⋮ ( a n + 1 1 ) ( a n + 2 2 ) ⋯ ( a n + n n ) ∣ = ∣ ( a 1 + 1 ) ! 1 ! a 1 ! ( a 1 + 2 ) ! 2 ! a 1 ! ⋯ ( a 1 + n ) ! n ! a 1 ! ( a 2 + 1 ) ! 1 ! a 2 ! ( a 2 + 2 ) ! 2 ! a 2 ! ⋯ ( a 2 + n ) ! n ! a 2 ! ⋮ ⋮ ⋯ ⋮ ( a n + 1 ) ! 1 ! a n ! ( a n + 2 ) ! 2 ! a n ! ⋯ ( a n + n ) ! n ! a n ! ∣ = ∏ i = 1 n 1 i ! ∣ ( a 1 + 1 ) ! a 1 ! ( a 1 + 2 ) ! a 1 ! ⋯ ( a 1 + n ) ! a 1 ! ( a 2 + 1 ) ! a 2 ! ( a 2 + 2 ) ! a 2 ! ⋯ ( a 2 + n ) ! a 2 ! ⋮ ⋮ ⋯ ⋮ ( a n + 1 ) ! a n ! ( a n + 2 ) ! a n ! ⋯ ( a n + n ) ! a n ! ∣ = ∏ i = 1 n 1 i ! ∣ ( a 1 + 1 ) ( a 1 + 1 ) ( a 1 + 2 ) ⋯ ∏ i = 1 n ( a 1 + i ) ( a 2 + 1 ) ( a 2 + 1 ) ( a 2 + 2 ) ⋯ ∏ i = 1 n ( a 2 + i ) ⋮ ⋮ ⋯ ⋮ ( a n + 1 ) ( a n + 1 ) ( a n + 2 ) ⋯ ∏ i = 1 n ( a n + i ) ∣ = ∏ i = 1 n 1 i ! ∣ ( a 1 + 1 ) ( a 2 + 1 ) ⋯ ( a n + 1 ) ( a 1 + 1 ) ( a 1 + 2 ) ( a 2 + 1 ) ( a 2 + 2 ) ⋯ ( a n + 1 ) ( a n + 2 ) ⋮ ⋮ ⋯ ⋮ ∏ i = 1 n ( a 1 + i ) ∏ i = 1 n ( a 2 + i ) ⋯ ∏ i = 1 n ( a n + i ) ∣ = ∏ i = 1 n 1 i ! ∣ ( a 1 + 1 ) ( a 2 + 1 ) ⋯ ( a n + 1 ) ( a 1 + 1 ) 2 ( a 2 + 1 ) 2 ⋯ ( a n + 1 ) 2 ⋮ ⋮ ⋯ ⋮ ( a 1 + 1 ) n ( a 2 + 1 ) n ⋯ ( a n + 1 ) n ∣ = ∏ i = 1 n a i + 1 i ! ∣ 1 1 ⋯ 1 a 1 + 1 a 2 + 1 ⋯ a n + 1 ⋮ ⋮ ⋯ ⋮ ( a 1 + 1 ) n − 1 ( a 2 + 1 ) n − 1 ⋯ ( a n + 1 ) n − 1 ∣ = ∏ i = 1 n a i + 1 i ! ∏ j = 1 i − 1 ( a i − a j ) \begin{aligned} |M| &= \left | \begin{matrix} \binom{a_1 + 1}{1} & \binom{a_1 + 2}{2} & \cdots & \binom{a_1 + n}{n} \\ \binom{a_2 + 1}{1} & \binom{a_2 + 2}{2} & \cdots & \binom{a_2 + n}{n} \\ \vdots & \vdots & \cdots & \vdots \\ \binom{a_n + 1}{1} & \binom{a_n + 2}{2} & \cdots & \binom{a_n + n}{n} \end{matrix} \right| \\ &= \left | \begin{matrix} \frac{(a_1 + 1)!}{1!a_1!} & \frac{(a_1 + 2)!}{2!a_1!} & \cdots & \frac{(a_1 + n)!}{n!a_1!} \\ \frac{(a_2 + 1)!}{1!a_2!} & \frac{(a_2 + 2)!}{2!a_2!} & \cdots & \frac{(a_2 + n)!}{n!a_2!} \\ \vdots & \vdots & \cdots & \vdots \\ \frac{(a_n + 1)!}{1!a_n!} & \frac{(a_n + 2)!}{2!a_n!} & \cdots & \frac{(a_n + n)!}{n!a_n!} \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{1}{i!}}\left | \begin{matrix} \frac{(a_1 + 1)!}{a_1!} & \frac{(a_1 + 2)!}{a_1!} & \cdots & \frac{(a_1 + n)!}{a_1!} \\ \frac{(a_2 + 1)!}{a_2!} & \frac{(a_2 + 2)!}{a_2!} & \cdots & \frac{(a_2 + n)!}{a_2!} \\ \vdots & \vdots & \cdots & \vdots \\ \frac{(a_n + 1)!}{a_n!} & \frac{(a_n + 2)!}{a_n!} & \cdots & \frac{(a_n + n)!}{a_n!} \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{1}{i!}}\left | \begin{matrix} (a_1 + 1) & (a_1 + 1)(a_1 + 2) & \cdots & \prod_{i=1}^n{(a_1 + i)} \\ (a_2 + 1) & (a_2 + 1)(a_2 + 2) & \cdots & \prod_{i=1}^n{(a_2 + i)} \\ \vdots & \vdots & \cdots & \vdots \\ (a_n + 1) & (a_n + 1)(a_n + 2) & \cdots & \prod_{i=1}^n{(a_n + i)} \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{1}{i!}}\left | \begin{matrix} (a_1 + 1) & (a_2 + 1) & \cdots & (a_n + 1) \\ (a_1 + 1)(a_1 + 2) & (a_2 + 1)(a_2 + 2) & \cdots & (a_n + 1)(a_n + 2) \\ \vdots & \vdots & \cdots & \vdots \\ \prod_{i=1}^n{(a_1 + i)} & \prod_{i=1}^n{(a_2 + i)} & \cdots & \prod_{i=1}^n{(a_n + i)} \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{1}{i!}}\left | \begin{matrix} (a_1 + 1) & (a_2 + 1) & \cdots & (a_n + 1) \\ (a_1 + 1)^2 & (a_2 + 1)^2 & \cdots & (a_n + 1)^2 \\ \vdots & \vdots & \cdots & \vdots \\ (a_1 + 1)^n & (a_2 + 1)^n & \cdots & (a_n + 1)^n \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{a_i + 1}{i!}}\left | \begin{matrix} 1 & 1 & \cdots & 1 \\ a_1 + 1 & a_2 + 1 & \cdots & a_n + 1 \\ \vdots & \vdots & \cdots & \vdots \\ (a_1 + 1)^{n-1} & (a_2 + 1)^{n-1} & \cdots & (a_n + 1)^{n-1} \\ \end{matrix} \right| \\ &= \prod_{i=1}^n{\frac{a_i + 1}{i!} \prod_{j=1}^{i-1}{(a_i - a_j)}} \end{aligned} M=(1a1+1)(1a2+1)(1an+1)(2a1+2)(2a2+2)(2an+2)(na1+n)(na2+n)(nan+n)=1!a1!(a1+1)!1!a2!(a2+1)!1!an!(an+1)!2!a1!(a1+2)!2!a2!(a2+2)!2!an!(an+2)!n!a1!(a1+n)!n!a2!(a2+n)!n!an!(an+n)!=i=1ni!1a1!(a1+1)!a2!(a2+1)!an!(an+1)!a1!(a1+2)!a2!(a2+2)!an!(an+2)!a1!(a1+n)!a2!(a2+n)!an!(an+n)!=i=1ni!1(a1+1)(a2+1)(an+1)(a1+1)a1+2)(a2+1)a2+2)(an+1)an+2)i=1n(a1+i)i=1n(a2+i)i=1n(an+i)=i=1ni!1(a1+1)(a1+1)a1+2)i=1n(a1+i)(a2+1)(a2+1)a2+2)i=1n(a2+i)(an+1)(an+1)an+2)i=1n(an+i)=i=1ni!1(a1+1)(a1+1)2(a1+1)n(a2+1)(a2+1)2(a2+1)n(an+1)(an+1)2(an+1)n=i=1ni!ai+11a1+1(a1+1)n11a2+1(a2+1)n11an+1(an+1)n1=i=1ni!ai+1j=1i1(aiaj)
至此计算 ∣ M ∣ |M| M O ( n 2 ) O(n^2) O(n2) 的,依然不可接受,考虑如何快速计算 ∏ j = 1 i − 1 a i − a j \begin{aligned} \prod_{j=1}^{i-1}{a_i - a_j} \end{aligned} j=1i1aiaj.

f ( x ) = ∑ i = 1 n x a i \begin{aligned} f(x) = \sum_{i=1}^{n}{x^{a_i}}\end{aligned} f(x)=i=1nxai g ( x ) = ∑ i = 1 n x − a i \begin{aligned}g(x) = \sum_{i=1}^{n}{x^{-a_i}} \end{aligned} g(x)=i=1nxai.

用 NTT 处理出 h = f ∗ g = ∑ c i x i \begin{aligned} h = f*g = \sum{c_ix^i} \end{aligned} h=fg=cixi.

( a i − a j ) (a_i - a_j) (aiaj) 计算贡献,则 ∏ i = 1 n ∏ j = 1 i − 1 ( a i − a j ) = ∏ i > 0 i c i \begin{aligned} \prod_{i=1}^n{\prod_{j=1}^{i-1}(a_i - a_j)} = \prod_{i > 0}{i^{c_i}} \end{aligned} i=1nj=1i1(aiaj)=i>0ici.

因此答案为 ∏ i = 1 n a i + 1 i ! × ∏ i > 0 i c i \begin{aligned} \prod_{i=1}^{n}{\frac{a_i + 1}{i!}} \times \prod_{i>0}{i^{c_i}} \end{aligned} i=1ni!ai+1×i>0ici.

四、代码实现

#include <bits/stdc++.h>
using namespace std;template <typename T>
inline void read(T& x)
{x = 0; int f = 1; char ch = getchar();while(!isdigit(ch)) {if(ch == '-') f = -1; ch = getchar();}while(isdigit(ch))  {x = x * 10 + ch - '0', ch = getchar();}x *= f;
}template <typename T>
void print(T x)
{if(x < 0) putchar('-'), x = -x;if(x > 9) print(x / 10);putchar(x % 10 + '0');
}template <typename T>
void print(T x, char ch)
{print(x), putchar(ch);
}typedef double db;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;template <ui M_> struct ModInt {static constexpr ui M = M_;ui x;constexpr ModInt(): x(0U){}constexpr ModInt(ui x_): x(x_ % M){}constexpr ModInt(ull x_): x(x_ % M){}constexpr ModInt(int x_): x(((x_ %= static_cast<int>(M)) < 0) ? (x_ + static_cast<int>(M)) : x_){}constexpr ModInt(ll x_): x(((x_ %= static_cast<ll>(M)) < 0) ? (x_ + static_cast<ll>(M)) : x_){}ModInt &operator+=(const ModInt &a) {x = ((x += a.x) >= M) ? (x - M) : x; return *this;}ModInt &operator-=(const ModInt &a) {x = ((x -= a.x) >= M) ? (x + M) : x; return *this;}ModInt &operator*=(const ModInt &a) {x = (static_cast<ull>(x) * a.x) % M; return *this;}ModInt &operator/=(const ModInt &a) {return (*this *= a.inv());}ModInt pow(ll e) const {if(e < 0) return inv().pow(-e);ModInt a = *this, b = 1U; for(; e; e >>= 1) {if(e & 1) b *= a; a *= a;} return b;}ModInt inv() const {ui a = M, b = x; int y = 0, z = 1;while(b) {const ui q = a / b; const ui c = a - q * b; a = b; b = c; const int w = y - static_cast<int>(q) * z; y = z; z = w;}return ModInt(y);}ModInt operator+() const {return *this;}ModInt operator-() const {ModInt a; a.x = x ? (M - x) : 0U; return a;}ModInt operator+(const ModInt &a) const {return (ModInt(*this) += a);}ModInt operator-(const ModInt &a) const {return (ModInt(*this) -= a);}ModInt operator*(const ModInt &a) const {return (ModInt(*this) *= a);}ModInt operator/(const ModInt &a) const {return (ModInt(*this) /= a);}template <class T> friend ModInt operator+(T a, const ModInt &b) {return (ModInt(a) += b);}template <class T> friend ModInt operator-(T a, const ModInt &b) {return (ModInt(a) -= b);}template <class T> friend ModInt operator*(T a, const ModInt &b) {return (ModInt(a) *= b);}template <class T> friend ModInt operator/(T a, const ModInt &b) {return (ModInt(a) /= b);}explicit operator bool() const {return x;}bool operator==(const ModInt &a) const {return (x == a.x);}bool operator!=(const ModInt &a) const {return (x != a.x);}friend std::ostream &operator<<(std::ostream &os, const ModInt &a) {return os << a.x;}
};constexpr unsigned MO = 998244353U;
constexpr unsigned MO2 = 2U * MO;
constexpr int FFT_MAX = 23;
using Mint = ModInt<MO>;
constexpr Mint FFT_ROOTS[FFT_MAX + 1] = {1U, 998244352U, 911660635U, 372528824U, 929031873U, 452798380U, 922799308U, 781712469U, 476477967U, 166035806U, 258648936U, 584193783U, 63912897U, 350007156U, 666702199U, 968855178U, 629671588U, 24514907U, 996173970U, 363395222U, 565042129U, 733596141U, 267099868U, 15311432U};
constexpr Mint INV_FFT_ROOTS[FFT_MAX + 1] = {1U, 998244352U, 86583718U, 509520358U, 337190230U, 87557064U, 609441965U, 135236158U, 304459705U, 685443576U, 381598368U, 335559352U, 129292727U, 358024708U, 814576206U, 708402881U, 283043518U, 3707709U, 121392023U, 704923114U, 950391366U, 428961804U, 382752275U, 469870224U};
constexpr Mint FFT_RATIOS[FFT_MAX] = {911660635U, 509520358U, 369330050U, 332049552U, 983190778U, 123842337U, 238493703U, 975955924U, 603855026U, 856644456U, 131300601U, 842657263U, 730768835U, 942482514U, 806263778U, 151565301U, 510815449U, 503497456U, 743006876U, 741047443U, 56250497U, 867605899U};
constexpr Mint INV_FFT_RATIOS[FFT_MAX] = {86583718U, 372528824U, 373294451U, 645684063U, 112220581U, 692852209U, 155456985U, 797128860U, 90816748U, 860285882U, 927414960U, 354738543U, 109331171U, 293255632U, 535113200U, 308540755U, 121186627U, 608385704U, 438932459U, 359477183U, 824071951U, 103369235U};void fft(Mint *as, int n) {int m = n;if(m >>= 1) {for(int i = 0; i < m; ++i) {const ui x = as[i + m].x;as[i + m].x = as[i].x + MO - x;as[i].x += x;}}if(m >>= 1) {Mint prod = 1U;for(int h = 0, i0 = 0; i0 < n; i0 += (m<<1)) {for(int i = i0; i < i0 + m; ++i) {const ui x = (prod * as[i + m]).x;as[i + m].x = as[i].x + MO - x;as[i].x += x;}prod *= FFT_RATIOS[__builtin_ctz(++h)];}}while(m) {if(m >>= 1) {Mint prod = 1U;for(int h = 0, i0 = 0; i0 < n; i0 += (m<<1)) {for(int i = i0; i < i0 + m; ++i) {const ui x = (prod * as[i + m]).x;as[i + m].x = as[i].x + MO - x;as[i].x += x;}prod *= FFT_RATIOS[__builtin_ctz(++h)];}}if(m >>= 1) {Mint prod = 1U;for(int h = 0, i0 = 0; i0 < n; i0 += (m<<1)) {for(int i = i0; i < i0 + m; ++i) {const ui x = (prod * as[i + m]).x;as[i].x = (as[i].x >= MO2) ? (as[i].x - MO2) : as[i].x;as[i + m].x = as[i].x + MO - x;as[i].x += x;}prod *= FFT_RATIOS[__builtin_ctz(++h)];}}}for(int i = 0; i < n; ++i) {as[i].x = (as[i].x >= MO2) ? (as[i].x - MO2) : as[i].x;as[i].x = (as[i].x >= MO) ? (as[i].x - MO) : as[i].x;}
}void invFft(Mint *as, int n) {int m = 1;if(m < n>>1) {Mint prod = 1U;for(int h = 0, i0 = 0; i0 < n; i0 += (m<<1)) {for(int i = i0; i < i0 + m; ++i) {const ull y = as[i].x + MO - as[i + m].x;as[i].x += as[i + m].x;as[i + m].x = (prod.x * y) % MO;}prod *= INV_FFT_RATIOS[__builtin_ctz(++h)];}m <<= 1;}for(; m < n>>1; m <<= 1) {Mint prod = 1U;for(int h = 0, i0 = 0; i0 < n; i0 += (m<<1)) {for(int i = i0; i < i0 + (m>>1); ++i) {const ull y = as[i].x + MO2 - as[i + m].x;as[i].x += as[i + m].x;as[i].x = (as[i].x >= MO2) ? (as[i].x - MO2) : as[i].x;as[i + m].x = (prod.x * y) % MO;}for(int i = i0 + (m>>1); i < i0 + m; ++i) {const ull y = as[i].x + MO - as[i + m].x;as[i].x += as[i + m].x;as[i + m].x = (prod.x * y) % MO;}prod *= INV_FFT_RATIOS[__builtin_ctz(++h)];}}if(m < n) {for(int i = 0; i < m; ++i) {const ui y = as[i].x + MO2 - as[i + m].x;as[i].x += as[i + m].x;as[i + m].x = y;}}const Mint invN = Mint(n).inv();for(int i = 0; i < n; ++i) {as[i] *= invN;}
}void fft(vector<Mint> &as) {fft(as.data(), as.size());
}void invFft(vector<Mint> &as) {invFft(as.data(), as.size());
}vector<Mint> convolve(vector<Mint>& as, vector<Mint>& bs) {if(as.empty() || bs.empty()) return {};const int len = as.size() + bs.size() - 1;int n = 1;for(; n < len; n <<= 1) {}as.resize(n); fft(as);bs.resize(n); fft(bs);for(int i = 0; i < n; ++i) as[i] *= bs[i];invFft(as);as.resize(len);return as;
}const int M = (int)5e5;
const int N = (int)1e5;
const int S = (int)1e6;
const int inf = 0x3f3f3f3f;
const ll mod = (ll)998244353;int fac[M + 5], inv[M + 5], invfac[M + 5];void init()
{fac[0] = fac[1] = inv[1] = invfac[0] = invfac[1] = 1;for(int i = 2; i <= M; ++i){fac[i] = 1ll * fac[i - 1] * i % mod;inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;invfac[i] = 1ll * invfac[i - 1] * inv[i] % mod;}
}vector<Mint> as, bs;ll quick(ll a, ll b, ll p = mod)
{ll s = 1;while(b){if(b & 1) s = s * a % p;a = a * a % p;b >>= 1;}return s % p;
}void work()
{int n; read(n);int ans = 1;as.resize(S + 1), bs.resize(S + 1);for(int i = 1, a; i <= n; ++i){read(a);as[a] = 1, bs[S - a] = 1;ans = 1ll * ans * (a + 1) % mod * invfac[i] % mod;}convolve(as, bs);int k = as.size();for(int i = S + 1; i < k; ++i) if(as[i].x) ans = 1ll * ans * quick(i - S, as[i].x) % mod;print(ans, '\n');
}int main()
{
//    ios::sync_with_stdio(0);
//    cin.tie(0); cout.tie(0);
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
//    int T; read(T);
//    for(int ca = 1; ca <= T; ++ca)
//    {
//        work();
//    }init();work();
//    cerr << 1.0 * clock() / CLOCKS_PER_SEC << "\n";return 0;
}

这篇关于Cells(2021牛客暑期多校训练营9 C,LGV引理 + 范德蒙德行列式 + NTT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861631

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt