洛谷秋季集训测试1
这次真的是很凉了
T1玄学炸 T2爆胎翻车 T3…正解行数500+
T1
求问一个集合各子集元素和的和
集合大小n <= 1e6
分析每个元素贡献
ans = (\sum_{i=1}^{n} i) * 2^{n - 1}
T2
给定T个n,求每个n的 \sum_{i = 1}^{n} n mod i
n <= 1e7 T <= 1e6
明显离线
\sum_{i = 1}^{n} n mod i
= n^2 - \sum_{i = 1}^{n} (n / i) * i; 考虑每一个数的贡献得
= n^2 - \sum_{i=1}^{n} d_1(i)
然后就是线性筛
复习一下 约束和的计算方式是
inline void calc(){
d1[1] = sp[1] = npr[1] = 1;
for(int i = 2; i <= N; ++i){//i <= N
if(!npr[i]) prm[++ps] = i, d1[i] = sp[i] = 1ll * i + 1ll;
for(int j = 1, x; j <= ps && prm[j] * i <= N; ++j){
npr[x = i * prm[j]] = 1;
if(i % prm[j]) d1[x] = d1[i] * d1[prm[j]], sp[x] = prm[j] + 1;//sp[x] != ps[i]!!!
else {
sp[x] = sp[i] * prm[j] + 1, d1[x] = d1[i] / sp[i] * sp[x];
break;
}
}
}
}
T3
欸。。。
题目链接:yyy的迷失
想到要线段树 想到要倍增 然而把他们当成两种完全不同的想法。。
大概就是先扫描线求出每个箭头上点的必走路径
然后把这路径倍增
繁琐在于要扫四次