Codeforces Round #607 (Div. 2)

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

题意:这道题的话,是让你求出题里所给的字符串是属于哪个国家的语言。

思路:我们判断一下即可。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
char a[maxx];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>a;
        int alen=strlen(a);
        if(a[alen-1]=='o')
            cout<<"FILIPINO"<<endl;
        else if(a[alen-1]=='a')
            cout<<"KOREAN"<<endl;
        else
            cout<<"JAPANESE"<<endl;
    }
    return 0;
}

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

题意:这道题的话就是给你两个字符串,让你按照字典序进行替换,看看能不能让前面的字符串小与后面的字符串。

思路:先将要被替换的字符串进行sort排序,这样我们就能得到每个位置上交换的最小字符,然后进行交换即可。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
string a,b;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        if(a<b)
        {
            cout<<a<<endl;
            continue;
        }
        string s=a;
        sort(s.begin(),s.end());
        int flag=0;
        for(int i=0;i<a.size();i++)
        {
            if(a[i]>s[i])
            {
                for(int j=i+1;j<a.size();j++)
                {
                    swap(a[i],a[j]);
                    if(a<b)
                    {
                        cout<<a<<endl;
                        flag=1;
                        i=a.size();
                        break;
                    }
                    swap(a[i],a[j]);
                }
            }
        }
        if(!flag)
            cout<<"---"<<endl;
    }
    return 0;
}

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

题意:这道题的话,给你一系列操作问你,经过这些操作之后的字符串是什么样子的。

思路:思路的话就是直接模拟,当字符串大于等于x的时候停止模拟即可。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
using namespace std;
int main()
{
    int t,x;
    string s;
    cin>>t;
    while(t--)
    {
        cin>>x>>s;
        int slen=s.size();
        for(int i=0; i<x; i++)
        {
            int len=s[i]-'0';
            if(slen<x)
            {
                for(int j=1; j<len; j++)
                {
                    if(s.size()<x)
                    {
                        for(int z=i+1; z<slen; z++)
                        {
                            if(s.size()<x)
                                s+=s[z];
                        }
                    }
                }
            }
            int d=(slen-i-1+mod)%mod;
            slen=((i+1)+(ll)d*len)%mod;
        }
        cout<<slen<<endl;
    }
    return 0;
}

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

题意:这道题的话,题意是给你n行m列的矩阵,矩阵里只存在'A'和'P',然后问你最少需要几步能把整个矩阵全变成'A'。

思路:思路的话,就是我们要分情况讨论,遍历每一行每一列,分别讨论'A'在两端,在中间,还是一行全是的情况。而且我们能判断出如果可以的情况下,步数的范围区间是[0,4]。

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=10010;
using namespace std;
int t,n,m;
char a[maxn][maxn];
int main()
{
    cin>>t;
    while(t--)
    {
        int foundA=0, foundP=0, ans=4;
        cin>>n>>m;
        for (int i=1; i<=n; i++)
        {
            for (int j=1; j<=m; j++)
                cin>>a[i][j];
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
                if (a[i][j]=='A')
                    foundA=1;
                else
                    foundP=1;
        }
        if(!foundA)
        {
            cout<<"MORTAL"<<endl;
            continue;
        }
        if(!foundP)
        {
            cout<<"0"<<endl;
            continue;
        }
        for(int i=1; i<=n; i++)
        {
            int maxx=-1, minn=1000;
            for(int j=1; j<=m; j++)
            {
                maxx=max(maxx,(int)a[i][j]);
                minn=min(minn,(int)a[i][j]);
                if(a[i][j]=='A')
                {
                    int t=4;
                    if(i==1 || i==n)
                        t--;
                    if(j==1 || j==m)
                        t--;
                    ans=min(ans,t);
                }
            }
            if(maxx==minn && maxx=='A')
            {
                if(i==1 || i==n)
                    ans=min(ans,1);
                else
                    ans=min(ans,2);
            }
        }
        for(int j=1; j<=m; j++)
        {
            int maxx=-1, minn=1000;
            for(int i=1; i<=n; i++)
            {
                maxx=max(maxx,(int)a[i][j]);
                minn=min(minn,(int)a[i][j]);
            }
            if(maxx==minn && maxx=='A')
            {
                if (j==1 || j==m)
                    ans=min(ans,1);
                else
                    ans=min(ans,2);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
发布了204 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

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