首页 > 其他分享 >[ARC177F] Two Airlines

[ARC177F] Two Airlines

时间:2024-08-23 21:15:23浏览次数:8  
标签:ARC177F ch 盒子 蓝色 read Two Airlines 红色 60010

My Blogs

[ARC177F] Two Airlines

有点魔怔的题。

一个基本的观察是如果当前某个人 \(A\) 拿着盒子走到了位置 \(i\),那位置小于 \(i\) 的人一定永远没用了。如果之后要用到前面的人 \(B\),就应当让 \(B\) 拿着盒子走到 \(i\) 而不是让 \(A\),这样 \(A\) 待在原来的位置,代价一定不会更劣。

再手玩一下,可以发现每次的过程都是:某个人 \(A\) 拿起盒子,走到某个地方。然后后面来了一个和 \(A\) 颜色不一样的人(或者是本身就在这个地方的人),走到了 \(A\) 现在的位置,然后带着箱子走了,此时 \(A\) 也已经没有用了。

进一步的,“后面来人”的这个过程,对于每种颜色内部,一定是先用坐标尽量小的人来。这个结论不难用调整法证明。

而最优解一定能用上述过程刻画出来。所以可以设 \(f_{i,j,k,0/1}\) 表示当前盒子在 \(i\),被 \(0/1\) 颜色的人拿着,\(i\) 后面的 \(j\) 个颜色为 \(0\) 的人已经用过了(此时在 \(<i\) 的位置),\(k\) 个颜色为 \(1\) 的人已经用过了。转移 \(\mathcal O(1)\),状态数和复杂度都是 \(\mathcal O(n^3)\) 的。

接下来的一个想法观察性质,能不能简化一维状态什么的,但是好像不太好做。除此之外比较自然地,可以感受到 \(j,k\) 都不会太大,设成 \(20\) 左右,交上去就直接过了。下面证明 \(j,k\) 都只需要取到 \(\log n\)。

直观感受一下,“后面来人”的原因一定是,\(i\) 后面有一段比较长的和当前拿着箱子的颜色不同的路。

image.png

红色和蓝色的块分别表示序列上红色和蓝色的连续位置。红色段里面不一定全部都是红色,蓝色段里也不一定全是蓝色。红色和蓝色的线条表示人走过的路程。\(a_i\) 表示这个蓝色段里面有多少个蓝色格子。

称除去搬运盒子过程中造成的代价为“额外代价”。因为第二条红色线条走到他的目标位置(第二个红块)额外花费了 \(\sum_{j\geq 2}a_j\) 的代价,所以 \(a_1>\sum_{j\geq 2}a_j\),否则可以让第一个人直接走到第二个红色段:

image.png

这样一定不劣。后面的同理,\(a_i>\sum_{j>i}a_j\),所以最多 \(\log\) 轮之后 \(a_i\) 就要超出值域了。所以 \(j,k\) 的维度都只需要开到 \(20\)。预处理一下还是能做到 \(\mathcal O(1)\) 转移。总复杂度 \(\mathcal O(n\log^2 n)\)。

int n,m,f[60010][21][21][2],nex[2][60010][21],t[60010][2],a[60010][2];
char s[60010];
vi ve[2];
inline void mian()
{
    read(n,m),read(s);int x,ans=INF;char ch;
    while(m--)read(x),read(ch),t[x][ch=='A']++,ve[ch=='A'].eb(x);
    for(int i=1;i<=n;++i)a[i][0]=a[i-1][0],a[i][1]=a[i-1][1],++a[i][s[i]=='A'];
    sort(ve[0].begin(),ve[0].end()),sort(ve[1].begin(),ve[1].end());
    for(int k=0;k<2;++k)for(int i=0;i<=n;++i)
    {
        int p=lower_bound(ve[k].begin(),ve[k].end(),i)-ve[k].begin();
        for(int j=1;j<=20;++j)
        if(p+j-1<(int)ve[k].size())nex[k][i][j]=ve[k][p+j-1];
        else nex[k][i][j]=-1;
    }
    memset(f,127,sizeof(f));
    if(nex[0][0][1]!=-1)f[0][1][0][0]=a[nex[0][0][1]][1];
    if(nex[1][0][1]!=-1)f[0][0][1][1]=a[nex[1][0][1]][0];
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<=20;++j)for(int k=0;k<=20;++k)
        {
            if(j<20&&nex[0][i][j+1]!=-1)Mmin(f[i][j+1][k][0],f[i][j][k][1]+a[nex[0][i][j+1]][1]-a[i][1]);
            if(k<20&&nex[1][i][k+1]!=-1)Mmin(f[i][j][k+1][1],f[i][j][k][0]+a[nex[1][i][k+1]][0]-a[i][0]);
        }
        for(int j=0;j<=20;++j)for(int k=0;k<=20;++k)for(int l=0;l<2;++l)
        Mmin(f[i+1][max(0ll,j-t[i][0])][max(0ll,k-t[i][1])][l],f[i][j][k][l]+(l!=(s[i+1]=='A')));
    }
    for(int i=0;i<=20;++i)for(int j=0;j<=20;++j)for(int k=0;k<2;++k)Mmin(ans,f[n][i][j][k]);
    write(ans);
}

标签:ARC177F,ch,盒子,蓝色,read,Two,Airlines,红色,60010
From: https://www.cnblogs.com/WrongAnswer90/p/18377096

相关文章

  • api调用工具推荐__hoppscotch(postwomen)
    下载地址https://hoppscotch.com/downloadhoppscotch是一款开源api调用工具,该api调用工具之前叫postwomen,大概率是为了蹭postman热度,后来确实在开发者群体中被广泛使用,已经不再需要这种热度了,因此改名hoppscotch官方给出改名的理由如下Similarityinnamewith"Postman"ma......
  • Win11系统提示找不到NetworkStatus.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个NetworkStatus.dll文件(挑选合适的版本文件)......
  • COMP 627 COMP 627 Neural Networks and Applications
    1COMP627–Assignment1Note:RefertoEq.2.11inthetextbookforweightupdate.Bothweights,w1andb,needtobeadjusted.AccordingtoEq.2.11,forinputx1,errorE=t-yandlearningrateβ:w1_new=w1_old+βEx1;bnew=bold+βECOMP627Neural......
  • 修改$ORACLE_HOME/network/admin/sqlnet.ora
    原因分析:网上查了主要是说我电脑上orcale的客户端版本和访问的oracle服务端的版本不一致,但我连接的是本地数据库,应该不存在该问题。保险起见,我先在网上找了相关问题的讨论,大家提出的常用解决方案是修改$ORACLE_HOME/network/admin/sqlnet.ora文件里的参数配置,对于该方法跟我的问......
  • 题解:CF362A Two Semiknights Meet
    题意有两个走法为中国象棋象的棋子,棋盘上有一些坏格子,问它们是否可以在好格子相遇。思路则判断两个棋子是否相遇有两个条件是否可以在一个格子相遇。那个格子是否是好格子。先考虑条件\(1\)设第一个棋子的坐标为\(a_x\)和\(a_y\),第二个棋子的坐标为\(b_x\)和\(b_y......
  • 神经网络之卷积篇:详解单层卷积网络(One layer of a convolutional network)
    详解单层卷积网络如何构建卷积神经网络的卷积层,下面来看个例子。已经写了如何通过两个过滤器卷积处理一个三维图像,并输出两个不同的4×4矩阵。假设使用第一个过滤器进行卷积,得到第一个4×4矩阵。使用第二个过滤器进行卷积得到另外一个4×4矩阵。最终各自形成一个卷积神经网络......
  • TCPIP路由技术第一卷第八章OSPF 第三部分-1 NETWORK Type-1
    接口网络类型point-to-point(hdlc,ppp,framerelay点到点子接口)multiaccess多路访问网络,多路访问网络分以下两种broadcast广播的多路访问网络(ethernet,tokenring,andfddi)nonbroadcastmultiaccess(nbma)非广播多路访问网络(framerelay物理接口和多点子接口,andx.25,at......
  • TCPIP路由技术第一卷第八章OSPF 第三部分-1 NETWORK Type-3 FR-Star
    tcp/ip_ospfoverframe-relay2第二部分:部分互联1.三台设备接口同一网段部分全互联,网络类型broadcast,确保hub为dr,在星型拓扑下会出现二层封装问题,encapsulationfailed解决方案,增加pvc映射2.三台设备接口同一网段部分互联:网络类型nbma,确保hub作为dr,在dr上单播指定邻......
  • 谷歌chrome浏览器network中Stalled分析和优化
    https://www.cnblogs.com/yurui321/p/14890108.htmlhttps://blog.csdn.net/zeroJustGG/article/details/90639844?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Ctr-2-90639844-blog-79726408.235^v43^pc_blog_bottom......
  • 2024年第四届网络通信与信息安全国际学术会议(ICNCIS 2024) 2024 4th International Con
    文章目录一、会议详情二、投稿信息三、大会简介四、主讲嘉宾五、征稿主题六、咨询一、会议详情二、投稿信息大会官网:https://ais.cn/u/vEbMBz会议时间:2024年8月23-25日大会地点:中国--杭州终轮截稿:2024年8月19日接受/拒稿通知:投稿后1周内收录检索:EICom......