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;
}

E - Max/Min

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\)
然后再看区间的变化:

\[\sum_{i=l}^{r} (a_i + x)(b_i + y) = \sum_{i=l}^{r} a_ib_i + y\sum_{i=l}^{r}a_i + x\sum_{i=l}^{r}b_i + (r-l+1)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)

代码

posted @ 2024-06-08 23:06  oXUo  阅读(29)  评论(0编辑  收藏  举报
网站统计