Samjia Contest 12.22

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm) 文章目录一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、遇到的问题 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 一、卸载node 如果你已经安装了node,那么你需要先卸载node,如果你没有安装那直接跳过这一步到下一步。 打开控制面板 -> 打开程序和功能 -> 右上角搜索输入node -> 右键卸载 为了确保彻底 阅读详情

传送门:
https://floj.tech/contest/449

题解:

注意到每次只会把一段往前copy,那么一个点每次都会只会向前走,假设现在x∈[yi,yi+1),hi>0,那么x一次向左会跳yi-hi的距离,直到跳到yi左边。

这个可以直接除一下来得到跳出这段后的位置,倒着扫,x最终会定在一个点上。

如果两个点最终汇聚在一个点上,它们就是一样的。

时间复杂度 O ( ( a + q ) b ) O((a+q)b) O((a+q)b)


题解:

首先对于z考虑[l…r]包含他的条件是什么?

显然就是两个不同的子树里都有[l…r]的点。

考虑一次枚举z的子树里的点,假设现在枚举到了y子树里的x点,把x点放到y子树之前的所有子树的点中,显然取相邻的两个点是最优的(左一个,右一个),这样会有若干对(a,b)

用启发式合并就可以做到(a,b)的总对数是O(n log n),用set维护相邻,这一部分复杂度是O(n log^2 n)

若有一对(a,b)满足l<=a&&r>=n,那么[l…r]在z上就是可行的。

但是我们不可能枚举每个询问,可能是要把(a,b)整体做。

把所有(a,b)按a排序,显然b也要升序,不然就去掉,相当于做个单调栈。

然后做出若干个(ai,a_{i+1}],b_{i+1},这样只用找到l对应的那一段,然后判断r>=b_{i+1},而不是之前的存在性问题。

二维偏序的话扫描线+树状数组。

复杂度大概为 O ( n l o g 2 n + 2 n l o g n l o g ( n l o g n ) ) O(n log^2 n+2 n log n log (n log n)) O(nlog2n+2nlognlog(nlogn))


题解:

我们很容易想到一种计算方法:
枚举二分图左边的点数x(0<=x<=n),这个贡献就是 C n x ∗ 3 x ( n − x ) C_{n}^x*3^{x(n-x)} Cnx​∗3x(n−x)。

这显然会有重复,一种具体方案重复的次数是 2 联 通 块 个 数 2^{联通块个数} 2联通块个数

于是想到一个dp:
设 f ( i , j ) f(i,j) f(i,j)表示i个点,j个连通块的贡献和。
g ( n ) g(n) g(n)就表示之前那种计算方法的贡献。

结合做过的城市规划,不难列出转移:

f ( i , j ) ( j &gt; 1 ) f(i,j)(j&gt;1) f(i,j)(j>1)
= ∑ x = 1 i − 1 C i − 1 x − 1 ∗ f x , 1 ∗ f i − x , j − 1 =\sum_{x=1}^{i-1}C_{i-1}^{x-1}*f_{x,1}*f{i-x,j-1} =∑x=1i−1​Ci−1x−1​∗fx,1​∗fi−x,j−1

f ( i , 1 ) = ( g ( i ) − ∑ x = 2 i f i , j ∗ 2 j ) / 2 f(i,1)=(g(i)-\sum_{x=2}^{i}f_{i,j}*2^{j})/2 f(i,1)=(g(i)−∑x=2i​fi,j​∗2j)/2

求出 f i , 1 f_{i,1} fi,1​之后就可以算答案了,设 s ( n ) s(n) s(n)表示n个点时的答案。

s ( n ) = ∑ x = 1 n C n − 1 x − 1 ∗ f ( x , 1 ) ∗ s ( n − x ) s(n)=\sum_{x=1}^n C_{n-1}^{x-1}*f(x,1)*s(n-x) s(n)=∑x=1n​Cn−1x−1​∗f(x,1)∗s(n−x)

至此得到一个 O ( n 3 ) O(n^3) O(n3)的做法。

发现 f ( i , j ) ( j &gt; 1 ) f(i,j)(j&gt;1) f(i,j)(j>1)的转移是基本一样的,所以可以去掉后一维,设 f ( n ) f(n) f(n)直接表示n个点一个联通块的贡献。

f ( n ) = ( g ( n ) − ∑ x = 1 n − 1 C n − 1 x − 1 ∗ f ( x ) ∗ g ( n − x ) ∗ 2 ) / 2 f(n)=(g(n)-\sum_{x=1}^{n-1}C_{n-1}^{x-1}*f(x)*g(n-x)*2)/2 f(n)=(g(n)−∑x=1n−1​Cn−1x−1​∗f(x)∗g(n−x)∗2)/2

那么复杂度就变成了 O ( n 2 ) O(n^2) O(n2)

显然f和s的转移都可以用分治NTT或多项式求逆优化,复杂度O(n log n)。

最后的瓶颈在于g。

比赛时就卡在了g,很痛苦

这是一个套路,可惜我不知道。

( ( a + b ) 2 − a 2 − b 2 ) / 2 = a b ((a+b)^2-a^2-b^2)/2=ab ((a+b)2−a2−b2)/2=ab
g ( n ) = ∑ x = 0 n C n x ∗ 3 x ( n − x ) g(n)=\sum_{x=0}^n C_{n}^x*3^{x(n-x)} g(n)=∑x=0n​Cnx​∗3x(n−x)
= ∑ x = 0 n C n x ∗ 3 ( n 2 − x 2 − ( n − x ) 2 ) / 2 =\sum_{x=0}^n C_{n}^x*3^{(n^2-x^2-(n-x)^2)/2} =∑x=0n​Cnx​∗3(n2−x2−(n−x)2)/2

这样就有一个卷积的东西了,不过因为mod 998244353意义下没有 3 \sqrt 3 3 ​,所以要分奇偶讨论。

最后的结果是做两次NTT就行了。

总复杂度O(n log n),不过多项式求逆我不是很熟,所以用了cdq分治NTT。


Code:

T1:

#include<map>
#include<cstdio>
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define fd(i, x, y) for(int i = x; i >= y; i --)
using namespace std;

const int N = 1005;

int n, a, b, q, x;

struct nod {
    int x; char c;
} c[N];

int y[N], h[N];

int la(int x) {
    fd(i, b, 1)
        if(x >= y[i] && x < y[i + 1]) {
            if(!h[i]) continue;
            int z = (x - y[i]) / (y[i] - h[i]);
            x -= (z + 1) * (y[i] - h[i]);
        }
    return x;
}

map<int, int> bz;

int main() {
    scanf("%d %d %d %d", &n, &a, &b, &q);
    fo(i, 1, a) scanf("%d %c", &c[i].x, &c[i].c);
    fo(i, 1, b) scanf("%d %d", &y[i], &h[i]);
    y[b + 1] = n + 1;
    fo(i, 1, a) bz[la(c[i].x)] = c[i].c;
    fo(i, 1, q) {
        scanf("%d", &x);
        printf("%c", bz[la(x)] ? bz[la(x)] : '?');
    }
}

T2:

#include<set>
#include<cstdio>
#include<algorithm>
#define pr printf
#define low(a) ((a) & -(a))
#define fo(i, x, y) for(int i = x; i <= y; i ++)
using namespace std;

const int N = 3e5 + 5;

int n, m, x, y;
int fi[N], nt[N * 2], to[N * 2], tot;
struct ak {
    int l, r, i;
} q[N];

void link(int x, int y) {
    nt[++ tot] = fi[x], to[tot] = y, fi[x] = tot;
}

int siz[N], son[N], top[N], dep[N], fa[N];

void dg(int x) {
    siz[x] = 1;
    dep[x] = dep[fa[x]] + 1;
    for(int i = fi[x]; i; i = nt[i]) if(to[i] != fa[x])
        fa[to[i]] = x, dg(to[i]),
        siz[x] += siz[to[i]],
        son[x] = siz[to[i]] > siz[son[x]] ? to[i] : son[x];
}

void dfs(int x) {
    if(son[x]) top[son[x]] = top[x], dfs(son[x]);
    for(int i = fi[x]; i; i = nt[i]) if(to[i] != fa[x] && to[i] != son[x])
        top[to[i]] = to[i], dfs(to[i]);
}

set<int> s;

int d[N];

void bb(int x) {
    d[++ d[0]] = x;
    for(int i = fi[x]; i; i = nt[i]) if(to[i] != fa[x])
        bb(to[i]);
}

struct nod {
    int a, b;
    nod(int _a = 0, int _b = 0) {a = _a, b = _b;}
} a[N * 60]; int a0;

void gg() {
    if(s.size()) {
        int mi = *s.begin(), mx = *s.rbegin();
        fo(i, 1, d[0]) {
            int x = d[i];
            if(mi < x) a[++ a0] = nod(*--s.lower_bound(x), x);
            if(mx > x) a[++ a0] = nod(x, *s.upper_bound(x));
        }
    }
    fo(i, 1, d[0]) s.insert(d[i]);
}

int cmp(nod a, nod b) {
    if(a.a < b.a) return 1;
    if(a.a > b.a) return 0;
    return a.b > b.b;
}

struct edge {
    int fi[N], to[N * 60], nt[N * 60], tot;
    bool v[N * 60];
    void link(int x, int y, bool z) {
        nt[++ tot] = fi[x], to[tot] = y, v[tot] = z, fi[x] = tot;
    }
} e;

void ad(int x, int y, int r) {
    e.link(x, r, 1); e.link(y + 1, r, 0);
}

void dd(int x) {
    for(int i = fi[x]; i; i = nt[i]) if(to[i] != fa[x] && to[i] != son[x])
        dd(to[i]);
    if(son[x]) dd(son[x]);
    a0 = 0;
    d[d[0] = 1] = x; gg();
    for(int i = fi[x]; i; i = nt[i]) if(to[i] != fa[x] && to[i] != son[x]) {
        d[0] = 0; bb(to[i]);
        gg();
    }
    a[++ a0] = nod(x, x);
    sort(a + 1, a + a0 + 1, cmp);
    int z0 = 0;
    fo(i, 1, a0) {
        while(z0 > 0 && a[z0].b >= a[i].b) z0 --;
        a[++ z0] = a[i];
    } a0 = z0;
    fo(i, 1, a0) ad(a[i - 1].a + 1, a[i].a, a[i].b);
    if(x != son[fa[x]]) s.clear();
}

int f[N];
void add(int x, int y) { while(x <= n) f[x] += y, x += low(x);}
int sum(int x) {
    int s = 0;
    while(x) s += f[x], x -= low(x);
    return s;
}

int cmp2(ak a, ak b) {
    return a.l < b.l;
}

int ans[N];

int main() {
    scanf("%d %d", &n, &m);
    fo(i, 1, n - 1) {
        scanf("%d %d", &x, &y);
        link(x, y); link(y, x);
    }
    dg(1); top[1] = 1; dfs(1);
    dd(1);
    fo(i, 1, m) scanf("%d %d", &q[i].l, &q[i].r), q[i].i = i;
    sort(q + 1, q + m + 1, cmp2);
    int L = 1;
    fo(i, 1, m) {
        while(L <= q[i].l) {
            for(int j = e.fi[L]; j; j = e.nt[j])
                add(e.to[j], e.v[j] ? 1 : -1);
            L ++;
        }
        ans[q[i].i] = sum(q[i].r);
    }
    fo(i, 1, m) printf("%d\n", ans[i]);
}

T3:

#include<cstdio>
#include<algorithm>
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define fd(i, x, y) for(int i = x; i >= y; i --)
#define ff(i, x, y) for(int i = x; i < y; i ++)
using namespace std;
 
const ll mo = 998244353;
 
const int N = 8e5 + 5;
int n, T;
 
ll a[N], b[N], w[N], tp;
 
ll ksm(ll x, ll y) {
    ll s = 1;
    for(; y; y /= 2, x = x  * x % mo)
        if(y & 1) s = s * x % mo;
    return s;
}
 
const ll ni3 = ksm(3, mo - 2);

const ll ni2 = ksm(2, mo - 2);

void Dft(ll *a, int n) {
    ff(i, 0, n) {
        int p = 0, q = i;
        fo(j, 1, tp) p = p * 2 + q % 2, q /= 2;
        if(i > p) swap(a[i], a[p]);
    }
    for(int m = 2; m <= n; m *= 2) {
        int h = m / 2;
        ff(i, 0, h) {
            ll W = w[i * (n / m)];
            for(int j = i; j < n; j += m) {
                int k = j + h;
                ll u = a[j], v = a[k] * W;
                a[j] = (u + v) % mo;
                a[k] = (u - v) % mo;
            }
        }
    }
}
 
void fft(ll *a, ll *b, int n) {
    ll v = ksm(3, (mo - 1) / n);
    w[0] = 1; fo(i, 1, n) w[i] = w[i - 1] * v % mo;
    Dft(a, n); Dft(b, n);
    ff(i, 0, n) a[i] = a[i] * b[i] % mo;
    fo(i, 1, n / 2) swap(w[i], w[n - i]);
    Dft(a, n); v = ksm(n, mo - 2);
    ff(i, 0, n) a[i] = (a[i] + mo) * v % mo;
}
 
ll fac[N], nf[N];
 
ll f[N], g[N], s[N];
 
void cl() { ff(i, 0, 1 << tp) a[i] = b[i] = 0;}

void dg(int x, int y) {
    if(x == y) {
        f[x] = (g[x] - 2 * fac[x - 1] * f[x] % mo + mo) * ni2 % mo;
        return;
    }
    int m = (x + y) / 2;
    dg(x, m);
    tp = 0;
    while(1 << ++ tp <= y + m - 2 * x + 1);
    cl();
    fo(i, 1, m - x + 1) a[i] = f[x + i - 1] * nf[x + i - 2] % mo;
    fo(i, 1, y - x) b[i] = g[i] * nf[i] % mo;
    fft(a, b, 1 << tp);
    fo(i, m + 1, y) f[i] = (f[i] + a[i - x + 1]) % mo;
    dg(m + 1, y);
}

void dg2(int x, int y) {
    if(x == y) {
        if(!x) s[x] ++; else
        s[x] = s[x] * fac[x - 1] % mo;
        return;
    }
    int m = (x + y) / 2;
    dg2(x, m);
    tp = 0;
    while(1 << ++ tp <= y + m - 2 * x + 1);
    cl();
    fo(i, 1, m - x + 1) a[i] = s[x + i - 1] * nf[x + i - 1] % mo;
    fo(i, 1, y - x) b[i] = f[i] * nf[i - 1] % mo;
    fft(a, b, 1 << tp);
    fo(i, m + 1, y) s[i] = (s[i] + a[i - x + 1]) % mo;
    dg2(m + 1, y);
}

int q, x;

int main() {
    n = 100000;
    fac[0] = 1; fo(i, 1, n) fac[i] = fac[i - 1] * i % mo;
    nf[n] = ksm(fac[n], mo - 2);
    fd(i, n, 1) nf[i - 1] = nf[i] * i % mo;

    while(1 << tp ++ <= n);

    fo(i, 0, n) if(i & 1) a[i] = b[i] = nf[i] * ksm(ni3, (ll) i * i / 2);
    fft(a, b, 1 << tp);
    fo(i, 1, n) g[i] = a[i];
    cl();
    fo(i, 0, n) a[i] = b[i] = nf[i] * ksm(ni3, (ll) i * i / 2);
    fft(a, b, 1 << tp);
    fo(i, 1, n) g[i] = ((a[i] - g[i] + mo) + g[i] * ni3) % mo * fac[i] % mo * ksm(3, (ll) i * i / 2) % mo;
    dg(1, n);
    dg2(0, n);
    for(scanf("%d", &q); q; q --) scanf("%d", &x), printf("%lld\n", s[x]);
}
南京理工大学计算机预推免面试(双非重点关注) 南京理工大学总体来说对双非学校比较友好,上岸率比较高,而且面试形式是线上,在预推免的过程中,可以作为重点关注的学校,但是一定要注意南理报名截止的时间,部分学校可能保研名额公示的比较晚,对于保研边缘人来说很可能会错过,我的建议是,即使不确定能否拿到保研名额,先查一下截止时间,先在系统上报名!!一旦拿到了offer,就是铁的,保底专硕,而且有很大的技巧性,一定要认真看哈!!!每个人的情况可能都不一样,如果有需要帮忙可以私我~~~ 阅读详情

相关推荐

一键转换B站M4S缓存为MP4:无需FFMPEG命令的简易工具

本文介绍了一款专为B站用户设计的绿色工具,可将缓存的M4S视频和音频文件一键转换为通用MP4格式。该工具完全图形化操作,无需学习复杂的FFmpeg命令,解决了普通用户处理B站缓存视频的痛点。文章详细讲解了从下载、配置到转换的完整流程,并提供了常见问题排查与安全使用建议,帮助用户高效、安全地管理离线视频内容。

joy55的博客 480

17.8.10第五次测试

1.公约数 (gcd.cpp\c\pas) 【问题描述】 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b。 【输入格式】 输入共一行,一个正整数n。 【输出格式】 输出共一行,一个正整数表示答案。 【输入输出样例】 gcd.in 3 gcd.out 1 解释:只有(2,...

281

WinFrom真入门(1)——Windows窗体应用概念

用Winform开发的桌面程序,是在Windows操作系统上运行的,这个不用多说。窗体(Form)的作用‌:窗体是用户交互的容器,承载按钮、文本框等控件,构成应用程序的界面‌。在Windows操作系统中,窗体(窗口)所处可见,例如: 一个标准的窗体其实就是一块矩形区域,客户区域指的是窗口内部区域。除去标题兰和边框外的区域可视为内部区域,称为客户区域。我们开发人员可以在窗口的客户区域中放置控件,也可以在其中绘制出咱们所需要的图形。WinForm程序的项目的结构,如下图: Main()方法是程序的入口,这几行代

ByteGeek 1634

label {树形dp+机智的优化}

【题目描述】 Samjia和Peter不同,他喜欢玩树。所以Peter送给他一颗大小为n的树,节点编号从1到n。 Samjia要给树上的每一个节点赋一个[1,m]之间的权值,并使得有边直接相连的两个节点的权值之差的绝对值 ≥ k。请你告诉Samjia有多少种不同的赋值方案,只用求出答案对10^9+7(1000000007)取模得到的结果。 【Sample Input】 (输入数据的第一行包含一

yellowdesk的玻璃屋 1669

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2555

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1330

Samjia Contest Graph

题意: msc喜欢黑白灰,所以msc很喜欢黑白图,一个n个节点的黑白图是这样定义的: 1、每个节点都有其唯一的编号1..n1..n1..n。 2、图中有若干条无向边,每条边都有颜色(黑色或白色),同时图中没有重边也没有自环。 3、这个图是一个二分图。 现在msc想知道有多少种不同的节点数为nnn的黑白图。 两个黑白图不同,当且仅当存在一条边(u,v)(u,v)(u,v)在其中一个图中出现但是在另外...

XLno_name的博客 362

Android CCodec (十一) Codec2Buffer BufferPool分析

1、序言 2、C2BlockPool分析 3、SimpleC2Component关于BlockingBlockPool的实现 4、总结

给大佬递杯卡布奇诺的博客 4022

【NOI2017模拟6.20】树形图求和

题目解法一首先对于树形图的个数这样算: a[i][i]表示i号点的出度,a[i][j]表示从i到j的边个数的相反数 去掉第n行第n列后剩下的矩阵的行列式即为树形图个数 考虑枚举每条边并计算这条边的影响。 就是说我们枚举一条边(x,y)然后a[x][x]–,a[x][y]++重新计算行列式 对于如下矩阵: A=[a1,1......a1,n] A=\begin{bmatrix} a_{1,

samjia2000的博客 991

【ComfyUI】QwenImageEdit + Z-Image 面部融合图生图

本文介绍了一种基于Stable Video Diffusion(SVD)模型的ComfyUI图生视频工作流,能够将静态图片转换为动态视频。工作流包含模型加载、图像导入、条件生成、视频采样、解码合成等8个核心步骤,通过SVD_img2vid_Conditioning节点实现视觉语义转换。该方案适用于创意视频制作、产品演示等场景,支持设计师和AI爱好者快速实现"以图生动"效果。文中详细说明了工作流架构、关键节点功能、操作流程及应用案例,并提供了模型参数和使用注意事项。

Mr数据杨 1814

新版CKA2020-2020-10-13-真题试卷

2020年10月13日 真题 新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole that only allows the creation of the following resource types: Depl

随笔记录-分享&记忆 2394

2015暑假集训总结

2015暑假集训总结(顺带一些不屑的谴责)

samjia2000的博客 1960

Python爬虫实战:使用最新技术爬取GitHub Trending项目

本文将详细介绍如何使用Python最新技术栈构建一个高效的GitHub Trending爬虫。我们将使用异步请求库httpx、HTML解析库parsel、数据存储方案以及反反爬技术,完整实现一个能够稳定获取GitHub Trending数据的爬虫系统。文章包含5000余字详细教程,从环境搭建到代码实现,再到数据处理和存储,最后部署运行,提供全方位指导。GitHub Trending页面展示了GitHub上当前最受欢迎的项目,对于开发者了解技术趋势、发现优秀项目非常有价值。

2201_76125261的博客 738

[DP] LOJ#6172. Samjia 和大树

考虑暴力的dp fx,i" role="presentation">fx,ifx,if_{x,i} 表示 x" role="presentation">xxx 点权值为 i" role="presentation">iii 的方案数,这个dp数组是有对称性的。 再观察一下可以发现,大于 n&#x2217;k" role="presentation">n∗kn∗kn*k 且小于 m&#x2212

CE玩家 506

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

loj6172 Samjia和大树(树形DP+找规律)

题目: https://loj.ac/problem/6172 分析: 首先容易得出这样的dp式子 然后发现后面那个Σ其实是两段区间,可以用总和减去中间一段区间表示,所以只要维护个前缀和就ok了 这样复杂度就是O(nm)的 但是题目中的m异常巨大,有1e9,好像不能用dp做 但我们可以找下规律,发现对于一个点,其所有dp值是前后对称的,而且中间有很长的一段都是相同的数字! 设某...

weixin_30697239的博客 267

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Samjia Graph (图计数, 多项式求逆 / 开根)

solution 考虑一种计数的方案,g(n)=∑x+y=nC(n,x)⋅3xyg(n) = \sum_{x+y=n} C(n,x) \cdot 3^{xy}g(n)=∑x+y=n​C(n,x)⋅3xy x,y分别是左右的点数,3的几次方意思是黑 / 白 / 没有。 容易发现,对于一个有k个连通块的真正的黑白图,会在g(n)中贡献2k2^k2k次。 设f(n)f(n)f(n)表示大小为n的连通...

一位蒟蒻的小博客 315

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

第一次玩博客

第一次玩博客!

youyouyou__的博客 267

用tensorflow搭建CNN

利用tensorflow搭建CNN,也就是卷积神经网络是一件很简单的事情,笔者按照官方教程中使用MNIST手写数字识别为例展开代码,整个程序也基本与官方例程一致,不过在比较容易迷惑的地方加入了注释,有一定的机器学习或者卷积神经网络制式的人都应该可以迅速领会到代码的含义。 #encoding=utf-8 import tensorflow as tf import numpy as np f

恒河沙无数 9089

samjia的降智模拟总结

前言 被虐爆了QwQ 总结 一看这个A怎么这么毒啊 一看这个B怎么只给一个log啊 一看这个C怎么这么多项式啊,还是10^6跑1s 于是决定先推C 推了很多种方法之后找到了一个要求∏i=1n(1+kix)\prod_{i=1}^{n}(1+k^ix)∏i=1n​(1+kix)的东西 分治是不是跑不过啊,欸我把它求个ln怎么样 哇可以exp啊=w=一个log说不定能跑 然后他死了 这个东西显然可以用...

时光真疯狂, 我一路执迷于匆忙. 440

【泉州一中国庆集训day4】书稿

题目链接:http://v.qzyz.com/contest/291/problem/2 题目大意:有一个w*h的网格和n滴墨水,第 i 滴墨水的坐标为P(xi,yi),有一对参数(ai,bi)。对于一个网格C(x,y),这滴墨水对它的影响是max(0,ai-bi*dist(P,C)),其中dist(P,C)=max(|x-xi|,|y-yi|)。最终每个网格的受损值是所有墨水对它的影响。给你q个

aufeas的博客 795

JZOJ 幽幽子与森林

题目大意: 迷途竹林可以看成是一个n个点的森林,幽幽子定义dis(u,v)为u到v路径上的边的数量,若u和v不连通则为m。她定义整个森林的危险度为 为了去拜访永琳师匠,幽幽子需要提前知道迷途竹林的危险度。但迷途竹林的形态是时刻变化着的,所以幽幽子希望知道危险度的期望是多少。 为了避免浮点运算,答案对998244353取模。 1&lt;=n&lt;=2e5 题解: 这个计数写得真的是累。 很容易想到...

Cold_Chair的博客 1万+

NTT(快速数论变换)和多项式求逆学习小记

NTT类似于FFT,只是把单位复数根改成了具有特殊性质的数,当然是在mo意义下的。 假设是mo一个数p。 p一定要是一个质数,并且p-1 = 2^x*y,2^x次方还要比较大。 原根: 对于一个质数p,它一定有原根g。 满足g^x(mod p)意义下互不相同(0&lt;=x&lt;&lt;&lt;&lt;winwniw_n^i对应gi∗(mo−1)ngi∗(mo−1)ng^{i*{(...

Cold_Chair的博客 1366

多项式全家福(缺插值和点值)

文章目录写法:vector写有什么好处?vector写的时候注意什么?Dft:求逆: 写法: vector写有什么好处? 1.分治NTT的时候不用处理麻烦的下标。 2.传进函数的时候不用传指针而不会爆栈。 3.copy,swap,reverse,clear,resize等vector的函数可以帮助您快速地处理。 vector写的时候注意什么? 由于本人非常非常地懒,所以全部都是用vector写的。...

Cold_Chair的博客 1186

【NOI2019模拟2019.6.29】智慧树(fft单位根性质推导)

Description: 1<=n<=8000,m<=57984且m是mo-1的约数 空间限制32MB,时间限制5s 题解: 首先思考一下m=2?m=2^?m=2?怎么做? 我们知道fft的本质是一个循环卷积,这道题要求mod mmod~mmod m,那么可以利用这个特质而不管溢出,一开始对每一个点的序列进行dft,然后每次转移就是把dft的序列乘起来,...

Cold_Chair的博客 1055

FFT(快速傅里叶变换)学习小记

磕了三天,也算是磕了出来,还需要强化一下。谢谢yl的ppt。问题引入:51nod 大数乘法 V2 题目就是大数乘法,n&lt;=10^5。一个科学的做法:把a,b视作多项式。先分别做点值运算,再做插值运算搞回来就行了。但是我们知道正常的点值和插值都需要O(n^2)的时间去完成。FFT就是利用特殊的x去优化这个过程。单位复数根:n次单位复数根是满足wn=1w^n=1的复数。n次单位复数根恰好有n个,它们均

Cold_Chair的博客 825

【清华夏令营模拟2019.5.22】连续段(析合树+多项式牛顿迭代)

Description: n<=1e5,P是NTT模数 题解: 析合树见WC2019LCA营员交流讲稿 我们考虑把一个序列划分成本源连续段。 怎么划分呢?就是极大划分,假设划分成了x段。 这x段需要满足任取一个区间的段,要么可以全部可以拼起来(1),要么除了最大的那一个其它都不行(2)。 仔细思考这样就能表示所有的段了。 (1)就是析点,(2)就是合点。 考虑x=2、3时只能是合点 设F表...

Cold_Chair的博客 813
上一篇: JZOJ 4583【NOI2016模拟7.5】求和
下一篇: Codeforces 1087F Rock-Paper-Scissors Champion
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值