首页 > 其他分享 >1.21闲话暨模拟赛题解

1.21闲话暨模拟赛题解

时间:2024-01-21 19:44:48浏览次数:28  
标签:log 题解 复杂度 即可 闲话 做法 1.21 模拟

未卜先知

image

推歌: 二重变革/洛天依,言和 by DELA

上午写了模拟赛,下午不给我发代码不让我改题不让我看题面,smjb

模拟赛一共9道题,4道原题(2道原题,2道"原"题),抛去3道不写的一共6道题

  • T1「尘世闲游」(原神题)

    没让写

  • T2「一心净土」(原神题&&原题「CF740C」)

    • 题解

      我这里一共找到两种解法

      • 第一种(考场解法)

        首先对所有雷电将军的询问去进行离线然后按照区间长度去排序

        排序之后直接对判断查看那些数已经被填,按照++tot的顺序填没填过的数

        (不确定能不能100pts,但是造的几组hack都过了)

      • 第二种

        直接找到最小的区间,mex就是最小的区间长度+1,然后直接循环往复的填\([\) \(0 \sim\) 区间长度 \(]\) 就行

        #include<bits/stdc++.h>
        #define int long long
        inline int read(){
            int f=1,s=0;char ch=getchar();
            while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar();}
            while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
            return f*s;
        }
        using namespace std;
        const int INF=0x66CCFF;
        signed main(){
            int n,m,l,r,mex=INF;
            cin>>n>>m;
            while(m--){
                cin>>l>>r;
                mex=min(mex,r-l+1);
            }
            for(int i=1;i<=n;++i)
                cout<<i%mex<<" ";
        }
        
  • T3 「小L玩红警」

    • 题解

      考场上貌似很多人都读错了题目?

      • 40pts

        应该读错题的都是这个分数了

        作为微操大师,小L当然可以一只手指控制多辆坦克啦,怎么可能只能控制一个

        类比:双指解四押

      • 50pts

        观察题面发现对于 \(50\%\) 的数据 \(n \le 10\) ,直接大力搜索即可

      • 100pts

        先咕咕咕了

  • T4 「最大生成树」

    • 题解

      • 70pts

        直接对其建图,跑最大生成树,然后因为\(O(n^2)\)的建图导致死了

      • 100pts

        完全图所以直接去找到最大和最小的节点分别做根,然后连上所有节点之后把边权相加求出这两个里较大的即可

  • T5 「括号战争」

    • 题解

      根据\(\textbf {K8He}\)之言,本题为区间DP,但是疑似不用

      进行一个模拟,若读入的是 \((\) 则直接在数组里存入 \(1\) , \([\) 则存入 \(2\)

      在存入 \()\) 时去找到存入的 \(1\) ,如果没有就存入 \(3\)

      存入 \(]\) 时类比上面即可

      最后扫一遍数组输出剩余的个数即可,时间复杂度\(O(|S|^2)\)可以通过此题

  • T6 「校门外的树」

    • 题解

      • 30pts做法

        • 做法1

          唐氏做法,肯定要用线段树维护,按照正常的思路维护区间加和区间求和,然后发现很难用lazy标记维护grow,那么直接一直grow(1,i,i)

          复杂度\(O(m \log n + mn \log n)\),不如暴力

        • 做法2

          直接对其进行数组模拟即可

      • 50pts做法

        离线所有询问看有没有修改操作,特判没有的情况,如果没有就grow(1,1,n)然后带lazy,有就grow(1,i,i)即可

        复杂度对于\(80\%\)的数据\(O(m \log n + mn \log n)\),对于\(20\%\)的数据\(O(m \log n)\)

      • 100pts做法

        • 做法1?

          线段树这么难维护,那么为啥不分块呢?

          考虑一个简单的做法,首先对数列进行分块

          然后每次操作前都对其进行一个grow操作,此处只在块上修改,附带一个总体的time++

          接下来的操作都比较板,只要在增加的时候让块内的所有都\(time\)降为\(0\)同时乘上\(time*v_i\)即可

          在查询时直接查块,若查小块就直接让time降到0然后乘上\(time*v_i\)即可

          复杂度 \(O(m \sqrt n)\) 疑似可以通过此题,但是考场上没写完不知道

        • 做法2

          观察分块的思路发现可以直接搬到线段树上,复杂度\(O(m \log n)\)可以通过此题

  • T7 「异或(xor)」

    • 50pts 做法

      按照题意模拟即可

    • 60pts 做法

      按照题意模拟+特判即可

    • 100pts 做法

      我想到两个做法,但是没写完

      • 二维树状数组

        不会写

      • 线段树套线段树

        树套树太难写了,刚写了个动态开点就死了没写完

        看出来树套树之后就是比较板的题了应该

  • T8 「」

    没让写,题目居然是东方,还出现了帕秋莉和十六夜咲夜

  • T9 「」

    没让写

image

标签:log,题解,复杂度,即可,闲话,做法,1.21,模拟
From: https://www.cnblogs.com/Vsinger-LuoTianYi/p/17978180

相关文章

  • CF1375B Neighbor Grid 题解
    题意简述给你一个$n$行$m$列的矩阵,要求你让这个矩阵是“完美”的。“完美”的定义如下:若当前的格子里是一个正整数$k$,那么与这个网格相邻(有公共边)的$k$个格子也必须有一个正整数。若当前的格子里是$0$,那么不受上述的限制。你可以对任意的一个格子加上$1$,次数......
  • P5362 [SDOI2019] 连续子序列 题解--zhengjun
    题面传送门提供一种和其他题解完全不同的解法。记\(P_0\)为题中给出的序列,\(P_1\)为\(P_0\)取反的结果。记\(S_{l\simr}\)表示\(S_lS_{l+1}\dotsS_{r}\)。方便起见,\(P\)下标从\(0\)开始,其余的串都是从\(1\)开始。这里用\(P_{0,i}=\operatorname{popcount(i)}......
  • Github图床搭建,结合Picgo与jsdelivr的免费cdn加速,以及部分问题解决方案
    留份文档,便于后续查询===================用到的地址:Github:GitHubPicgo:PicGoisHere|PicGojsdelivr加速地址:https://cdn.jsdelivr.net/gh/Github用户名/仓库名@master===================1.创建一个GitHub仓库:进入你的GitHub首页,在右上角你会找到一个➕,在下拉菜单中......
  • P7192 [COCI2007-2008#6] GEORGE 题解
    题目简述给定一张$n$个点$m$条边的无向图,从$u_i\rightarrowv_i$需要用时$w_i$分钟。有一位T先生从$0$时刻按有$g$个点的序列顺序移动,即$v_1\rightarrowv_2\rightarrow\cdots\rightarrowv_g$。还有一位卡车司机Luka从$k$时刻开始从$a$点出发,Luka不......
  • 1.21寒假每日总结12
    思路&&Code12345678910111213141516171819202122232425262728293031323334353637/*高桥和青木N场比赛x      y得分情况分别为x1y1              ...                ..  ......
  • 学习笔记-24.1.21
    因此,当您在null引用上访问字段mingcheng时,它们不会被解析。相反,您应该首先创建一个对象并将其放入数组中。因此修改代码如下Pd[]pdd=newPd[20];for(inti=0;i<20;i++){Pdpd=newPd();pdd[i]=pd;} ......
  • 洛谷 P9843 [ICPC2021 Nanjing R] Paimon Sorting 题解
    Descirption给出一个排序算法(用伪代码表示):SORT(A)forifrom1tonforjfrom1tonifa[i]<a[j]Swapa[i]anda[j]算出对于一个序列\(A=a_1,a_2,\cdots,a_n\)的所有前缀\(A_k=a_1,a_2,\cdots,a_k\)(\(1\lek\len\)),\(\operatorname{SORT}(A_......
  • AT_abc337_d 的题解
    AT_abc337_d的题解题目大意给你一个\(H\timesW(H\timesW\leq2\times10^5)\)的矩阵,矩阵由o、x和.构成。存在一种操作:将一个.变成o。问在一段连续的区间内,需要进行多少次操作才可以将同一行或同一列中的连续\(k\)个数都变为o,若无法完成,输出-1。思考过程看......
  • AT_abc337_c的题解
    AT_abc337_c的题解题目大意就是给你一个数组$a=(a_1,a_2,\ldots,a_n)$,若$a_i$为$-1$,那么这个数的下标就是输出序列的开头,否侧,这个数在输出序列中排在$a_i$的下一个。思考过程从样例中不难发现:$1,2,\ldots,n$中的每一个数最多在$a$中出现一次;输出序列中的每一个......
  • P10073 [GDKOI2024 普及组] 刷野 II 的题解
    P10073[GDKOI2024普及组]刷野II的题解谨以此篇题解记录我考场上唯一通过的一题~解题思路可以考虑定义两个指针x和y,分别为左侧攻击到哪里和右侧。此时,从两侧线性想中间递推,若先打左边的代价小就打左边的,否则就打右边的。按照这个方法向中间推就可以了。Code#include<......