csustoj专题

CSUSTOJ 你真的会字符串吗?(DP)

思路: 最后结果每一位都等于 s [ i ] s[i] s[i], 只要知道当前位的 p r e [ i ] pre[i] pre[i]值和当前位的 t [ i ] t[i] t[i]值就好了。 所以定义 d p [ i ] [ j ] dp[i][j] dp[i][j]为到了第 i i i为, p r e [ i + 1 ] = j pre[i+1]=j pre[i+1]=j的方案数。 然后

CSUSTOJ 你真的会!(线段树)

思路: 对于 f ( L , R ) f(L,R) f(L,R),可以发现 L = R L=R L=R时, f ( L , R ) = a [ L ] + 1 f(L,R)=a[L]+1 f(L,R)=a[L]+1。 否则等于 f ( L , K ) ∗ f ( K , R ) , L ≤ K ≤ R f(L,K)*f(K,R),L≤K≤R f(L,K)∗f(K,R),L≤K≤R。 所以直接用

CSUSTOJ 你真的会图论吗?(三色三角形)

思路: 就是三色三角形问题,直接容斥。算出每个点白色和黑色的边有多少个,那么可以算出每个点对应的非三色三角形个数。总数减掉非三色三角形个数即可。 #include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <iostr

CSUSTOJ 你真的会数据结构吗?(质因数分解)

题意: a [ i ] a[i] a[i]最多只有30,对应10个素因子,仅考虑这些素因子即可。 考虑题目的 f ( n ) f(n) f(n),可以发现, f ( n ) = 2 c n t f(n)=2^{cnt} f(n)=2cnt, c n t cnt cnt代表 d d d的素因子个数,所以我们只需要维护每个数的素因子个数。相同素因子的数可以合并。 所以完全不需要数据结构,直接用

CSUSTOJ 题目序号配给 (拓扑排序)

题目1033 其实就是一个用优先队列求拓扑序的题,不明白的请自己去学习拓扑排序,按照队列+节点度搞。 ll r[1000009];ll c[1000009];priority_queue<ll,vector<ll>,greater<ll> >q;ll k=0;ll head[1000009];struct pe{ll v,next;} a[1000009];void add(l