bzoj

@bzoj - 2324@ [ZJOI2011]营救皮卡丘

寵の児 提交于 2019-11-28 06:11:57
目录 @description@ @solution@ @accepted code@ @details@ @description@ 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的道路。 火箭队一共有N个据点,据点之间存在M条双向道路。据点分别从1到N标号。小智一行K人从真新镇出发,营救被困在N号据点的皮卡丘。为了方便起见,我们将真新镇视为0号据点,一开始K个人都在0号点。 由于火箭队的重重布防,要想摧毁K号据点,必须按照顺序先摧毁1到K-1号据点,并且,如果K-1号据点没有被摧毁,由于防御的连锁性,小智一行任何一个人进入据点K,都会被发现,并产生严重后果。因此,在K-1号据点被摧毁之前,任何人是不能够经过K号据点的。 为了简化问题,我们忽略战斗环节,小智一行任何一个人经过K号据点即认为K号据点被摧毁。被摧毁的据点依然是可以被经过的。 K个人是可以分头行动的,只要有任何一个人在K-1号据点被摧毁之后,经过K号据点,K号据点就被摧毁了。显然的,只要N号据点被摧毁,皮卡丘就得救了。 野外的道路是不安全的,因此小智一行希望在摧毁N号据点救出皮卡丘的同时,使得K个人所经过的道路的长度总和最少。 请你帮助小智设计一个最佳的营救方案吧! Input 第一行包含三个正整数N,M,K。表示一共有N

BZOJ 1420 Discrete Root

偶尔善良 提交于 2019-11-28 05:16:52
思路:数学大汇总 提交: \(3\) 次 错因:有一个 \(j\) 写成 \(i\) 题解: 求: \(x^k \equiv a \mod p\) 我们先转化一下:求出 \(p\) 的原根 \(g\) 然后我们用 \(BSGS\) 可以求出 \(g^b \equiv a \mod p\) ,即 \(a\) 的指标 \(b\) .然后因为原根的幂可以表示 \([0,p-1]\) 中的任何一个数,所以设 \(x=g^y\) ,原式可以转化成 \((g^y)^k \equiv a \mod p\) ,即 \(g^{y*k} \equiv g^b\mod P\) ,所以指数满足 \(y*k \equiv b \mod \varphi(p)\) ,可以用 \(exgcd\) 解出这个方程的解。 代码: #include<cstdio> #include<iostream> #include<cmath> #include<map> #include<algorithm> #define ll long long #define RR register ll #define int ll #define R register int using namespace std; namespace Luitaryi { template<class I> inline I g(I& x) { x

BZOJ 3611: [Heoi2014]大工程 虚树Dp

那年仲夏 提交于 2019-11-27 22:28:05
title BZOJ 3611 LUOGU 4103 Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。 在 \(2\) 个国家 \(a,b\) 之间建一条新通道需要的代价为树上 \(a,b\) 的最短路径。 现在国家有很多个计划,每个计划都是这样,我们选中了 \(k\) 个点,然后在它们两两之间 新建 \(C_k^2\) 条 新通道。现在对于每个计划,我们想知道: 这些新通道的代价和; 这些新通道中代价最小的是多少; 这些新通道中代价最大的是多少。 analysis 虚树 \(Dp\) 。 对于每次的询问,先建出虚树,再进行 \(Dp\) 。 建立虚树的关键点: 为了方便进行 \(Dp\) ,建虚树的时候可以把 \(1\) 号点加进去(但是如果给出的关键点中有 \(1\) 号点则不能重复加,因为本题中重复点会对 \(Dp\) 造成影响)。 虚树中的边权为原树中两点距离,不可视作 \(1\) 。 \(Dp\) ,其实准确来讲,应该叫做 子树 \(Dp\) : 重要的状态设置: \(siz[x]\) 表示以 \(x\) 为根的子树中关键点的数量; \(d[x]\) 表示以 \(x\) 为根的子树中,各关键点到 \(x\) 的距离之和; \(f[x]\) 表示以 \(x\)

bzoj 1901 or hdu 5412

若如初见. 提交于 2019-11-27 19:38:00
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 9543 Solved: 4004 [ Submit ][ Status ][ Discuss ] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1 ],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改 变后的a继续回答上面的问题。 Input 第一行有两个正整数n(1≤n≤10000),m(1≤m≤10000)。 分别表示序列的长度和指令的个数。 第二行有n个数,表示a[1],a[2]……a[n],这些数都小于10^9。 接下来的m行描述每条指令 每行的格式是下面两种格式中的一种。 Q i j k 或者 C i t Q i j k (i,j,k是数字,1≤i≤j≤n, 1≤k≤j-i+1) 表示询问指令,询问a[i],a[i+1]……a[j]中第k小的数。 C i t (1≤i≤n,0≤t≤10^9)表示把a[i]改变成为t m,n≤10000 Output 对于每一次询问,你都需要输出他的答案,每一个输出占单独的一行。 Sample

bzoj 3065

和自甴很熟 提交于 2019-11-27 19:37:57
3065: 带插入区间K小值 Time Limit: 60 Sec Memory Limit: 512 MB Submit: 5067 Solved: 1658 [ Submit ][ Status ][ Discuss ] Description 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i]。跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴。这时跳蚤国王决定理性愉悦一下,查询区间k小值。他每次向它的随从伏特提出这样的问题: 从左往右第x个到第y个跳蚤中,a[i]第k小的值是多少。 这可难不倒伏特,他在脑袋里使用函数式线段树前缀和的方法水掉了跳蚤国王的询问。 这时伏特发现有些跳蚤跳久了弹跳力会有变化,有的会增大,有的会减少。 这可难不倒伏特,他在脑袋里使用树状数组套线段树的方法水掉了跳蚤国王的询问。(orz 主席树) 这时伏特发现有些迟到的跳蚤会插入到这一行的某个位置上,他感到非常生气,因为……他不会做了。 请你帮一帮伏特吧。 快捷版题意:带插入、修改的区间k小值在线查询。 Input 第一行一个正整数n,表示原来有n只跳蚤排成一行做早操。 第二行有n个用空格隔开的非负整数,从左至右代表每只跳蚤的弹跳力。 第三行一个正整数q,表示下面有多少个操作。 下面一共q行,一共三种操作对原序列的操作:(假设此时一共m只跳蚤) 1. Q x y k:

[欧拉函数]BZOJ 2226 LCMsum

拟墨画扇 提交于 2019-11-27 14:47:07
Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes the Least Common Multiple of the integers i and n. Input The first line contains T the number of test cases. Each of the next T lines contain an integer n. Output Output T lines, one for each test case, containing the required sum. Sample Input 3 1 2 5 Sample Output 1 4 55 HINT Constraints 1 <= T <= 300000 1 <= n <= 1000000 分析 原式:$\sum _{i=1}^n lcm(i,n)$ $n\sum _{i=1}^n \frac{i}{gcd(i,n)}$ 考虑直接枚举因子: $n\sum _{d|n} \sum _{i=1}^{\frac{n}{d}} [gcd(\frac{n}{d},i)=1]i$ $n\sum _{d|n} \frac{d\varphi (d)}

[数论分块]BZOJ 1257 余数之和

不问归期 提交于 2019-11-27 14:46:59
Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数。 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7 Input 输入仅一行,包含两个整数n, k。 1<=n ,k<=10^9 Output 输出仅一行,即j(n, k)。 Sample Input 5 3 Sample Output 7 分析 $\sum _{i=1}^n k\ mod\ i$ 易得$\sum _{i=1}^n k-\left \lfloor \frac{k}{i} \right \rfloor i$ $nk-\sum _{i=1}^n \left \lfloor \frac{k}{i} \right \rfloor i$ 由于求整除值有一段区间相同,整除分块即可 #include <iostream> #include <cstdio> #include <cmath> using namespace std; typedef long long ll; ll n,k,ans; int main() { scanf("%lld%lld",&n,&k);ans=n*k; for (ll l

[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

你说的曾经没有我的故事 提交于 2019-11-27 13:58:42
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求 \(1\leq x\leq N, 1\leq y\leq M\) 且gcd(x, y)为质数的(x, y)有多少对。q组询问 分析 我们要求的是 \[\sum_{p \in P} \sum_{i=1}^n \sum_{j=1}^m [gcd(i,j)=p]\] (大写P表示质数集合) 根据 \(kgcd(i,j)=gcd(ki,kj)\) , \[原式=\sum_{p \in P} \sum_{i=1}^{\lfloor n/p \rfloor} \sum_{j=1}^{\lfloor m/p \rfloor} [gcd(i,j)=1]\] 又根据莫比乌斯反演里的一个常用结论(证明见 BZOJ 2301 ) \[\sum_{i=1}^n \sum_{j=1}^m [gcd(i,j)=1]= \sum_{d=1}^{min(n,m)} \mu(d ) \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor\] \[原式=\sum_{p \in P} \sum_{d=1}^{min( \lfloor n/p \rfloor, \lfloor m/p \rfloor)} \mu(d) \lfloor \frac{n}{pd} \rfloor

BZOJ 2818 欧拉函数,线性筛

烂漫一生 提交于 2019-11-27 13:39:25
题目链接: https://www.acwing.com/problem/content/description/222/ 给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对。 GCD(x,y)即求x,y的最大公约数。 输入格式 输入一个整数N 输出格式 输出一个整数,表示满足条件的数对数量。 数据范围 1≤N≤10^7 输入样例: 4 输出样例: 4 题解: 首先,用线性筛可以预处理处素数与欧拉函数。 我们定义 count(x)为: 1<=i,j<=N 有多少对gcd(i,j)=x; 那么原问题就转化成 (要求i是素数) 那么问题就转化成了,怎么能快速的求出count(x) 因为 count(x)为:1<=i,j<=N 有多少对gcd(i,j)=x , 那么i和j必须是x的倍数,i和j的范围是x,2x,3x..... *x 那么我们把i和j都约掉一个x,那么约掉后的i和j要求i和j互质,那么问题就转化成: 1<=i,j<= ,有多少对数字两两互质。 那么很容易想到欧拉函数,euler(x) 是 1到x有多少对数字和x互质,然后用前缀和就可以预处出来 sum[1]=1, sum[i]=sum[i-1]+2*euler[i] 代码: #include<bits/stdc++.h> using namespace std; typedef long