萌新的CF复盘 - 3月上月刊

每次只能写出几道题 涨个20分左右 听老师的开个复盘文吧

Codeforces Round 926 (Div.2)

A. Sasha and the Beautiful Array

从2到n的所有 (ai−ai−1)就是an-ai 然后排序还是不限次数随便改 那就直接出最大值减最小值就OK了 这种题到底是怎么混进div2的

#include <iostream>

using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        int minn=1e9,maxx=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int tmp;
            scanf("%d",&tmp);
            minn=min(minn,tmp);
            maxx=max(maxx,tmp);
        }
        cout << maxx-minn << endl;
    }
    return 0;
}

B. Sasha and the Drawing

每个case给一个n表示正方形大小,要求有k条对角线上有格子被涂黑,需要输出至少涂的格子个数

每个格子涂完可以搞定两条对角线 最后有个重复的就行 记得特判

#include <iostream>

using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        if(k<=(n-1)*4)
            cout<<(k+1)/2<<endl;
        else
            cout<<k-2*n+2<<endl;
    }
    return 0;
}

后面开摆了 下一场

Codeforces Round 927 (Div.3)

A. Thorns and Coins

没啥好说的 遍历跑一遍 不对就break就完事了

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,cnt=0;
        scanf("%d\n",&n);
        char s[60];
        gets(s);
        for(int i=0;i<n;i++)
        {
            if(s[i]=='@')
                cnt++;
            else if(s[i]=='*'&&s[i+1]=='*')
                break;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

B. Chaya Calendar

题意就是按顺序把数组里数的整数倍都发现一次 数据太大 遍历肯定是不行力 想想办法吧

当我第一件事情发生之后 我要等待比此时大的最小的第二件事周期的整数倍 那干脆现在的时间除这个周期 然后+1再乘回去就行了 仍然没啥含金量

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,i=0;
        scanf("%d",&n);
        int a[n];
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[j]);
        }
        int cnt=a[0];
        for(i=1;i<n;i++)
        {
            int t=cnt/a[i]+1;
            cnt=t*a[i];
        }
        printf("%d\n",cnt);
    }
    return 0;
}

Codeforces Round 929 (Div.3)

A. Turtle Puzzle: Rearrange and Negate

给一堆数 可以对任何数乘-1 求做操作后可获得的最大和

全求绝对值不就完了

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,i=0;
        scanf("%d",&n);
        int a[n];
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[j]);
        }
        int cnt=a[0];
        for(i=1;i<n;i++)
        {
            int t=cnt/a[i]+1;
            cnt=t*a[i];
        }
        printf("%d\n",cnt);
    }
    return 0;
}

B. Turtle Math: Fast Three Task

题意:减去最少个数的数字使数组和为3的倍数

答案显然只可能是0,1,2 先把一开始的和取个模看看差几 差1直接秒了

差2的话就看看有没有某一项也差2 有的话就直接去那一项就行

#include <stdio.h>
#include <stdlib.h>
int sum(int a[],int len)
{
    int ret=0;
    for(int i=0;i<len;i++)
    {
        ret+=a[i];
    }
    return ret;
}
int min(int a,int b)
{
    if(a<=b)
        return a;
    return b;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int len;
        scanf("%d",&len);
        int a[len];
        for(int i=0;i<len;i++)
        {
            scanf("%d",&a[i]);
        }
        int prt;
        if(sum(a,len)%3==0)
        {
            prt=0;
        }
        else
        {
            int temp=sum(a,len)%3;
            int m=1e9;
            for(int i=0;i<len;i++)
            {
                m=min(abs(a[i]%3-temp),m);
            }
            if(m==0||temp==2)
                prt=1;
            else
            {
                prt=2;
            }
        }
        printf("%d\n",prt);
    }
    return 0;
}

D. Turtle Tenacity: Continual Mods

随便改变数组顺序 有没有机会让他从头模到尾不等于0

如果只有一个1没有别的了就直接放最前面就秒了

要不然从小到大排序第一个第二个不一样也能造一个1在最前面 跟上面一样

如果前两个数都是1就寄了 但如果前两个数都相等但不都等于1的话我可以在后面找一个特别大的数调过去继续凑开头的1

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int len;
        scanf("%d",&len);
        int s[len];
        for(int i=0;i<len;i++)
        {
            scanf("%d",&s[i]);
        }
        sort(s,s+len);
        if(s[0]!=s[1])
            printf("YES\n");
        else
        {
            if(s[0]==1)
                printf("NO\n");
            else
            {
                int flag=0;
                for(int i=0;i<len;i++)
                {
                    if(s[i]%s[0]!=0)
                        flag=1;
                }
                if(flag==1)
                    printf("YES\n");
                else
                {
                    printf("NO\n");
                }
            }
        }
    }
    return 0;
}

Codeforces Round 930 (Div.2)

A. Shuffle Party

给定一个1-n的顺序数组 从2开始把每个数下标和他最大因数为下标的数和他交换 问最后1在哪个位置

不用考虑前面的,只考虑后面的,1每次移位一定是去到了自己原来位置2倍下标的点 那就一个循环解决了

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>

using namespace std;

long long findx(long long x)
{
    for(long long i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
            return x/i;
    }
    return 1;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        long long n;
        scanf("%lld",&n);
        long long now=1;
        while(now*2<=n)
        {
            now*=2;
        }
        printf("%lld\n",now);
    }
    return 0;
}

B. Binary Path

找路 从左上到右下 输出字典序最小的路 和这么走的可能情况数

右边是1下边是0就往下走 不然永远往右走 然后循环里加上计数就行

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    scanf("%d\n",&T);
    while(T--)
    {
        int n;
        scanf("%d\n",&n);
        char s[2][n+1];
        for(int i=0; i<2; i++)
            scanf("%s",s[i]);
        //for(int i=0;i<2;i++)
        //    puts(s[i]);
        int way=0,i=0;
        for(i=0; i<n; i++)
        {
            printf("%c",s[0][i]);
            if(s[0][i+1]=='1'&&s[1][i]=='0')
            {
                break;
            }
            else if(s[0][i+1]==s[1][i])
                way++;
        }
        //printf("i=%d\n",i);
        if(i==n)
        {
            printf("%c",s[1][n-1]);
            printf("\n%d\n",way);
        }
        else
        {
            for(; i<n; i++)
            {
                printf("%c",s[1][i]);
            }
            printf("\n%d\n",way);
        }
    }
    return 0;
}

Codeforces Round 932 (Div.2)

A. Entertainment in MAC

对一段字符串 可以倒转他 也可以把反转的他加到正序的他后面

求最小字典序的结果 从左往右找到中间判断需不需要反转就行

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    scanf("%d\n",&T);
    while(T--)
    {
        int n;
        scanf("%d\n",&n);
        char s[2][n+1];
        for(int i=0; i<2; i++)
            scanf("%s",s[i]);
        //for(int i=0;i<2;i++)
        //    puts(s[i]);
        int way=0,i=0;
        for(i=0; i<n; i++)
        {
            printf("%c",s[0][i]);
            if(s[0][i+1]=='1'&&s[1][i]=='0')
            {
                break;
            }
            else if(s[0][i+1]==s[1][i])
                way++;
        }
        //printf("i=%d\n",i);
        if(i==n)
        {
            printf("%c",s[1][n-1]);
            printf("\n%d\n",way);
        }
        else
        {
            for(; i<n; i++)
            {
                printf("%c",s[1][i]);
            }
            printf("\n%d\n",way);
        }
    }
    return 0;
}

Codeforces Round 933 (Div.3)

A. Rudolf and the Ticket

才100 直接O(nm)遍历就行

#include <iostream>

using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m,k;
        scanf("%d%d%d",&n,&m,&k);
        int b[n],c[m];
        for(int i=0;i<n;i++)
            scanf("%d",&b[i]);
        for(int i=0;i<m;i++)
            scanf("%d",&c[i]);
        int cnt=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(b[i]+c[j]<=k)
                    cnt++;
            }
        }
        cout << cnt << endl;
    }
    return 0;
}

B. Rudolf and 121

将思维逆转过来 一斤鸭梨!

减不好想就改成空数组往上加 最边边只能一个一个往下加 处理完最外边边 第二层就是新的边边 加到中间之后看看加出来的数组是不是和原数组完全相同即可

#include <iostream>

using namespace std;

int unequal(int a[],int b[],int n)
{
    for(int i=0;i<n;i++)
    {
        if(a[i]!=b[i])
            return 1;
    }
    return 0;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        //printf("n=%d\n",n);
        int s[200010],my[200010];
        for(int i=0;i<n;i++)
        {
            scanf("%d",&s[i]);
            //printf("ÊäÈë³É¹¦\n");
            my[i]=0;
        }
        int l=0,r=n-1;
        //printf("l=%d r=%d\n",l,r);
        while(l<r&&s[l]>=my[l]&&s[r]>=my[r])
        {
            //printf("l=%d r=%d\n",l,r);
            int base=s[l]-my[l];
            my[l]+=base;
            my[l+1]+=base*2;
            my[l+2]+=base;
            l++;
            base=s[r]-my[r];
            my[r]+=base;
            my[r-1]+=base*2;
            my[r-2]+=base;
            r--;
        }
        if(unequal(my,s,n))
        {
            printf("NO\n");
        }
        else
        {
            printf("YES\n");
        }
    }
    return 0;
}

C. Rudolf and the Ugly String

mapie这种情况价格特判就行

(我也不知道为什么我一开始会看成只能删最左边或者最右边的数浪费了半小时)

#include <iostream>

using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        char s[n+1];
        int l1=0,l2=0;
        cin>>s;
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p'&&s[i+3]=='i'&&s[i+4]=='e')
            {
                ans++;
                s[i+2]='q';
            }
            else if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p')
            {
                ans++;
            }
            else if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e')
            {
                ans++;
            }
        }
        cout << ans << endl;
        //cout << s[n] << endl;
        /*for(int i=n-1;i>=0;i--)
        {
            if(l2==0)
            {
                if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p')
                    l2=i;
                else if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e')
                    l2=i;
            }
            else
            {
                if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p')
                {
                    l1=i;
                    break;
                }
                else if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e')
                {
                    l1=i;
                    break;
                }
            }
        }
        int r1=0,r2=0;
        for(int i=0;i<n;i++)
        {
            if(r1==0)
            {
                if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p')
                    r1=i+2;
                else if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e')
                    r1=i+2;
            }
            else
            {
                if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p')
                {
                    r2=i+2;
                    break;
                }
                else if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e')
                {
                    r2=i+2;
                    break;
                }
            }
        }
        printf("l1=%d l2=%d r1=%d r2=%d\n",l1,l2,r1,r2);
        int left=max(r2-l1-1,r1-l2-1);
        cout << left <<endl;
        cout << n-left << endl;*/
    }
    return 0;
}

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在实际工作中应用高效工作复盘-O混合式课程所学可以帮助你提升工作效率和质量,以及提供更好的自我和团队协作能力。以下是可能的改变和解决问题的方法: 1. 识别复盘中存在的问题:OMO混合式课程可能帮助你认识到你在复盘过程中可能存在的问题,比如缺乏系统性、不够深入、忽视重要细节等。你可以通过学习课程中的方法和技巧,更好地识别问题并加以解决。 2. 提高复盘效率:OMO混合式课程可能教授了一些高效的复盘方法,例如SMART目标设定、5W1H问题分析法、鱼骨图等。通过学习这些方法,你可以更迅速地找到问题根源、制定解决方案,并在实际工作中提高复盘效率。 3. 提升自我管理能力:OMO混合式课程可能强调了自我管理的重要性,例如时间管理、优先级排序、任务分解等。这些技能可以帮助你更好地组织和规划工作,提高自我效能感,并更好地应对工作挑战。 4. 加强团队协作能力:OMO混合式课程可能涉及到团队复盘和共享经验的内容。通过学习这些课程,你可以了解如何在团队中进行有效的复盘和知识分享,促进团队学习和协作,提高整个团队的绩效。 综上所述,通过应用高效工作复盘-OMO混合式课程所学,你可能会改善复盘中存在的问题,并在实际工作中提高工作效率、自我管理能力和团队协作能力。这将有助于你更好地应对工作挑战,取得更好的成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值