牛客周赛143
C题
给定v=xy,让求v的所有因数a的a次方之和
将x和y分别分解因数,根号级别复杂度
v的所有因数,本质上就是x和y的所有因数分别相乘,再进行去重
注意,在这里得到的因数不能直接取模,不然去重后会比正确答案的元素少,可能存在去重之前不想等的因数,去重后相等了,而且因数不会超过long long
唯一卡的点就是,本题数据范围很大,在进行快速幂前,底数必须取模,不然运算中aa%mod这里直接爆了,指数取模会快一半,从60左右到30,但是指数不是直接取模,考虑绝大多数题不会卡这里,在此不细究
代码链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=83554327
D题
一道典型的扫描线问题,之前也见过几次,没认真补题,这回真会了
扫描线+差分
对于1到n所有范围的数,不可能从头到尾进行遍历,所以只需要考虑2n个端点
对于一段区间[l,r],可以将l赋值为1,r+1赋值为-1,那么此时区间内覆盖点数都为1,代表这个区间都被一条线段覆盖
正常的扫描线是求被最多区间覆盖的点的覆盖次数,此题给的是区间,也可以转换为点
题目中给的是想看[L,L+k]最多覆盖多少个元素,如果[L,L+k]覆盖区间[l,r],
满足:L+k>=l并且L<=r
那么L>=l-k并且L<=r
for(i=0;i<n2;)
{
int res=p[i].first;
while(i<2n&&p[i].first==res)
{
cnt+=p[i].second;
i++;
}
ans=max(ans,cnt);
}
注意p中元素是2n个,外层for中i不要++,while处理同一个端点在所有区间上的
代码链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=83553844
E题
浙公网安备 33010602011771号