《看了受制了》第四天,6道题,合计22道题
2023年8月29日
今天是小白赛和ACWing周赛,哎总是那样,难题根本不会,简单题非常简单。。。
牛客小白月赛75期 上班
题目理解
就是输出,x + y和x + 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 2从6 ~ 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;
}

                
            
        
浙公网安备 33010602011771号