F. 数学上来先打表】的更多相关文章

传送门 题解 做法与题解基本无异,不过他说用vector我觉得用链表来得更好一些. #include<queue> #include<ctime> #include<bitset> #include<vector> #include<cstdio> #include<algorithm> #define MN 110000 using namespace std; int read_p,read_ca,read_f; inline i…
题解: 搞这题搞了一天 思维不是很难 就是暴力压位bitset 分块做法速度更快 但是stl里的不能实现这个功能 所以手动实现 64位压一位 到65535跑一下1的个数 然后(x>>16)&65535+...计算出1的个数 眼查错果然还是不靠谱以后还是写对拍吧 另外的难点在于这题很卡空间 我们建立dfs树 这样把总空间变为最大消耗空间 合并bitset的时候我们利用启发式合并 并且bitset只存出现了的位置 就是那些64位都没有出现的就不存了 空间是nlogn的,但是还是挺卡的吧 使…
数学上来先打表 SRM 10 描述 给出 n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案:1.每条边连接两个不同的点,每两个点之间至多有一条边2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等3.边的长度均为1 输入格式 一行,一个整数n 输出格式 一行,一个整数,表示方案数对1004535809取模的结果. 样例输入 3 样例输出 7 数据范围与约定 对于8组数据,1<=n<=9对于余下8组数据,10<=n<=2000 样例解释 三个点之…
[算法]DP+数学计数 [题意]给出n个点(不同点之间有区别),求出满足下列条件的连边(双向边)方案(对1004535809取模): 1.每条边连接两个不同的点,每两个点之间至多有一条边. 2.不存在三个点a,b,c使三个点间两两可以互相到达且两两之间最短距离相等. 3.边的长度均为1. n<=2000 [题解] p[i]表示i个点形成联通块的满足条件的方案数. 如果i个点形成链,则一定是直链,如果有分支则一定不满足条件,如此有n!/2种方案(排列,正反算一种) 如果i个点形成环,则一定是i-1…
建立操作树,即1和3操作时i-1向i连边,2操作中k向i连边,然后dfs一遍 那么当我们走到一个节点,就执行该操作(修改也是操作),退出后取消该操作即可 于是相当于要维护一个东西,支持:1.加边:2.删边:3.询问联通块的第k小 容易想到按秩合并并查集,考虑询问操作:用分块,维护每一个权值块的权值数量(要离散) 然后就可以确定答案所在权值块,再依次枚举里面的权值并判断是否在联通块内即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #de…
This time I need you to calculate the f(n) . (3<=n<=1000000) f(n)= Gcd(3)+Gcd(4)+-+Gcd(i)+-+Gcd(n). Gcd(n)=gcd(C[n][1],C[n][2],--,C[n][n-1]) C[n][k] means the number of way to choose k things from n some things. gcd(a,b) means the greatest common di…
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波那契数列第 $i$ 项.由于 $a$ 序列是有序的,要求的答案可以表示成:$f(i)=\sum_{j=1}^{i}f(j)*F_{i-j}$由于斐波那契数列第 0 项是 0,显然可以表示成:$f(i)=\sum_{j=1}^{i-1}f(j)*F_{i-j}$考虑一下 $f(i+1)$ 和 $f(i…
题目大意:f[n]-n^3=f[n-2]-(n-1)^3 (n >=3),f[1]=1,f[2]=7,求f[n]. 题目思路:将n^3移到到等式右边化简的到:f[n]=f[n-2]+3n*(n-1)+1: 因为第n项与第n-2项有关,所以知道了f[1]与f[2]的值可以分奇偶打下表,找到循环节为4018. #include<cstdio> #include<stdio.h> #include<cstdlib> #include<cmath> #incl…
biubiu~~~ 这道题卡读题卡得很死......首先他告诉我们读循环的时候要顺着圈读,然后又说这个圈在数列上要以最大数开始读,而且以这样的循环的首数排序,得到的序列与原序列一样那么他就是可行序列,所以我们发现任何一个可行序列他的循环一定是连续的一块,因为假设我们有一个循环 x->y->z->a->x,并且假设x最大,那么在数列上只会出现x,y,z,a,那么我们根据循环的定义,他们的原本位置也在这几个里面那么也就是各个循环是一块一块的,然后我们在看刚才的假设,我们发现z是最大的!…
1. 希腊字母 字母 实现 字母 实现 $\alpha$ \alpha $\Alpha$ \Alpha $\beta$ \beta $\Beta$ \Beta $\gamma$ \gamma $\Gamma$ \Gamma $\delta$ \delta $\Delta$ \Delta $\epsilon$ \epsilon $\Epsilon$ \Epsilon $\varepsilon$ \varepsilon     $\zeta$ \zeta $\Zeta$ \Zeta $\eta$ \…