\(Link\) Description 输入一个整数\(n\),设\(f(x) = \sum\limits_{i=1}^n x \bmod {i}\),你需要输出\(f(1), f(2), \ldots , f(n)\)。\((n\le{10^6})\) Solution \(f(x)=\sum\limits_{i=1}^n x \bmod {i}=\sum\limits_{i=1}^n x-i\lfloor{\frac{x}{i}}\rfloor=nx-
如果两个只包含数字且长度为 \(n\) 的字符串 \(s\) 和 \(w\) 存在两个数字 \(1\leq i,j\leq n\),使得 \(s_i<w_i,s_j>w_j\),则称 \(s\) 和 \(w\) 是不可比的。现在给定两个包含数字和问号且长度为 \(n\) 的字符串,问有多少种方案使得将所有问号替换成0到9的数字后两个字符串是不可比
题目 给定一个数列满足\(a_n=233a_{n-1}+666a_{n-2},a_0=0,a_1=1\) \(T\)组询问求\(a_n \bmod {10^9+7},T\leq 5\times 10^7\) 分析 首先这道题可以用矩阵快速幂+预处理分块做(不放博客迁移前的链接了), 但是为了锻炼特征方程就来重新做一做这题 首先我们要找到一组\(p,q\)使得\(a
lowbit(n)是n最低一位的1和后面的所有0构成的数。 实现:lowbit(n) = (~n+1) & n = (-n) & n,原理是补码原理。(int中n + (-n) = \(2^{32}\)) 拓展问题:我有lowbit(n)了,可我怎么知道它是2的多少次幂? 大常数方法有很多,这里介绍一个牛逼的O(1)方法。 性质:any k ∈ [0, 35], \(2^k\) mod 37互
前言 数学就要多练练 题目 洛谷 CF 讲解 首先易证当\(n \le k\)时无解,\(k=0\)时答案为\((n-1)!\) 此时由于行和列是等价的,所以我们先只考虑对于每行只放一个车,最后将答案乘二即可 考虑放下一个车之后,如果当前列没有车,则对攻击数量不会有贡献,我们希望有\(k\)对车可以和互相攻击,则我
题目 P2261 [CQOI2007]余数求和 简化题意 求 \(G(n,k) = \sum\limits_{i = 1}^{n} k\mod i\) 思路 整除分块。 \[\begin{aligned} G(n,k) &= \sum\limits_{i = 1}^{n} k\mod i \\ &= \sum_{i = 1} ^ {n} k - \left\lfloor\dfrac{k}{i}\right\rfloor \times i \\ &a
题目链接:E. Student's Camp 题目大意:洛谷 题解:首先考虑最朴素的转移即设 \(f_{i,l,r}\) 表示到了第 \(i\) 层,前面全部连通,第 \(i\) 层剩余的砖块是 \([l,r]\) 的方案数,然后考虑容斥转移,令 \(P_{l,r}\) 表示一行中恰好剩下 \([l,r]\) 中的砖块的概率,然后就可以得到\(f_{i,l,r}=P_{
先考虑 \(q_i=i\)。\(i\) 向 \(p_i\) 连边,操作次数显然是 \(n\) 减去环数。 再考虑 \(q_i\) 给定。设 \(q\) 的逆排列 \(q'\),\(i\) 向 \(q'_{p_i}\) 连边。 可以看成是第一个排列的 \(i\) 向第二个排列的 \(p_i\) 连边,第二个排列的 \(i\) 向第一个排列的 \(q'_i\) 连边。 考虑原问
POJ - 2480 求\(\sum_{i=1}^{n}\gcd(i,n)~(1\leq n\leq 10^9)\) 显然有 \[\sum_{i=1}^{n}\gcd(i,n)=\sum_{d|n}d\varphi(\frac nd) \](考虑 \(\varphi\) 的意义) 然后直接做随便做。 Code #include<iostream> #include<cstdio> using namespace std; long long get
传送门 题解 写任意模数\(NTT\)的时候预处理系数写错了,精度爆炸了(痛哭) 首先\(c=0\)的时候答案很好计算,就是对于第一行第一列每个数算一下对\((n,n)\)的贡献即可 而\(c\neq 0\)可以通过对于每一位上的\(c\)对\((n,n)\)的贡献求和,发现这是一个卷积的形式,可以用任意模数\(NTT\)解决
分析: 吴思扬神仙题解Orz 不说了,3进制状压太恐怖,写(chao)半天 (这种题考场上就写暴力吧) #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<iostream> #include<map> #include<string> #define maxn 16
线性基板子题,注意特判\(0\),开\(long~long\)就好。 #include <cstdio> #include <cstring> using namespace std; #define R register #define LL long long #define int long long const int MAXN=1e4+10; const int MB=63; int n,q,cnt,zero; LL p[MAXN],a[MAXN]; inline
学习博客 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<vector> #include<string> #include<fstream> using namespace s
给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示。 Output 如题 Sample Input1 2 3 3 Sample Output20 Hint 1<=N,M,K<=5000000,1<=T<=2000 设f(
题目链接 https://codeforces.com/contest/1284/problem/E 题解 我们计算选出 \(3\) 个点构成三角形覆盖的点数之和,这个值乘以 \(\frac{(n-4)}{2}\) 就是答案。这是因为对于任意一个(凸或凹,根据题意凹的多种凹法只算一次)四边形,从 \(4\) 个顶点中选出 \(3\) 个构成三角形的 \(4\) 种
光线 忽略\(\%\)为了行文方便。一种直接的方法:构建图以及概率的转移。定义光线方向朝下,且在第\(i\)个玻璃和\(i+1\)个玻璃之间(\(i=0\)表示第一块玻璃的上方,\(i=n\)表示在最后一块玻璃的下方)的光线总数为\(f_i\)。那么我们想要的答案即为\(f_n\)。然后我们列出来转移,发现有 \[f
Cuber QQ 在疫情期间已经宅在家两个月了。 实在是无所事事的他,决定重操旧业,继续实现他曾经梦寐的钢琴演奏家梦想。 掀开积满了灰尘的钢琴盖,是他许久都未触碰的琴键,按下的瞬间,他发现,钢琴坏了。 Cuber QQ 有一个多年的弹奏习惯,他弹奏钢琴,同一时刻一定会同时按下 m 个琴键,他喜欢
AHOI 题意求在$ncdot m$的棋盘上摆放一些炮,使得任意两个炮不能互相攻击的方案数 题解对于每一列,显然只能有0或1或2个炮,这是列中不能攻击的充要条件 令$f_{i,j,k}$为考虑前i行,其中有j列有1个炮,k列有两个炮的方案数,这也意味着有$m-i-j$列没有放棋子 分当前行放0或1或2个棋子
题目链接:Three Integers 简要题意: 给出 \(a, b, c\) 满足 \(a \leq b \leq c\)。 你可以随便选择其中一个数,使这个数 \(+1\) 或 \(-1\)。 假设最后操作完 \(a\) 为 \(A\),\(b\) 为 \(B\),\(c\) 为 \(C\)。 你需要使 \(A | B\) 且 \(B | C\),并最小化操作次数。 输出操作次数和 \(A,
Description 题库链接 给你一个长度为 \(n\) 的序列 \(x\),你可以把这份序列划分为任意多份。如果某一份的 \(x\) 的和为 \(X\),那么这一份的价值为 \(aX^2+bX+c\)。问你划分后得到的最大价值为多少。 \(1\leq n\leq 10^6,-5\leq a\leq -1,|b,c|\leq 10^7,1\leq x_i\leq 100\) Solut
题目描述 题解 烧菜的弱化版 把第 $i$ 个物品的生成函数写出, $F_i(x)=\sum_{j=0}^{\infty} x^{a_i \times j}=\frac{1}{1-x^{a_i}}$ 则最后的答案的生成函数 $G(x)=\prod_{i=1}^nF_i(x)$ 两边取对数,即 $\ln G(x)=\ln (\prod_{i=1}^nF_i(x))=\sum_{i=1}^n \ln F_i(x)=-\sum_{i=1}^n
题目 传送门 思路 最大的跳跃距离为\(l\) 也就是说实际影响答案的就是区间\(i\)~\(i+l\)的石头的最小值 就相当于水管的流量是由最小的横截面决定的 代码 #include<iostream> using namespace std; int n,m; long long a[100005]; long long s[100005]; long long ans=(1ll<<60);
题目链接 https://atcoder.jp/contests/agc035/tasks/agc035_f 题解 B题难度的F题……然而我还是不会 假设第\(i\)行染的长度是\(a_i\), 第\(j\)列是\(b_j\) 考虑什么情况下两种方案会重复: 若存在\(i,j\)使得\(a_i+1=j\)且\(b_j=i\), 那么令\(a'_i=j-1,b'_j=i+1\)可以得到一样
线性基就是,给你n个数,这n个数会有一个线性基,是的n个数异或的任意值(包括这n个数),都可以用这个线性基来异或出来。 线性基大小logn。 然后可以询问异或最大最小值,以及第k大的值 洛谷:https://www.luogu.com.cn/problem/P3812 异或第k大:http://acm.hdu.edu.cn/showproblem.php?pid=39
Link 普及题,开个桶记录一下每个数出现的次数即可。 #include<cstdio> #include<cctype> #include<vector> namespace IO { char ibuf[(1<<21)+1],*iS,*iT; char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++))