ATcoder比赛记录
ABC_356 2024.6.1
儿童节快乐!!
A,B,C 较简单
D - Masked Popcount
首先我们考虑固定 \(m\) 中的第 \(j\) 位(且为 \(1\))
则问题变为了找 \(1 \backsim n\) 中的数有几个数 第 \(j\) 位为 \(1\)。
有一万种方法可以做到 \(O(logn)\) 或 \(O(1)\)。
ll find(ll x){
ll sum = ((n>>x+1ll)<<x);
if(n & (1ll<<x))sum = (sum + (n & ((1ll<<x)-1ll)) + 1ll);
return sum;
}
int main(){
n = read(),m = read();
F(i,0,60)
if(m & (1ll<<i))ans = (ans + find(i)) % mod;
printf("%lld\n",ans);
return 0;
}
F - Distance Component Size Query
ABC_357 2024.6.8
赛事情况: ABCDE,F线段树差点时间(赛后30min写出),rk1659,很差,写的很慢。
update rating: \(\color{green}{807}\)
A,B,C 较简单 C浪费我好长时间:(
D - 88888888
令 \(s\) 表示 \(n\) 的位数。
则答案及为 \(n + n10^s + n10^{2s} + ... + n10^{(n-1)s}\)。
等比数列求和一下即为: \(\huge\frac{n(10^{ns}-1)}{10^s-1}\)
不要漏任何一个 mod,指数 上需要 取模 \((mod-1)\) (欧拉扩展定理)
ll n;
ll ksm(ll x,ll y){
ll ans = 1;
while(y){
if(y & 1)ans = (ull)ans * x % mod;
x = (ull)x * x % mod,y >>= 1;
}return ans % mod;
}
int main(){
n = read();
ll m = n;
ll sum = 0;
while(m)m /= 10,sum++;
n = n % mod * ((ksm((ll)10,n%(mod-1ll)*sum%(mod-1ll))-1ll) % mod) % mod * ksm(ksm(10,sum)-1,mod-2) % mod;
//比较乱,但的确是上面的式子
printf("%lld\n",n);
return cerr<<clock()<<"ms"<<endl,0;
}
E - Reachability in Functional Graph
1A,一眼瞪得。
我们 \(tarjan\) 缩点后在 \(DAG\) 上跑 拓扑序/DP 即可,是简单的。
赛后看到好像不需要 \(tarjan\) ?。
F - Two Sequence Queries /
听说都 分块 水过的?我还是老老实实打线段树。
首先我们观察一个值的变化:
\((a_i + x)(b_i + y) = a_ib_i + a_xy + b_ix + xy\)
然后再看区间的变化:
变化的是右边三项,考虑如何维护。
可以发现我们需要维护 \(a\) 的 区间和 以及 \(b\) 的,还需要 两个 懒惰标记 \(x\) 与 \(y\) 分别记录 \(a\) 与 \(b\) 上的 加法标记。
而维护 \(a\) 与 \(b\) 的区间和是容易的,这样就做完了。
mod!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (少打一个mod WA了17个)
G - Stair-like Grid
什么你说 \(G\) ?不会,听说与 \(FFT\) 相关,不会:(
ABC_358 2024.6.15
赛事情况:ABCD(17min),卡E崩了,直接摆烂不写了:(,rk2153
update rating:\(\color{green}{893}\)
A,B,C,D,G较简单。
E - Alphabet Tiles
卡爆我,一直在想如何求多重集的非全排列方案数 : (
计数是真的弱
我们设 \(f_{i,j}\) 为前 \(i\) 个字母构成长度为 \(j\) 的方案数,然后我们就可以 \(dp\) 求出了。
转移:\(f_{i,j} = \sum_{i=0}^{a_i} f_{i-1,j-k} * C^k_j\)。
警示:不会式子不要硬推,想想dp
F - Easiest Maze
看起来就细节巨多。
不爱写
G - AtCoder Tour
傻逼题。
容易发现若 \(k\) 很大最后一定在某个点不动,暴力 \(dp\) \(k\) 小的时候即可。
不过没打,回避这种弱智题。(亲测暴力 \(dp\) 2500 次即可 AC)