《看了受制了》第四天,6道题,合计22道题

2023年8月29日

今天是小白赛和ACWing周赛,哎总是那样,难题根本不会,简单题非常简单。。。

牛客小白月赛75期 上班

题目理解

就是输出,x + yx + z小的那一个

代码实现

#include<iostream>
using namespace std;

int main()
{
    int x, y, z;
    cin >> x >> y >> z;
    
    cout << min(x + z, x + y);
    
    return 0;
}

牛客小白月赛75期 崇拜

题目理解

根据题目理解的第二个输出看到,崇拜值是绝对不会低于0的。所以只要逢 > y的就+3

代码实现

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 2e5 + 10;

int a[N];

int main()
{
    int n, x, y;
    
    cin >> n >> x >> y;
    int res = 0;
    for(int i = 1; i <= n; i++)
    {
        int t;
        cin >> t;
        if(t > y)
            res += 3;
        
    }
    cout << res;
    return 0;
}

ACWING5051 翻转

题目理解

找到不相等的位置,记录开头和结尾,然后中间的每一个都应该是对称的!比如 1 6 5 4 3 26 ~ 2全都是下标和错误的位置是对应的、对称的。然后打好标记,并且后面的不能再出现错误

代码实现

#include<iostream>
using namespace std;

const int N = 1010;
int a[N];

int n, l, r;

int main()
{
    cin >> n;

    for(int i = 1; i <= n; i++) cin >> a[i];

    int flag = 1, is_check = 0;

    for(int i = 1; i <= n; i++)
    {

        // 发现不相等
        if(i != a[i] && !is_check)
        {
            for(int j = i, k = a[i]; j < k; j++, k--)
                if(a[k] != j)
                    flag = 0;

            if(flag)
                l = i, r = a[i];

            i = a[i];
            is_check = 1;
            continue;
        }

        if(i != a[i] && is_check)
            flag = 0;
    }

    if(flag)
        cout << l << ' ' << r;
    else
        cout << "0 0";

    return 0;
}

ACWING5054 拼接字符串

题目理解

这个题目是完成了把大小写的字母都转化成了数字,然后就可以避免大小写的错误,都把它归到k - 96或者是k - 64。然后我们把原来的字符串也同样进行123、132、213、231、312、321把这六个都拍出来,然后枚举就行了。最近逼着自己用stl还很有用的。

代码实现

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;


string a, b, c;
vector<int> s1, s2, s3;
int n;
vector<vector<int>> stdd;

vector<int> init(string s)
{
    vector<int> p;

    for(int i = 0; i < s.length() ; i++)
        if(s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
        {
            if(s[i] - 96 > 0)
                p.push_back((int)s[i] - 96);
            else
                p.push_back((int)s[i] - 64);
        }


    return p;
}

vector<int> init_long(vector<int> a, vector<int> b, vector<int> c)
{
    vector<int> tmp;

    for(int i = 0; i < a.size(); i++)
        tmp.push_back(a[i]);

    for(int i = 0; i < b.size(); i++)
        tmp.push_back(b[i]);

    for(int i = 0; i < c.size(); i++)
        tmp.push_back(c[i]);

    return tmp;

}

int main()
{
    cin >> a >> b >> c;

    cin >> n;

    //初始化abc
    s1 = init(a);
    s2 = init(b);
    s3 = init(c);

    // 初始化stdd
    stdd.push_back(init_long(s1, s2, s3));
    stdd.push_back(init_long(s1, s3, s2));
    stdd.push_back(init_long(s2, s1, s3));
    stdd.push_back(init_long(s2, s3, s1));
    stdd.push_back(init_long(s3, s1, s2));
    stdd.push_back(init_long(s3, s2, s1));

    string p;
    while(n --)
    {
        cin >> p;

        vector<int> st = init(p);

        int flag = 0;
        for(int i = 0; i < 6; i++)
            if(st == stdd[i])
                flag = 1;

        if(flag)
            cout << "ACC" << endl;
        else
            cout << "WA" << endl;
    }

    return 0;
}

ACWING5057 截断数组

题目理解

把(两个数组 % 10)的和,尽可能大,那么就把前缀和求了,然后我们就可以快速的枚举一下了。因为就是前半部分求和 % 10 + 后半部分求和 % 10。

代码实现

#include<iostream>
using namespace std;

typedef long long ll;

const int N = 2e5 + 10;

ll s[N];
int n, p;

int main()
{
    cin >> n >> p;
    int k;
    for(int i = 1; i <= n; i++)
    {
        cin >> k;
        s[i] = s[i - 1] + k;
    }

    ll res = 0;
    for(int i = 1; i <= n; i++)
        res = max(res, (s[i] % p) + ((s[n] - s[i]) % p));

    cout << res;
    return 0;
}

ACWING5050 排序

题目理解

这个是第一题,比较简单。桶排思想.

代码实现

#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;

const int N = 210;
int a[N];

int main()
{
    int n;
    cin >> n;

    while(n -- )
    {

        int k;
        cin >> k;

        string s;
        cin >> s;

        memset(a, 0, sizeof a);

        for(int i = 0; i < s.size(); i++)
            a[(int)(s[i]) - 96 ]++;

        for(int i = 1; i <= 26; i++)
            for(int j = 1; j <= a[i]; j++)
                cout << (char)(i + 96);

        cout << endl;
    }

    return 0;
}
posted @ 2023-08-31 13:39  wxzcch  阅读(33)  评论(0)    收藏  举报