首页 > 其他分享 >Codeforces Round #825 (Div. 2)(补题中)

Codeforces Round #825 (Div. 2)(补题中)

时间:2022-10-14 11:45:24浏览次数:54  
标签:Code int ll cin 补题 825 Div main dp

战绩:

A. Make A Equal to B

 

实际上就只有两种操作可能,一种是遇到了不同的位置直接换,一种是换出0和1一样的个数后重新排列顺序,两种操作比较最小值输出。

int main()
{
    cin>>T;
    while(T--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            ll lim;
            cin>>a[i];
            buca[a[i]]++;
        }
        for(int i=1;i<=n;i++)
        {
            ll lim;
            cin>>b[i];
            bucb[b[i]]++;
        }
        ll change=abs(bucb[0]-buca[0]);
        ll c2=0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]!=b[i]) c2++;
        }
        ll ans=min(c2,change+1);
        cout<<ans<<endl;
        memset(buca,0,sizeof(buca));
        memset(bucb,0,sizeof(bucb));
    }
    return 0;
}
View Code

B. Playing with GCD

对于每一个bi,我们可以知道它左右两个ai都必定是它的因子,相邻的两个bi要求最大公因数,那么我们构造的b数组一定要符合每个bi都是左右两个a的最小公倍数,构造出数组后再比较一遍即可。

int main()
{
    cin>>T;
    while(T--)
    {
        cin>>n;
        a[0]=1;
        a[n+1]=1;
        for(int i=1;i<=n;i++) cin>>a[i];
        bool flag=0;
        for(int i=1;i<=n+1;i++)
        {
            b[i]=(a[i-1]*a[i])/__gcd(a[i-1],a[i]);
        }
        for(int i=2;i<=n+1;i++)
        {
            if(__gcd(b[i],b[i-1])!=a[i-1]) flag=1;
        }
        if(!flag) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
View Code

C1. Good Subarrays (Easy Version)

我看到的题解大多数使用的是双指针,我用的是dp的思想,但实际上大同小异。

设dp[i]代表以i为结尾的符合题意的子串数目。

那么首先,每个a[i]揭示了当前这一位的最右边的起点的最近位置,也是这一位为结尾的最大可能区间数目。

其次我们一定要保证一个区间内每一个数字都符合题意,因此dp转移方程为dp[i]=min(a[i],dp[i-1]+1),累加即可。

int main()
{
    cin>>T;
    while(T--)
    {
        cin>>n;
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(i==1||a[i]==1)dp[i]=1;
            else dp[i]=min(a[i],dp[i-1]+1);
            ans+=dp[i];
        }
        cout<<ans<<endl;
    }
    return 0;
}
View Code

D. Equal Binary Subsequences

首先,如果出现某个数字个数是奇数,那么输出-1。

假如我们的串是00001111这样子一对一对都是相同的数字,那么我们很明显一左一右一左一右的分配即可。

那么我们就每两个两个来看,如果是01或者10这样的我们就抽出一个数字。

符合条件的情况下,如果01/10出现那么后面一定还有一组01/10,那么我们两组就抽出两个不同的数字,然后我们全部循环左移或者右移,就变成了我们想要的成对子的串。

int main()
{
    cin>>T;
    while(T--)
    {
        cin>>n;
        cin>>s;
        ll num0=0,num1=0;
        for(int i=0;i<2*n;i++) {if(s[i]=='0') num0++;else num1++;}
        if((num0&1)||(num1&1)) {cout<<"-1"<<"\n";continue;}
        ll las=0;
        cg.clear();
        for(int i=0;i<2*n;i+=2)
        {
            if(s[i]==s[i+1]) continue;
            else
            {
                if((s[i]-'0')!=las) cg.push_back(i);
                else cg.push_back(i+1);
                las=1-las;
            }
        }
        cout<<cg.size();
        for(int i=0;i<cg.size();i++) cout<<" "<<cg[i]+1;
        cout<<endl;
        for(int i=0;i<2*n;i+=2) cout<<i+1<<" ";
        cout<<endl;
    }
    return 0;
}
View Code

 

标签:Code,int,ll,cin,补题,825,Div,main,dp
From: https://www.cnblogs.com/ztlsw/p/16791111.html

相关文章

  • Codeforces Round #827 (Div. 4) A - G
    A.Sumvoidsolve(){inta[3]={};cin>>a[0]>>a[1]>>a[2];sort(a,a+3);if(a[2]==a[0]+a[1])cout<<"YES\n";elsecout<<"NO......
  • common divisor---求最大公约数
    GreatestCommonDivisor.Thegreatestcommondivisoristhelargestnumberwhichwillevenlydividetwoothernumbers.Examples:GCD(5,10)=5,thelargestnum......
  • Codeforces Round #826 (Div. 3)
    F.Multi-ColoredSegments观察:如果某个位置上有大于等于两种不同的颜色,这个位置就可以更新任何颜色的线段的答案。基于观察就可以通过模拟来解决问题了。大概就是先离......
  • 03 Quorum Queues Internals - A Deep Dive
    标题:QuorumQueuesInternals-ADeepDive原文:https://www.cloudamqp.com/blog/quorum-queues-internals-a-deep-dive.html时间:2019-04-03在本文中,我们将更详细地了解......
  • CF823div2B
    cf823div2B题目链接题目大意多组测试数据,有\(n\)个点在数轴上,他们想要集会,每个点到目标点\(y\)的时间为$$t_i+|x_i-y|$$试求所有点到\(y\)中最长时间的最小值。思路......
  • cf823div2C
    cf823div2C题目链接题目给你两个字符串\(s_1,s_2\).每次操作可以让\(s_1\)的前k个和\(s_2\)的后k个交换。询问是否可以通过多次上述操作,使得\(s_1=s_2\)。思路这种题......
  • Codeforces Round #826 (Div. 3) F // 线段树
    题目来源:CodeforcesRound#826(Div.3)F题目链接:F.Multi-ColoredSegments题意给定\(n\)条有颜色的线段(\(l_i,r_i,c_i\)),对于每条线段,求:距离该线段最近,且颜色不同的......
  • *Educational Codeforces Round 87 (Rated for Div. 2) C1. Simple Polygon Embedding
    https://codeforces.com/problemset/problem/1354/C1题目大意:给定一个数字n,表示构建出一个大小为2*n的边长的多边形;问我们可以装下这个多边形的最小的正方形的边长是......
  • CodeForces Round #826 (Div.3) 康复训练
    A模拟题,不多说。时间复杂度\(O(3)\)#include<iostream>#include<cstdio>#include<cstring>#include<map>constcharch[]={'L','M','S'};std::strings[2];s......
  • DW_div_pipe
    https://www.synopsys.com/dw/buildingblock.phphttps://max.book118.com/html/2018/0204/151848438.shtmhttps://caxapa.ru/thumbs/405687/dw_qrg.pdf无符号操作图:......