首页 > 其他分享 >Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

时间:2024-07-07 09:08:46浏览次数:11  
标签:AtCoder cnt Beginner Contest int ll vis &&

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

\(A\) 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\) Intersection of Cuboids \(AC\)

  • 不会立体几何。

  • 设 \(f_{x,y,z}\) 表示 \((x,y,z)\) 被包含在几个长方体内。最后判断是否存在一个点 \((x,y,z)\) 使得 \(f_{x,y,z}=f_{x-1,y,z}=f_{x,y-1,z}=f_{x,y,z-1}=2\) 。

  • bitset 压一下,时空复杂度为 \(O(\dfrac{1000^3}{w})\) ,因为是 \(2s\) 和 \(1024MB\) ,所以可以过。

    点击查看代码
    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\) Make Them Narrow \(AC\)

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

  • 最终,有 \(\min\limits_{i=n-k}^{n} \{ a_{i}-a_{k-(n-i)+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\) Go Stone Puzzle

  • 傻逼搜索,不想写了。

\(E\) Tree and Hamilton Path 2

  • 感觉在哪里看过类似的,赛时一开始以为是简单树形 \(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\) x = a^b \(AC\)

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

  • 当 \(k=1\) 时,有 \(n\) 即为所求。

  • 当 \(k=2\) 时,有 \(k \ge 3\) 的答案加上 \(x=a^{2}\) 的数量再减去能表示成 \(x=a^{6}\) 的数量即为所求。

  • 当 \(k \ge 3\) 时,枚举底数 \(1 \sim \sqrt[3] n\) ,手算指数判断。

    点击查看代码
    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\) Go Territory

总结

  • 开题顺序: \(AFCBE\)
  • 模拟和比赛题要记得改。

标签:AtCoder,cnt,Beginner,Contest,int,ll,vis,&&
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18288196

相关文章

  • AtCoder Beginner Contest 361 补题记录(A~F)
    开题顺序:A-C-F-D-B-E。A直接模拟即可。boolbegmem;#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;classFastIO{public:intread(){into=1,x;charch;while(!isdigit(ch=getchar())){if......
  • Solution - Atcoder ARC125E Snack
    观察到这种都是数量上限的限制,且求\(\max\)。所以可以考虑网络流建模,而流量就对应着给的糖果数。令\(S\)为源点,\(T\)为汇点,编号为\(1\simn\)的点对应的糖果的种类,编号为\(n+1\simn+m\)的点对应的小孩。连边\((S,i,a_i)\),表示第\(i\)种糖果数不超过\(a_i\)......
  • AtCoder Beginner Contest 359
    AtCoderBeginnerContest359A-CountTakahashi有\(n\)个字符串,每个串要么是Takahashi要么是Aoki,问有多少个字符串是Takahashi额....这还要有题解吗(?)#include<iostream>#include<cstring>usingnamespacestd;intmain(){stringa;intn,ans=0;cin>......
  • Solution - Atcoder AGC010E Rearranging
    因为只有相邻的互质的\(a_i\)可以交换,那么就说明不互质的\(a_i\)无法相交换,对应的位置关系也就不会改变。于是可以考虑图论建模,对于\(\gcd(a_i,a_j)>1\),连边\((i,j)\)。那么对于先手,就相当于要把这些边定向,变为一个DAG。而后手因为要保证最大,所以肯定是在DAG上跑......
  • AtCoder Beginner Contest 359
    AtCoderBeginnerContest359这场我赛时打的非常不好,只做出了\(2\)题。A-CountTakahashi签到//Problem:A-CountTakahashi//Contest:AtCoder-UNIQUEVISIONProgrammingContest2024Summer(AtCoderBeginnerContest359)//URL:https://atcoder.jp/conte......
  • Solution - Atcoder AGC034F RNG and XOR
    考虑到这个边权是\(\oplus\),那么说明对于\((u,v)\),\(u\tov\)和\(v\tou\)的边权实质是相同的。那么对于\(0\tox\),就可以反过来,记录下对应的路径,从\(x\)开始走,那么第一次走到\(0\)的时候也就是从\(0\)第一次走到\(x\)的时候。于是就转化为了\(x\)为起点,第一次......
  • AtCoder Beginner Contest 043
    D-Unbalanced只需要找到形如\(XX\)、\(XYX\)的字串即可。即两个相同字符之间最多间隔一个字符。证明:若不然,\(AXYA\),每加一个字符\(A\),都要增加多余字符\(XY\),不可能符合要求。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios......
  • AtCoder Beginner Contest 042
    C-Iroha'sObsession用一个\(\rmst\)数组把每一位标记,然后枚举大于\(n\)的数,一旦有各位都满足要求的数出现就\(\rmbreak\)。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;boolst[10];boolcheck(intx){ while(x){ intb=x%1......
  • Atcoder ABC091D Two Sequences
    首先根据\(\operatorname{xor}\),就想到拆成二进制的\(a_{i,w},b_{i,w}\)来处理。类似竖式加法,考虑把得到的结果\(c_{w}\)分为\(a_{i,w}+b_{j,w}+x\),其中\(x\)就是上一位的进位。进一步的,发现对于总的\(c_{w}\),\(a_{i,w},b_{j,w}\)肯定都在这个位置加了\(......
  • Atcoder ARC090F Number of Digits
    记\(n\)为题面的\(S\)。能发现对于\(f(l)=8\),共有\(9\times10^7\)个数。此时就已经有\(8\times9\times10^7>10^8=n_{\max}\)了,就说明不存在\(f\ge8\)的情况,还满足这部分对应的数能全被选满。所以可以知道对于\(f(l)\ge8\)的情况,只存在\(f(r)-f(l)=......