Codeforces Round #605 (Div. 3)

A题:https://codeforces.com/contest/1272/problem/A

题意:这道题的话是让你走三个方向,然后每次只能走一步或者不走。问你走多少步。
思路:思路的话就是简单遍历,没啥可说的。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=1010;
const int inf=0x3f3f3f3f;
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a[5];
        for (int i=1; i<=3; i++)
            cin>>a[i];
        sort(a+1,a+4);
        if(a[1]==a[2])
        {
            if(a[3]>a[2])
                a[3]--;
            if(a[1]<a[3])
            {
                a[1]++;
                a[2]++;
            }
        }
        else if(a[2]==a[3])
        {
            if (a[1]<a[2])
                a[1]++;
            if (a[2]>a[1])
            {
                 a[2]--;
                 a[3]--;
            }
        }
        else
        {
            a[1]++;
            a[3]--;
        }
        int ans=a[2]-a[1]+a[3]-a[1]+a[3]-a[2];
        cout<<ans<<endl;
    }
    return 0;
}

B题:https://codeforces.com/contest/1272/problem/B

题意:这道题的话,就是给你四个方向,每次只可以走一步,问你给你的这些方向操作能不能保证从(0,0)开始走,再走回(0,0),这期间只有(0,0)走了两次。然后如果不能保证的话,问你最少需要减少多少操作才可以实现。然后输出减少后的操作数,再输出操作的步骤。

思路:思路的话,就是遍历,然后贪心,模拟一下,具体看代码吧。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
string s;
int main()
{
    int q;
    cin>>q;
    while(q--)
    {
        cin>>s;
        int a=0,b=0,c=0,d=0;
        int slen=s.size();
        for(int i=0; i<slen; i++)
        {
            if(s[i]=='U')
                a++;
            if(s[i]=='D')
                b++;
            if(s[i]=='R')
                c++;
            if(s[i]=='L')
                d++;
        }
        int m=min(a,b);
        int n=min(c,d);
        if((m+n)==0)
            cout<<"0"<<endl;
        else if(m==0 || n==0)
        {
            if(m==0)
            {
                cout<<"2"<<endl;
                cout<<"RL"<<endl;
            }
            else if(n==0)
            {
                cout<<"2"<<endl;
                cout<<"UD"<<endl;
            }
        }
        else
        {
            cout<<2*(m+n)<<endl;
            for(int i=0; i<m; i++)
                cout<<"U";
            for(int i=0; i<n; i++)
                cout<<"R";
            for(int i=0; i<m; i++)
                cout<<"D";
            for(int i=0; i<n; i++)
                cout<<"L";
            cout<<endl;
        }
    }
    return 0;
}

C题:https://codeforces.com/contest/1272/problem/C

题意:这道题的话,就是给你n个字符,k个字符,问你在n个字符中含有k个字符中的字符的子集和是多少。

思路:思路的话,我们就遍历字符,相等的时候++,然后不难发现,规律就是slen*(slen+1)/2。所以就可以做出这道题了。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=200010;
const int inf=0x3f3f3f3f;
using namespace std;
char s[maxx];
char a[30];
int main()
{
    int n,k;
    cin>>n>>k;
    cin>>s;
       for(int i=0; i<k; i++)
           cin>>a[i];
    ll ans=0;
    ll slen=0;
    for(int i=0; i<n; i++)
    {
        int flag=0;
        for(int j=0; j<k; j++)
        {
            if(s[i]==a[j])
            {
                flag=1;
                slen++;
                break;
            }
        }
        if(!flag || i==n-1)
        {
            ans+=(slen*(slen+1))/2;
            slen=0;
        }
    }
    cout<<ans<<endl;
    return 0;
}

D题:https://codeforces.com/contest/1272/problem/D

题意:这道题的话,是给你一个数组,其中有n个数字,然后问你最多去掉一个数字,剩下的数字的最长连续递增子序列的长度是多少。

思路:思路的话就是用dp来做,dp[][0]表示未去掉的个数,dp[][1]表示去掉一个的个数,然后判断一下即可。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=200010;
const int inf=0x3f3f3f3f;
using namespace std;
int a[maxx];
int dp[maxx][2];
int main()
{
    int n,ans=0;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        dp[i][0]=1;
    }
    for(int i=2; i<=n; i++)
    {
        if(a[i]>a[i-1])
        {
            dp[i][0]=dp[i-1][0]+1;
            dp[i][1]=dp[i-1][1]+1;
        }
        if(a[i]>a[i-2])
            dp[i][1]=max(dp[i][1],dp[i-2][0]+1);
        ans=max(ans,max(dp[i][0],dp[i][1]));
    }
    cout<<ans<<endl;
    return 0;
}
发布了204 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43846139/article/details/103662751