Educational Codeforces Round 123 (Rated for Div. 2)

A. Doors and Keys

思路:判断三把钥匙是否有一把在对应的门之后才出现,有就是NO,没有就是YES

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 1010;

int a[N], b[N];

int main()
{
    int T;
    cin >> T;
    while(T -- )
    {
        string s;
        cin >> s;
        int r = 0, g = 0, b = 0;
        bool flag = true;
        for (int i = 0; i < 6; i ++ )
        {
            if(s[i] == 'R' && r == 0 || s[i] == 'G' && g == 0 || s[i] == 'B' && b == 0)
            {
                flag = false;
                break;
            }
            if(s[i] == 'r')
                r++;
            if(s[i] == 'g')
                g++;
            if(s[i] == 'b')
                b++;
        }

        if(flag)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }

    return 0;
}

B. Anti-Fibonacci Permutation

思路:根据样例分析,构造是从2开始,依次输出到n,然后再从前往后输出剩下的数,最后输出1。一种特殊情况是,先输出1和n,然后依次输出剩下的数

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 1010;

int a[N], b[N];

int main()
{
    int T;
    cin >> T;
    while(T -- )
    {
        int n;
        cin >> n;
        for (int i = 2; i <= n; i ++ )
        {
            for (int j = i; j <= n; j ++ )
                cout << j << ' ';
            for (int j = 2; j <= i - 1; j ++ )
                cout << j << ' ';
            cout << 1 << endl;
        }
        cout << 1 << ' ' << n << ' ';
        for (int i = 2; i <= n - 1; i ++ )
            cout << i << ' ';
        cout << endl;
    }

    return 0;
}

C. Increase Subarray Sums

思路:遍历kk.然后循环访问将具有最大总和的段。让它的长度ll.因为xx是非负的,增加段内的元素始终是最佳的。因此,如果klk≤l,则段的总和增加kxk⋅x.否则,只有段内的元素会影响总和,因此,它将增加lxl⋅x.这可以写成min(k,l)⋅xmin(k,l)⋅x.

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 1010;

int a[N], b[N];

int main()
{
    int T;
    cin >> T;
    while(T -- )
    {
        int n;
        LL x;
        cin >> n >> x;
        LL a[n + 1] = {}, mx[n + 1] = {}, sum, ans;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            mx[i] = -0x3f3f3f3f;
        }
        for (int i = 1; i <= n; i++)
        {
            sum = 0;
            for (int j = i; j <= n; j++)
            {
                sum += a[j];
                mx[j - i + 1] = max(mx[j - i + 1], sum);
            }
        }
        for (int k = 0; k <= n; k++)
        {
            ans = 0;
            for (int i = 1; i <= n; i++)
            {
                ans = max(ans, mx[i] + min(k, i) * x);
            }
            cout << ans << " ";
        }
        cout << endl;
    }

    return 0;
}

 

posted @ 2022-02-26 10:32  彦辰kkkkk  阅读(50)  评论(0)    收藏  举报