首页 > 其他分享 >[COCI2022-2023#1] Neboderi

[COCI2022-2023#1] Neboderi

时间:2024-11-26 19:33:01浏览次数:5  
标签:COCI2022 链表 gcd sum ans Neboderi 端点 2023 log

算法

赛时也是想到了大部分吧, 实现上还是有问题

这里给出一种判断自己是否想出了正解的办法: 如果问题足够复杂, 解法足够简单, 那么是错的, 因为我不是天赋哥

转化题意

对于序列 \(s\) , 找出一段区间 \([L, R]\) , 使得区间长度至少为 \(k\) 的前提下, 令所有数的 \(\gcd\) 为 \(g\) , 求

\[\displaystyle g \times \sum_{i = L}^{R} s_i \to \max \]

题意其实给的很清楚了, 不太需要转化

区间长是 \(10^6\) 级别的, 不好处理

暴力的做法是, 考虑对于一个固定的 \(R\) , 我们向前走, 记录 \(\sum\) 值和 \(\gcd\) , 可以做到 \(\mathcal{O} (n ^ 2)\) 的时间复杂度, \(30 \rm{pts}\)

容易的, 发现 \(\gcd\) 的特殊 \(\rm{trick}\) , 对于固定的右端点, 左侧 \(\gcd\) 的值变化的次数最多是 \(\log V\) 级别的, 考虑利用这个结论

对于每次右端点的拓张, 假设当前右端点为 \(i\) , 我们都可以利用右端点为 \(i - 1\) 的计算信息, 不需要再去计算 \(\gcd\) 的分段

具体的, 维护链表存储之前每个分割点, 每次拓张到 \(i\) 时, 考虑更新链表中的区间 \(\gcd\) , 然后将链表中区间 \(\gcd\) 相同的部分合并, 总之, 链表中的元素最多只有 \(\log V\) 个

显然的, 时间复杂度为 \(\mathcal{O} ({n \log^2 V})\) , 其中 \(V\) 为值域

也是基本上全都想到了, 但是试图使用优秀算法

代码

维护链表即可

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n, k, a[N], nxt[N], val[N], num[N], head, cnt;
long long ans, sum[N];
signed main()
{
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]), sum[i] = sum[i - 1] + a[i];
    for (int r = 1; r <= n; r++)
    {
        for (int pre = head; pre; pre = nxt[pre])
            val[pre] = __gcd(val[pre], a[r]);
        nxt[++cnt] = head, head = cnt, val[cnt] = a[r], num[cnt] = r;
        for (int pre = head; pre; pre = nxt[pre])
        {
            while (val[pre] == val[nxt[pre]])
                num[pre] = num[nxt[pre]], nxt[pre] = nxt[nxt[pre]];
            if (r - num[pre] + 1 >= k)
                ans = max(ans, (sum[r] - sum[num[pre] - 1]) * val[pre]);
        }
    }
    printf("%lld", ans);
    return 0;
}

总结

对问题大概需要的最少复杂度要有意识, 当不好解决时, 考虑加上一个 \(\log\) 再处理

注意链表合并这中问题, 大部分时候仅仅是 \(\mathcal{O} (L)\) 的, 其中 \(L\) 为链长

标签:COCI2022,链表,gcd,sum,ans,Neboderi,端点,2023,log
From: https://www.cnblogs.com/YzaCsp/p/18570834

相关文章

  • 【网络系统管理】2023年全国职业院校技能大赛:组策略--10套题组合--4
    16、只有域管理员和IT部门员工可以登陆服务器(1)计算机配置\策略\Windows设置\安全设置\本地策略\用户权限分配17、创建ChinaSkills23为GPO管理员,加入到企业管理、域控管理员组(1)gpmc.msc\林\域\%domain%--在这个域中创建GPO18、为所有域用户设置漫游文件(1)用户和计算机\%do......
  • CF2023C C+K+S 题解
    前置知识:哈希/KMP题目链接:洛谷、Codeforces。有点牛的一道题。首先,既然两张图所有的环长都是\(k\)的倍数,那么考虑做一个比较厉害的处理:对图染色。令\(u\)的颜色为\(c_u\),如果有边\(u\rightarrowv\),那么\(c_v=(c_u+1)\modk\)。这样最多有\(k\)种颜色,范围是\(......
  • Openstack 社区版 2023.2 部署(all-in-one)
    一、版本介绍Openstack:2023.2Cephversion:PacificLinuxsystem:Rocky9.3网络:ens160(管理网)ens192(业务网)二、Rocky9.3系统安装三、系统环境配置1、修改ssh配置,允许root用户登录2、修改主机名、禁用防火墙和Selinuxhostnamectlset-hostnameco......
  • GESP2023年12月二级【小杨做题】
    想了一个半小时,还是太弱了啊啊啊啊啊!!!题目描述为了准备考试,小杨每天都要做题。第 1天,小杨做了 a道题;第 2 天,小杨做了 b 道题;从第 3天起,小杨每天做的题目数量是前两天的总和。此外,小杨还规定,当自己某一天做了大于或等于m 题时,接下来的所有日子里,他就再也不做题了。请......
  • [EULAR2023]CLASSIC研究未达终点
    #EULAR#CLASSIC研究当前的中轴型脊柱关节炎分类标准(2009)"可能"需要更新(尚有争议).SPARTAN(北美SpA研究与治疗协作网)在EULAR2023发布"CLASSIC研究"结果.该研究未达到预设终点.​​​                      ◀......
  • [题解](更新中)[test06]2024/11/23 模拟赛 / 2023牛客OI赛前集训营-提高组(第三场) A~C
    原题页面:https://ac.nowcoder.com/acm/contest/65194Statements&Solution:https://www.luogu.com.cn/problem/U507978\(80+80+50+24=234\)。A贪心+双指针。根据贪心思想,大值选大、小值选小。我们按绝对值从大到小给\(a\)排序,再按从小到大给\(b\)排序,取双指针\(l=1,r=m\)......
  • 2003-2023年 投资者情绪指数ISI以及CICSI数据
    ISI是一种量化工具,它通过一系列指标来衡量市场参与者的情绪。这些指标包括但不限于市场交易量、IPO首日收益率、新增投资者开户数等。ISI的设计旨在捕捉投资者的过度乐观或悲观情绪,从而揭示市场估值的潜在偏差。2003-2023年投资者情绪指数ISI以及CICSI数据().zip资源-CSDN文库ht......
  • CTF杂项——[LitCTF 2023]OSINT 探姬去哪了?_0
    中国电信查看属性 发现经纬度经纬度转换搜索地址  发现在浙江省嘉兴市秀洲区高德地图上搜索依次试验  发现是中国电信大厦......
  • 智源大会-2023-笔记-一-
    智源大会2023笔记(一)[2023北京智源大会]AI生命科学-P1-Mercurialzs-BV1KV4y117m5welcometothesymposiuaiforlifescience,i'msunny,i,thanktheorganersforgivingme。thehonortochthis,imposing,imposi,wehaveachangeintheprogram。unfortunatelyforper......
  • 汽车免拆诊断案例 | 2023款零跑C01纯电车后备厢盖无法电动打开和关闭
    故障现象一辆2023款零跑C01纯电车,累计行驶里程约为2万km,车主进厂反映,后备厢盖无法电动打开和关闭。故障诊断接车后试车,操作后备厢盖外侧、驾驶人侧及遥控钥匙上的后备厢盖开启按钮,可以听到后备厢盖解锁的“咔哒”声,但后备厢盖均无法电动打开。手动打开后备厢盖,点按后备......