Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

A [ABC361A] Insert AC

  • 循环结构。

    点击查看代码
    int a[200];
    int main()
    {
        int n,k,x,i;
        cin>>n>>k>>x;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
            cout<<a[i]<<" ";
            if(i==k)
            {
                cout<<x<<" ";
            }
        }
        return 0;
    }
    

B [ABC361B] Intersection of Cuboids AC

  • 不会立体几何。

  • fx,y,z 表示 (x,y,z) 被包含在几个长方体内。最后判断是否存在一个点 (x,y,z) 使得 fx,y,z=fx1,y,z=fx,y1,z=fx,y,z1=2

  • bitset 压一下,时空复杂度为 O(10003w) ,因为是 2s1024MB ,所以可以过。

    点击查看代码
    bitset<1010>vis[2][1010][1010];
    int main()
    {
        int a,b,c,d,e,f,i,j,k,h;
        for(i=0;i<=1;i++)
        {
            cin>>a>>b>>c>>d>>e>>f;  
            for(j=a;j<=d;j++)
            {
                for(k=b;k<=e;k++)
                {
                    for(h=c;h<=f;h++)
                    {
                        vis[i][j][k][h]=1;
                        if((vis[i][j][k][h]==1&&vis[i^1][j][k][h]==1)&&(j>=1&&vis[i][j-1][k][h]==1&&vis[i^1][j-1][k][h]==1)&&(k>=1&&vis[i][j][k-1][h]==1&&vis[i^1][j][k-1][h]==1)&&(h>=1&&vis[i][j][k][h-1]==1&&vis[i^1][j][k][h-1]==1))
                        {
                            cout<<"Yes"<<endl;
                            return 0;
                        }
                    }
                }
            }
        }
        cout<<"No"<<endl;
        return 0;
    }
    

C [ABC361C] Make Them Narrow AC

  • {a} 升序排序后,枚举这个位置作为最大值时最小值是几。

  • 最终,有 mini=nkn{aiak(ni)+1} 即为所求。

    点击查看代码
    ll a[200010];
    int main()
    {
        ll n,k,ans=0x7f7f7f7f,i;
        cin>>n>>k;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+1+n);
        for(i=n-k;i<=n;i++)
        {
            ans=min(ans,a[i]-a[k-(n-i)+1]);
        }
        cout<<ans<<endl;
        return 0;
    }
    

D [ABC361D] Go Stone Puzzle

  • 傻逼搜索,不想写了。

E [ABC361E] Tree and Hamilton Path 2

  • 感觉类似 HDU2196 Computer ,赛时一开始以为是简单树形 DP,后来发现需要换根,接着一直在想换根,推到最后还差一个式子没推出来。

  • 如果要求最终回到起点,则每条边均会经过两次,搜索顺序不影响最终答案。而最终不要求回到起点,搜索顺序会影响答案,其中找到最长的一条路径(直径),减去直径长度即可。

    点击查看代码
    struct node
    {
        ll nxt,to,w;
    }e[400010];
    ll head[400010],f[400010],g[400010],cnt=0,len=0;
    void add(ll u,ll v,ll w)
    {
        cnt++;
        e[cnt].nxt=head[u];
        e[cnt].to=v;
        e[cnt].w=w;
        head[u]=cnt;
    }
    void dfs(int x,int fa)
    {
        for(int i=head[x];i!=0;i=e[i].nxt)
        {
            if(e[i].to!=fa)
            {
                dfs(e[i].to,x);
                if(f[e[i].to]+e[i].w>f[x])
                {
                    g[x]=f[x];
                    f[x]=f[e[i].to]+e[i].w;
                }
                else
                {
                    g[x]=max(g[x],f[e[i].to]+e[i].w);
                }
            }
        }
        len=max(len,f[x]+g[x]);
    }
    int main()
    {   
        ll n,u,v,w,ans=0,i;
        cin>>n;
        for(i=1;i<=n-1;i++)
        {
            cin>>u>>v>>w;
            ans+=2*w;
            add(u,v,w);
            add(v,u,w);
        }
        dfs(1,0);
        cout<<ans-len<<endl;
        return 0;
    }
    

F [ABC361F] x = a^b AC

  • 对应 luogu P9118 [春季测试 2023] 幂次k=2 的情况,赛时直接贺的以前代码。

  • 等价于计算 x=1n[bk,xbN]

  • k=1 时,有 n 即为所求。

  • k=2 时,容斥一下,有 x=2n[b3,xbN]+x=1n[x2N]x=2n[x6N]=x=2n[b3,xbN]+n2x=2n[x6N] 即为所求。枚举底数和指数判断依次判断。

  • k3 时,枚举指数 b 和底数 a=xb[1n3] ,依次判断。

    点击查看代码
    map<ll,bool>vis;
    int main()
    {
        ll n,k,ans=0,sum3=0,sum6=0,mi,c,sqrtmi,i;
        cin>>n;
        k=2;
        if(k==1)
        {
            cout<<n<<endl;
        }
        else
        {
            for(i=2;i*i*i<=n;i++)
            {
                mi=i*i;
                c=2;
                while(mi<=n/i)
                {
                    mi*=i;
                    c++;
                    if(c>=k&&vis.find(mi)==vis.end())
                    {
                        vis[mi]=1;
                        sum3++;
                        sqrtmi=sqrtl(mi);
                        sum6+=(sqrtmi*sqrtmi==mi);
                    }
                }
            }
            if(k==2)
            {
                cout<<((ll)(sqrtl(n)))+sum3-sum6<<endl;
            }
            else
            {
                cout<<sum3+1<<endl;
            }
        }
        return 0;
    }
    

G [ABC361G] Go Territory

总结

  • 开题顺序: AFCBE
  • 模拟赛和比赛题要记得改。
posted @   hzoi_Shadow  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
扩大
缩小
点击右上角即可分享
微信分享提示