首页 > 其他分享 >8.22普及模拟三

8.22普及模拟三

时间:2023-08-23 11:46:55浏览次数:45  
标签:普及 int Max pts 8.22 include fin 模拟 define

\(\large{T1\ 最大生成树} \ \ \tiny{30 pts}\)

  • 题意: 给定一个点权为\(a_i\) 边权为\(|a_i-a_j|\) 的完全图,求这个图的最大生成树
  • 部分分:
    • 30~50pts:Kruskal求最长路
  • 100pts:贪心,设权值最大点为\(a_{max}\),权值最小点为\(a_{min}\) 则\(max(|a_{max}-a_i|,|a_{min}-a_i|)\)一定为\(a_i\)的对答案最大贡献
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define int long long
#define frer freopen("in.in","r",stdin);
#define frew freopen("out.out","w",stdout);
using namespace std;
const int Max = 1e5+10;
int n;
int a[Max];
int e[Max];
int m;
int ans;
inline int read(){
    int num=0,fl=1;char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-') fl=-1;
            c=getchar();
    }
    while(c >='0'&&c <='9'){
        num=(num<<3)+(num<<1)+(c^48);
        c=getchar();
    }
    return num*fl;
}
inline bool cmp(int a,int b){
    return a>b;
}
signed main(){
    n=read();
    for(int i = 1;i <= n;i++){
        a[i]=read();
    }
    
    sort(a+1,a+n+1,cmp);
    for(int i = 1;i < n;i++){
        e[i]=max(abs(a[1]-a[i]),abs(a[n]-a[i]));
    }
    sort(e+1,e+n+1,cmp);
    for(int i = 1;i < n;i++){
        ans+=e[i];
    }
    printf("%lld",ans);
    return 0;
}

\(\large{T2\ 红黑树} \ \ \tiny{0 pts}\)

  • 题意:给定一棵\(n\)个点的有根树,根为节点1,初始每个点都是红色,有次操作,每次操作会把\(p_i\)变成黑色,保证操作序列\(p\)是一个排列,输出有多少个子树是红黑树。
  • 部分分:
    • 50pts:每次遍历以每个节点为根的子树(没调出来)。
    • 80pts: 暴力跳爹(没打)
  • 100pts: 差分:用\(fir\)记录每个子树第一个黑点出现的时间,用\(fin\)记录每个子树最后一个红点被覆盖的时间。并用差分维护(可以理解为在区间内此子树一直为红黑树)
    • 注意:\(fin\)数组维护差分时为 sum[fin[i]-1+1],“-1”是因为\(fin[i]\)时此子树已经不是红黑树,“+1”是因为差分。
#include <iostream>
#include <cstdio>
#define int long long
#define frer freopen("in.in","r",stdin);
#define frew freopen("out.out","w",stdout);
using namespace std;
const int Max = 1e5+10;
int n;
int ans,f;
int Head[Max],Next[Max],Ver[Max],tot;
int times[Max];
int fir[Max],fin[Max];
int sum[Max];
inline void add(int x,int y){
    Ver[++tot]=y;Next[tot]=Head[x];Head[x]=tot;
}
inline int read(){
    int num=0,fl=1;char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-') fl=-1;
            c=getchar();
    }
    while(c >='0'&&c <='9'){
        num=(num<<3)+(num<<1)+(c^48);
        c=getchar();
    }
    return num*fl;
}
inline void dfs(int x){
    fir[x]=times[x],fin[x]=times[x];
    for(int i = Head[x];i;i=Next[i]){
        int y=Ver[i];
        dfs(y);
        fir[x]=min(fir[x],fir[y]);
        fin[x]=max(fin[x],fin[y]);
    }
}
signed main(){
    frer;
    frew;
    n=read();
    for(int i = 1;i < n;i++){
        int x=read();
        add(x,i+1);
    }
    for(int i = 1;i <= n;i++){
        int x=read();
        times[x]=i;
    }
    dfs(1);
    for(int i = 1;i <= n;i++){
        sum[fir[i]]++;
        sum[fin[i]-1+1]--;
    }
    for(int i = 1;i <= n;i++){
        ans+=sum[i];
        printf("%lld ",ans);
    }
    return 0;
}

\(\large{T3\ 校门外的树} \ \ \tiny{0 pts}\)

  • 题意:校门外有\(n\)棵树,每棵树有一个初始高度\(h_i\)和生长速度\(v_i\),在接下来的\(m\)天中,第\(i\)棵树会长高\(v_i\),之后有两种事件可能会发生:
    • 操作一:将\([l,r]\)区间内的\(v_i\)增加v。
    • 操作二:求\(\sum_{i=l}^{r} h_i\)
  • 部分分:
    • 30pts:数组&&线段树乱搞

\(\large{T4\ 种树} \ \ \tiny{0 pts}\)

  • 什么事根号分治?

标签:普及,int,Max,pts,8.22,include,fin,模拟,define
From: https://www.cnblogs.com/2k3114/p/17650629.html

相关文章

  • 【题解】洛谷 P1002 [NOIP2002 普及组] 过河卒
    原题链接解题思路这是一道经典的动态规划题目。如果尝试使用深度优先搜索(dfs)或广度优先搜索(bfs)做就会获得TLE(注意数据范围)。于是我们想到了更为高级的动态规划(DynamicProgramming,dp)。简略介绍动态规划算法的核心思想:把原问题分解为相对简单的子问题的方式求解复杂问题。......
  • 2023.8.22
    今天没看多少东西,一是因为明天的竞赛,感觉竞赛前看太多新东西不太好,二是因为最近光看ctfwiki学习学得有点...额,力不从心了吧,目前在找其他的一些解决方案看了一些以前做过的pwn题,从学长的exp里吸取了一些经验明天准备竞赛......
  • 2023.8.22 练习
    ARC068E考虑计算每辆列车,有多少种商品不被买到。第\(i\)辆列车,若有$k\cdoti<l,r<(k+1)\cdoti$,则不被买到。枚举\(k\)是调和级数的。那么这就是一个二维数点,计算有多少个\(l,r\)满足$k\cdoti<l,r<(k+1)\cdoti$。拆询问,变为前缀的形式。直接离线下来树状数组即......
  • PYYZ8.22
    T1上来直接秒了组合数#include<bits/stdc++.h>#definelllonglong#definegtgetcharusingnamespacestd;inlinellread(){ llx=0,f=1;charch=gt(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();} while(isdigit(ch)){x=(x<<......
  • 8.22 后记
    T1烧饼题,char类型最大为127T2暴力题,少考半个小时导致的少拿\(100\)分T3卡常题,别开vectorT4简单题,扫一遍\(O(m^2)\)总结一下,240min\(\rightarrow\)210min,360pt\(\rightarrow\)210pt......
  • 2023.8.22 模拟赛
    ABFSB一个长\(n(n\le1e5)\)的字符串\(S\),长\(m(m\le30)\)的字符串\(T\),\(S\)的每个位置有权值\(a_i\)。\(q(q\le1e5)\)次询问\(l,r\),求\(T\)作为一个子序列出现在\(S(l,r)\)中的所有方案中,\(T\)出现的位置的权值和。先考虑\(a_i=1\)。显然有\(f_{i,j}=......
  • 8.22 [CSP-S 2021] 交通规划 题解
    #include<bits/stdc++.h>usingnamespacestd;usingpii=pair<int,int>;constexprintN=3e5+5,S=2e3+5,K=1e2+5,INF=0x3f3f3f3f;intn,m,T,poi[N];inthed[N],nxt[N<<2],rch[N<<2],val[N<<2],idx;vo......
  • 模拟Linux文件管理员系统-shell实现
    目录模拟Linux文件管理员系统-shell实现1系统要求2脚本执行效果2.1管理员登录效果2.2普通用户登录效果2.3密码文件格式3实现脚本4密码文件5说明模拟Linux文件管理员系统-shell实现注:此脚本仅供学习使用,具体需要根据实际情况进行测试调整。1系统要求2脚本执行效果2......
  • 模拟集成电路设计系列博客——1.1.7 带有输出阻抗增强的宽摆幅电流镜
    1.1.7带有输出阻抗增强的宽摆幅电流镜下图的结构在[Gatti,1990],[Coban,1994;Martin,1994]中被提出和使用,与[Säckinger,1990]的输出阻抗电流镜结构很像,除了一个二极管接法的晶体管被加在共源级增强放大器前作为电压转换器。在输出光,电平转换器是通过\(I_{bias}\)偏置的二......
  • list类的模拟实现
    一、list的介绍list文档介绍1、list是序列容器,允许在序列内的任何位置执行恒定时间的插入和删除操作,以及双向迭代。2、list底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个节点和后一个节点。3、list与forward_list非常相似:最主要的......