zoukankan      html  css  js  c++  java
  • Codeforces 911 三循环数覆盖问题 逆序对数结论题 栈操作模拟

     A

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 0x3f3f3f3f
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int num[100005];
    int main()
    {
        vector<int> ans;
        int minn=2e9;
        int n;
        cin >> n;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            minn=min(minn,num[i]);
        }
        for(int i=1;i<=n;i++)
        {
            if(num[i]==minn)
            {
            ans.push_back(i);
            }
        }
        int anser=1e9;
        for(int i=0;i<ans.size()-1;i++)
        {
            anser=min(anser,ans[i+1]-ans[i]);
        }
        cout<<anser<<endl;
    }
    View Code

    B

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 0x3f3f3f3f
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int num[100005];
    int main()
    {
        int n,a,b;
        cin >> n >> a >> b;
        for(int i=min(a,b);;i--)
        {
            if(a/i+b/i>=n)
            {
                cout<<i<<endl;
                return 0;
            }
        }
    }
    View Code

    C

    我们知道当三个里面的最小值都大于三的时候肯定不行 当有一个为1的时候肯定行 当2的个数不小于两个的时候肯定行 三个全为3也肯定行 

    剩下的就是 244这种情况

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 0x3f3f3f3f
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int num[1505];
    int main()
    {
            int a, b, c;
            cin >> a >> b >> c;
            num[a]++, num[b]++, num[c]++;
            if (min(min(a, b), c) == 1)
            {
                    cout << "YES" << endl;
                    return 0;
            }
            if (num[2] == 1 && num[4] == 2)
            {
                    cout << "YES" << endl;
                    return 0;
            }
            if (num[2] >= 2 || num[3] == 3)
            {
                    cout << "YES" << endl;
                    return 0;
            }
            cout << "NO" << endl;
    }
    View Code

    D

    假设一个区间内的逆序对数为N 区间为L-R 则不为逆序对的数翻转之后会变成逆序对 本为逆序对的翻转之后变成正常 而1-L -1 R+1-N的逆序对并不会受到影响

    所以最终的答案就是SUM-N+(R-L+1)*(R-L)/2-N=SUM+(R-L+1)*(R-L)/2-2*N 因为2*N肯定是偶数 减去不影响答案的奇偶性 所以只要判断(R-L+1)*(R-L)/2是奇数还是偶数就行

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 0x3f3f3f3f
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int num[1505];
    int c[1505][1505];
    int dp[1505][1505];
    ll sum = 0;
    int main()
    {
            int n;
            cin >> n;
            for (int i = 1; i <= n; i++)
            {
                    scanf("%d", &num[i]);
            }
            for (int i = 1; i <= n; i++)
            {
                    for (int j = num[i] - 1; j >= 1; j--)
                    {
                            c[i][j]++;
                    }
            }
            for (int i = 1; i <= n; i++)
            {
                    for (int j = 1; j <= n; j++)
                    {
                            c[j][i] += c[j - 1][i];
                    }
            }
            for (int i = 1; i <= n; i++)
            {
                    sum += c[i - 1][num[i]];
            }
            int flag;
            if(sum%2)
        flag=1;
        else
        flag=0;
            int q;
            cin >> q;
            while (q--)
            {
                    int l,r;
                    cin >> l >> r;
                    if(((r-l+1)*(r-l)/2)%2)
            flag^=1;
            if(flag)
            cout<<"odd"<<endl;
            else
            cout<<"even"<<endl;
            }
    }
    View Code

    E

    #include <bits/stdc++.h>
    
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 0x3f3f3f3f
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int anser[200005];
    int num[200005];
    int visit[200005];
    stack<int> sta;
    vector<int> ans;
    int main()
    {
            int cur = 1;
            int n, m;
            cin >> n >> m;
            for (int i = 1; i <= m; i++)
            {
                    cin >> num[i];
                    anser[i] = num[i];
                    visit[num[i]] = 1;
                    sta.push(num[i]);
                    while (sta.size() && cur == sta.top())
                    {
                            sta.pop();
                            cur++;
                    }
            }
            int now;
            while (cur <= n || (!sta.empty() && sta.top() > cur))
            {
                    if (sta.size())
                    {
                            now = sta.top();
                    }
                    else
                    {
                            now = n + 1;
                    }
                    for (int i = now - 1; i >= cur; i--)
                    {
                            if (visit[i])
                            {
                                    cout << -1 << endl;
                                    return 0;
                            }
                            else
                            {
                                    anser[++m] = i;
                                    sta.push(i);
                                    visit[i] = 1;
                            }
                    }
                    while (sta.size() && cur == sta.top())
                    {
                            sta.pop();
                            cur++;
                    }
            }
            if (sta.size())
            {
                    cout << -1 << endl;
                    return 0;
            }
            for (int i = 1; i <= n; i++)
            {
                    cout << anser[i] << " ";
            }
            cout << endl;
    }
    View Code
  • 相关阅读:
    数组模拟队列实现
    Vue之模板语法
    初识Vue之helloworld
    二、Lambda表达式
    一、函数式编程
    SpringCloudAlibaba之Nacos
    SpringCloudAlibaba之Sentinel
    spring的随笔2
    spring的小想法1
    关于hibernate的一些看法
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8807124.html
Copyright © 2011-2022 走看看