首页 > 其他分享 >暑假集训 加赛1

暑假集训 加赛1

时间:2024-07-22 11:09:06浏览次数:13  
标签:pos times 最小值 暑假 集合 加赛 200010 集训

暑假集训 加赛1

P145 修仙(restart)

  • 题目中的 可以恰好

  • 考虑计算双休带来的差值。

  • 令 \(b_{i}=a_{i}+a_{i+1}-\max(a_{i}+a_{i+1},0)\) ,则需要计算从 \([1,n)\) 中选出 \(k\) 个不相邻的 \(b_{i}\) 的最大价值,同 luogu P1484 种树 | luogu P1792 [国家集训队] 种树 | luogu P3620 [APIO/CTSC2007] 数据备份 | CF958E2 Guard Duty (medium) | SP1553 BACKUP - Backup Files

  • 然后就是反悔贪心板子了。

    • 基本思想是无论当前的选项是否最优都接受,然后进行比较,如果选择之后不是最优了,则反悔,舍弃掉这个选项,常写作两种决策之间作差的形式;否则,正式接受。如此往复。
    • 容易有在求解最大值/最小值的最优解中,最大值/最小值左右两端的数要么都选要么都不选。
    • \(k\) 的状态能由 \(k-1\) 的状态继承而来,启发我们可以依次处理子问题。
    • 算法流程:先选出 \(\{ b \}\) 中的最小值 \(b_{pos}\) 加入答案集合,然后删除 \(b_{pos-1},b_{pos+1}\) ,用 \(b_{pos-1}+b_{pos+1}-b_{pos}\) 替代原来的 \(b_{pos}\) 。
      • 若选了 \(b_{pos-1}+b_{pos+1}-b_{pos}\) 等价于将原来答案集合里的 \(b_{pos}\) 替代成 \(b_{pos-1}+b_{pos+1}\) 。
      • 否则选择 \(b_{pos}\) 。
    • 双向链表维护动态插入和删除;优先队列维护每次选出最小值,需要懒惰删除法。
    • 边界 \(0\) 和 \(n+1\) 一般需要特殊处理。
    点击查看代码
    priority_queue<pair<ll,ll> >q;
    ll a[200010],b[200010],cha[200010],l[200010],r[200010],vis[200010];
    int main()
    {
        ll n,x,k,ans=0,pos,i;
        cin>>n>>x;
        k=n/2;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
            ans+=a[i];
        }
        for(i=1;i<=n-1;i++)
        {
            b[i]=a[i]+a[i+1]-max(a[i]+a[i+1]-x,0ll);
            l[i]=i-1;
            r[i]=i+1;
            q.push(make_pair(b[i],i));
        }   
        b[0]=b[n]=-0x3f3f3f3f3f3f3f3f;//因为要保证是恰好,边界需要特殊处理
        for(i=1;i<=k;i++)
        {
            while(q.empty()==0&&vis[q.top().second]==1)
            {
                q.pop();
            }
            if(q.empty()==0)
            {
                ans-=q.top().first;
                pos=q.top().second;
                q.pop();
                vis[l[pos]]=vis[r[pos]]=1;
                b[pos]=b[l[pos]]+b[r[pos]]-b[pos];
                q.push(make_pair(b[pos],pos));
                l[pos]=l[l[pos]];
                r[pos]=r[r[pos]];
                l[r[pos]]=r[l[pos]]=pos;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    

T3682. 七负我

  • 没学最大团,直接贺官方题解了,改了下 \(\LaTeX\) 。

    考虑两个没有边的点 \((u,v)\) ,设与 \(u\) 相连的点 \(t_{i}\) 的和为 \(a\) ,设与 \(v\) 相连的点 \(t_{i}\) 的和为 \(b\) ,那么这两个点原先的贡献为 \(t_u\times a + t_v\times b\) ,容易发现清空贡献较小的点可以使贡献变为 \((t_{u} + t_{v})\times \max(a,b)\) 。

    不断进行这样的操作,最终只剩下一个团。

    设团的大小为 \(n\) ,则边数为 \(\frac{n \times (n - 1)}{2}\) ,显然总贡献为 \((\frac{T}{n})^2 \times \frac{n \times (n - 1)}{2}\) ,简单化简发现 \(n\) 越大越好。
    因此只需要搜索最大团,比较常见的方法是 BK ,大家可以自行学习。

    还有一种折半搜索的方法,我们将所有点分为两个集合 \(A,B\) ,对于 \(A\) 中的所有点,维护 \(f_{S}\) 表示集合 \(S\) 中所有点组成子图中最大团大小。

    之后枚举 \(B\) 中的最大团 \(T\) ,找到最大团中所有节点向 \(S\) 集合连边的交集,显然 \(\operatorname{popcount}(T)+f_S\) 可以更新答案。

标签:pos,times,最小值,暑假,集合,加赛,200010,集训
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18315649

相关文章

  • 暑假集训CSP提高模拟4
    据说我的\(T2\)乱搞硬控学长一上午?A.WhiteandBlack对于挨着的颜色相反的节点,肯定要每个点都转一次,手摸一下会发现,只要节点与父亲节点颜色不同就会产生一次贡献,但每次\(dfs\)直接扫\(O(n)\)会\(T\),所以我们需要去记录一下每个节点的儿子数,会发现对于节点和非父亲的......
  • 2024暑假集训测试8
    前言比赛链接。爆零了?!?T4莫名CE了,T2因为某些人打乱搞做法使出题人改数据和时限,\(O(npk)\)做法死掉了,主要还是数组开大了还忘了算,直接爆零了。T1WhiteandBlack显然不存在无解,从根开始扫,遇到黑色就翻转,前后顺序不影响结果,该方案为正确且唯一方案。继续观察发现若一个......
  • 2024暑假集训测试7
    前言比赛链接。终于不挂分了这次,但是T2写得太慢了导致T4没写完只能胡暴力。但是赛时数据和样例出了好多问题给不少人造成了影响。T1abc猜想\(ans=\lfloor\dfrac{a^b}{c}\rfloor\bmodc=\dfrac{a^b-a^b\bmodc}{c}\bmodc\)不妨设\(\dfrac{a^b-a^b\bmodc}{c}=kc+a......
  • 2024暑假总结1
    总结记得26号来见到了一些新同学,还考了一场试,题目都很基础,但是我清楚地记得我把图论大部分内容都忘了,第二题计数题也没调出来。这次经历让我深深感受到半年不碰OI再次上手时原来如此乏力,脑海中搜索出的知识结构图也只有空荡荡的框架而无多少内容。看到一个知识只是粗略知道它的原......
  • 暑假第二周周报
    这一周在主攻搜索,题单里的搜索题感觉写的还是比较顺利的,还剩一题八数码要用到一些进阶的搜索算法。以下是感觉比较有收获的题目:一、数独挑战:用到了位运算,用位运算进行标记以及判定,可以有效节约空间和时间。二、[NOIP2014]寻找道路题目要求在有向图上找一条最短路,满足路径上......
  • 『模拟赛』暑假集训CSP提高模拟4
    Rank一次比一次烂了,鉴定为不写模拟赛记录导致的。A.WhiteandBlack原题ARC148C被自己误导了,导致菊花和链的部分分没拿到。经验++对于每个点的父节点若有$1\lef_i\lti$,则该图构成的菊花图根可能为\(1\)或\(2\),链则不确定首尾。Subtask越来越不好判了www思......
  • 暑假集训csp提高模拟2
    赛时rank11,T130,T20,T320,T420T1活动投票摩尔投票模板题点此查看代码#include<bits/stdc++.h>#include<bits/extc++.h>//usingnamespace__gnu_pbds;//usingnamespace__gnu_cxx;usingnamespacestd;#defineinfile(x)freopen(x,"r",stdin)#define......
  • 暑假集训CSP提高模拟4
    暑假集训CSP提高模拟4\(T1\)P134.WhiteandBlack\(0pts\)原题:[ARC148C]LightsOutonTree翻转方式:从根节点进行\(DFS\),若遇到黑点就进行翻转。最后一定能使全树均为白点,即不存在无解的情况。进而有每个点仅会被主动翻转一次,且翻转顺序与最终结果无关。观察到......
  • 暑假训练第二周周报
    总体学习情况这周时间大多花在写上周的堆栈的题单了,然后比赛又碰到了一些新的知识点,比如无权二分图的最大匹配,01背包的相似例题,但是感觉数据结构的基础还是得练,遇到一些题还是没办法写对。知识点模块1.无权二分图最大匹配用通俗的话来讲,假如有几个男的和几个女的存在暧昧关系,......
  • 暑假集训CSP提高模拟4
    A.WhiteandBlack暴力的\(O(nq)\)做法比较显然,因为对于根节点来说,只有它自己可以改变自己的颜色,因此如果它是黑色则一定需要更改自己,同时把更改传下去(应该没有那种每次真的更改所有节点然后写\(O(nqn^{n})\)的吧),同理,假如根节点更改结束,次级节点就同理了,这是一个连锁的反应,因......