首页 > 其他分享 >2024暑假集训测试22

2024暑假集训测试22

时间:2024-08-11 21:05:37浏览次数:8  
标签:write 22 int void Tp 2024 read inline 集训

前言

今天题好难啊,大多数人 T2、T4 改不动都不改了,下午 miaomiao 进来和我们说模拟赛改不动的题可以不改。

部分分给的也很少。

T1 Mortis

\(O(n)\) 桶排序,知道每个数最后应该去哪,那么对于需要交换的只有三种情况:

  1. 二者错排,交换一次。
  2. 三者错排,交换两次。
  3. 四者错排,交换三次。

当然这几种情况优先处理第一种,其次第二种,最后第三种,由此处理即可,最后总的复杂度是线性的。

点击查看代码
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=2e5+10;
template<typename Tp> inline void read(Tp&x)
{
	x=0;register bool z=true;
	register char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
	for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x=(z?x:~x+1);
}
template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar(' ');write(y...);}
int n,a[N],sum[5],b[N],cnt[5][5],ans,tot;
signed main()
{
	read(n);
	for(int i=1;i<=n;i++) 
	{
		read(a[i]);
		sum[a[i]]++;
	}
	for(int i=1,pre=0;i<=4;i++)
	{
		for(int j=1;j<=sum[i];j++)
			b[pre+j]=i;
		pre+=sum[i];
	}
	for(int i=1;i<=n;i++)
		if(a[i]!=b[i])
		{
			tot++;
			cnt[a[i]][b[i]]++;
		}
	for(int i=1;i<=4;i++)
		for(int j=1;j<=4;j++)
			if(i!=j)
			{
				int s=min(cnt[i][j],cnt[j][i]);
				ans+=s,tot-=s<<1;
				cnt[i][j]-=s,cnt[j][i]-=s;
			}
	for(int i=1;i<=4;i++)
		for(int j=1;j<=4;j++)
			if(i!=j) for(int k=1;k<=4;k++)
				if(i!=k&&j!=k)
				{
					int s=min({cnt[i][j],cnt[j][k],cnt[k][i]});
					ans+=s<<1,tot-=(s<<1)+s;
					cnt[i][j]-=s,cnt[j][k]-=s,cnt[k][i]-=s;
				}
	write(ans+tot/4*3);
}

T2 生活在hzoi上

不会。

T3 嘉然今天吃什么

  • 原题:P8511 [Ynoi Easy Round 2021] TEST_68

  • 部分分 \(10pts\):每个区间都跑一次 \(01trie\),复杂度 \(O(n^2\log v)\)。

  • 正解:

    求出 \(dfs\) 序,可以转化为序列问题,点 \(x\) 对应区间 \([1,in_x),(out_x,n)\)

    发现对于大多数的区间都是全局最大值,可以处理出达成这个答案的是哪两个点,这是 \(01trie\) 板子。

    然后对于整棵树上,只有 \(1\to lca,lca\to u,lca\to v\) 这几段路径是不能使用全局最大值的,又发现这是一条链,链是好处理的,因为 \(fa_x\) 对应区间一定包含在 \(x\) 对应区间内,用两个指针维护就行了。

    点击查看代码
    #include<bits/stdc++.h>
    #define ll long long 
    #define endl '\n'
    #define sort stable_sort
    using namespace std;
    const int N=5e5+10,M=3e7+10;
    template<typename Tp> inline void read(Tp&x)
    {
        x=0;register bool z=true;
        register char c=getchar();
        for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
        for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
        x=(z?x:~x+1);
    }
    template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
    template<typename Tp> inline void wt(Tp x)
    {if(x>9)wt(x/10);putchar((x%10)+'0');}
    template<typename Tp> inline void write(Tp x)
    {if(x<0)putchar('-'),x=~x+1;wt(x);}
    template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar(' ');write(y...);}
    int n,tot,u,v,lca,top1,top2,fa[N],in[N],out[N],dep[N];
    ll mx_a,maxx,mx,a[N],b[N],ans[N];
    bool vis[N];
    vector<int>e[N];
    struct trie
    {
        int tot,t[M][2],pos[M];
        void insert(int id)
        {
            ll x=a[id]; int p=0;
            for(int i=__lg(mx_a),c;i>=0;i--)
            {
                c=(x>>i)&1;
                if(!t[p][c]) t[p][c]=++tot;
                p=t[p][c];
            }
            pos[p]=id;
        }
        int ask(ll x)
        {
            int p=0;
            for(int i=__lg(mx_a),c;i>=0;i--)
            {
                c=(x>>i)&1;
                if(t[p][!c]) p=t[p][!c];
                else p=t[p][c];
            }
            return pos[p];
        }
        void clear() 
        {
            for(int i=0;i<=tot;i++) 
                t[i][0]=t[i][1]=pos[i]=0;
            tot=0;
        }
    }T;
    void dfs(int x,int dis)
    {
        in[x]=++tot,dep[x]=dis;
        for(int y:e[x]) dfs(y,dis+1);
        out[x]=tot;
    }
    int lca_(int x,int y)
    {
        if(dep[x]<dep[y]) swap(x,y);
        for(;dep[x]!=dep[y];x=fa[x]) vis[x]=1;
        for(;x!=y;x=fa[x],y=fa[y]) vis[x]=vis[y]=1;
        return x;
    }
    void dfs(int x,int goal,int l,int r)
    {
        if(!x) return ;
        for(int s;l<=in[x]-1;l++) 
        {
            T.insert(l);
            s=T.ask(a[l]);
            mx=max(mx,a[l]^a[s]);
        }
        for(int s;r>=out[x]+1;r--) 
        {
            T.insert(r);
            s=T.ask(a[r]);
            mx=max(mx,a[r]^a[s]);
        }
        ans[x]=mx;
        if(x==goal) return ; 
        for(int y:e[x]) if(vis[y]) 
        {
            dfs(y,goal,l,r);
            break;
        }
    }
    signed main()
    {
        read(n);
        for(int i=2;i<=n;i++) 
        {
            read(fa[i]);
            e[fa[i]].push_back(i);
        }
        for(int i=1;i<=n;i++) 
        {
            read(a[i]);
            mx_a=max(mx_a,a[i]);
        }
        for(int i=1,j;i<=n;i++) 
        {
            T.insert(i);
            j=T.ask(a[i]);
            if((a[i]^a[j])>maxx)
            {
                maxx=a[i]^a[j];
                u=i,v=j;
            }
        }
        dfs(1,1);
        memcpy(b,a,sizeof(a));
        for(int i=1;i<=n;i++) a[in[i]]=b[i];
        lca=lca_(u,v); 
        for(int i=lca;i;i=fa[i]) vis[i]=1;
        for(int i=u;i!=lca;i=fa[i]) top1=i;
        for(int i=v;i!=lca;i=fa[i]) top2=i;
        T.clear(); mx=0; dfs(1,lca,1,n);
        T.clear(); mx=0; dfs(top1,u,1,n);
        T.clear(); mx=0; dfs(top2,v,1,n);
        for(int i=1;i<=n;i++) write(vis[i]?ans[i]:maxx),puts("");
    }
    

T4 APJifengc

不会。

总结

不知道说点什么,只是好想秦皇岛啊。

附录

题目背景比较魔怔,看题目名称也能看出来。

标签:write,22,int,void,Tp,2024,read,inline,集训
From: https://www.cnblogs.com/Charlieljk/p/18353897

相关文章

  • 2024.8.11 总结(集训 考试)
    之前听说今天的考试难度是NOIP-。T1赛时只会暴力。甚至还想出了比时间复杂度\(O(n^2)\)的暴力更慢的时间\(O(n^3)\)(可能不是,可能要\(/\omega\))的bitset做法。正解之一是xorhashing。前年(T3)、去年(T2?)的CSP-S我都没想出hash做法。感觉自己缺乏想hash的意识。......
  • 2024暑假集训测试21
    前言比赛链接。T1写得和正解差不多但少了个细节炸longlong了;T2只会\(n^3\)的本来只有\(50pts\),但考虑出题人大概率会搞一个\(n\)越大\(T\)越小,所以对于\(n\)很大的直接\(rand\)正确率还是有的,所以获得了\(80pts\);T3不会;T4没有和\(n\)取\(\min\)直接......
  • DataWhale-2024夏令营第四期-从零入门AI生图原理&实践-学习笔记
    DataWhale-2024夏令营第四期-从零入门AI生图原理&实践-学习笔记Datawhale(linklearner.com)学习链接AI生图基础知识一、文生图(Text-to-ImageGeneration)历史随着深度学习的发展,近些年来越来越多的AI生图效果通过大语言模型得到了一定的提升。文生图的历史:文生图的概念最......
  • 【杂记】英华集训纪要
    8.11下午入校,然后各种收拾行李之类的来了机房发现除了我还有4位大佬,膜拜因为中考前我不是好几个月没学吗,也是忘干净了然后开始复习,这些题也是异常简单,过两天就能回去写Ynoi了upd:后面老哥一个在打杂交版pvz,一个在打火影忍者,绷不住了P1434[SHOI2002]滑雪我咋开始写这么简......
  • Windows11 24H2 + MSSQL 2022 Developer安装匹配
    时间一晃好久没折腾这个了,因LenovoG500太老破旧(Windows7+MSSQL2014Developer,不想折腾更换),直到6月份挂掉再维修也没价值了,只好临时用了另外一个AcerASpire4750(8G+120GSSD),当时其实也没打算更换到Windows10,只是之前的U盘启动盘坏掉,临时做了个其他U盘启动盘(非老毛桃、大白菜......
  • 『模拟赛』暑假集训CSP提高模拟18
    Rank致敬传奇不挂分Rank5模拟赛A.Mortis原[ABC302G]Sortfrom1to4签,致敬传奇abc_g作签到题。虽然但是还是想了1h,好在最后成功切了。具体解释看看题解,求个赞。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintRatio=0;constintN=2......
  • JetBrains IntelliJ IDEA 2024.2 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin I
    JetBrainsIntelliJIDEA2024.2(macOS,Linux,Windows)-领先的Java和KotlinIDE请访问原文链接:https://sysin.org/blog/jetbrains-idea/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsIntelliJIDEA-领先的Java和KotlinIDE使开发更高效、更......
  • 暑假集训CSP提高模拟18
    \[暑假集训CSP提高模拟\1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1\]Verygoodproblem,thismakemynewsrotate.A.Mortis考虑到应该先写个假的暴力.对于暴力思路,可以想到,假如我们每次都将一个不在它位置上的数字移到它应该在的地方的时候,另一个数字也刚好移到正确的位置,这......
  • 【Oracle点滴积累】Oracle 19c安装Critical Patch Update for April 2022
    广告位招租!知识无价,人有情,无偿分享知识,希望本条信息对你有用!今天和大家分享如何为Oracle19c安装CriticalPatchUpdate(PatchNumber:33806138),本指引不包含RollBack部分。mkdir/home/oracle/Patchmkdir/home/oracle/PatchZipmkdir/home/oracle/Backup_ORACLE_H......
  • HDU-ACM 2024 Day2
    T1004a*bproblem(HDU7448)不会。T1005小塔的养成游戏之梦(HDU7449)不会。T1009强攻计策(HDU7453)容易发现初始速度是多少对答案没有影响,所以我们默认初始速度为\(0\)。题意相当于在平面直角坐标系上(横轴为时间,纵轴为速度),有一个目标高度,维护一条尽量接近目标的直线,但......