zoukankan      html  css  js  c++  java
  • 牛客多校第三场补题

    A-Clam and Fish
    思维模拟

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    #define ll long long
    #define fastio ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    using namespace std;
    double pi = acos(-1);
    const double eps = 1e-9;
    const int inf = 1e9 + 7;
    const int maxn = 5005;
    
    int main()
    {
        fastio;
        int t;
        cin >> t;
        while (t--)
        {
            int n;
            cin >> n;
            string s;
            cin >> s;
            int ans = 0, clam = 0, p = 1;
            s = '0' + s;
            for (int i = 1; i <= n; i++)
            {
                if (s[i] == '2' || s[i] == '3')ans++;
                else if (s[i] == '0' && clam)ans++, clam--;
                else if (s[i] == '1')
                {
                    int j = max(i + 1, p);
                    for (; j <= n; j++)
                    {
                        if (s[j] == '0')
                        {
                            s[j] = '2';
                            p = j + 1;
                            break;
                        }
                    }
                    if (j > n)
                    {
                        if (clam)
                            clam--, ans++;
                        else
                            clam++;
                        p = n + 1;
                    }
                }
            }
            cout << ans << endl;
        }
        return 0;
     
    }
    


    B-Classical String Problem
    思维模拟

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    #define ll long long
    #define fastio ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    using namespace std;
    double pi = acos(-1);
    const double eps = 1e-9;
    const int inf = 1e9 + 7;
    const int maxn = 5005;
     
    int read()
    {
        int x = 0, f = 1;
        char c = getchar();
        while (c < '0' || c>'9') { if (c == '-') f = -1; c = getchar(); }
        while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', c = getchar();
        return f * x;
    }
     
     
    int main()
    {
        fastio;
        string s;
        cin >> s;
        int t;
        cin >> t;
        int tmp = 0;
        int len = s.length();
        while (t--)
        {
            char o;
            int x;
            cin >> o >> x;
            if (o == 'M')
                tmp += x;
            else
            {
                if (tmp == 0)
                    cout << s[x - 1] << endl;
                else if (tmp > 0)
                    cout << s[(x + tmp - 1) % len] << endl;
                else
                    cout << s[((len + tmp + x - 1) % len + len) % len] << endl;
            }
        }
        return 0;
     
    }
    


    E-Two Matchings

    贪心 DP ,打的时候真不知道这是个dp

    这样我们就能以4和6一组作为状态进行dp了,最终状态肯定能被拆成数个4+数个6,否则不优

    (解释:组与组之间断裂,dp寻找的就是在哪里断裂最优,然后组之间的每个差值只被计入2次答案是下界(最优),无法找到更优的连法)

    状态转移方程: (dp[i] = min(dp[i], dp[i - 4] + 2 * (a[i] - a[i - 3])))
    (dp[i] = min(dp[i], dp[i - 6] + 2 * (a[i] - a[i - 5]))|i >= 6)

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    #define ll long long
    #define fastio ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    using namespace std;
    double pi = acos(-1);
    const double eps = 1e-12;
    const int inf = 1e17 + 7;
    const int maxn = 1e5 + 10;
     
    int read()
    {
        int x = 0, f = 1;
        char c = getchar();
        while (c < '0' || c>'9') { if (c == '-') f = -1; c = getchar(); }
        while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', c = getchar();
        return f * x;
    }
     
    ll dp[maxn];
     
    int main()
    {
        fastio;
        int t;
        cin >> t;
        while (t--)
        {
            int n;
            cin >> n;
            vector<ll>a(n + 1), dp(n + 1, inf);
            for (int i = 1; i <= n; i++)
                cin >> a[i];
            sort(a.begin() + 1, a.end());
            dp[0] = 0;
            for (int i = 4; i <= n; i++)
            {
                dp[i] = min(dp[i], dp[i - 4] + 2 * (a[i] - a[i - 3]));//容斥
                if (i >= 6)dp[i] = min(dp[i], dp[i - 6] + 2 * (a[i] - a[i - 5]));
            }
            cout << dp[n] << endl;
        }
        return 0;
     
    }
    

    F-Fraction Construction Problem

    构造 EXGCD 不定方程

    打的时候写了个EXGCD解了下ab不互素的不定方程,然后发现不太会整其他的情况,又去想了个sb的错误做法,我只能爬

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    #define ll long long
    #define fastio ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    using namespace std;
    double pi = acos(-1);
    const double eps = 1e-12;
    const int maxn = 2e6 + 10;
    const int inf = 1e9;
    int read()
    {
        int x = 0, f = 1;
        char c = getchar();
        while (c < '0' || c>'9') { if (c == '-') f = -1; c = getchar(); }
        while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', c = getchar();
        return f * x;
    }
    ll x, y;
    
    ll v[maxn], p[maxn], cnt;
    
    void init_e()
    {
        memset(v, 0, sizeof(v));
        cnt = 0;
    }
    
    void Euler_sieve(int n)
    {
        //init_e();
        cnt = 0;
        for (int i = 2; i <= n; i++) {
            if (v[i] == 0) { v[i] = i; p[++cnt] = i; }
            for (int j = 1; j <= cnt; j++)
            {
                if (p[j] > v[i] || p[j] > n / i)break;
                v[i * p[j]] = p[j];
            }
        }
    }
    
    ll exgcd(ll a, ll b, ll& x, ll& y)
    {
        if (!b)
        {
            x = 1;
            return a;
        }
        ll d = exgcd(b, a % b, y, x);
        y -= a / b * x;
        return d;
    }
    
    int gcd(int a, int b)
    {
        while (b)
        {
            ll tmp = b;
            b = a % b;
            a = tmp;
        }
        return a;
    }
    
    
    int main()
    {
        fastio;
        int t;
        cin >> t;
        Euler_sieve(2e6 + 5);
        while (t--)
        {
            x = y = 0;
            ll a, b;
            cin >> a >> b;
            ll g = gcd(a, b);
            if (g != 1)
            {
                cout << a / g + 1 << " " << b / g << " " << 1 << " " << b / g << endl;
                continue;
            }
            g = 1;
            if (b == 1 || v[b] == b) {
                cout << -1 << " " << -1 << " " << -1 << " " << -1 << endl;
                continue;
            }
            ll k = v[b];
            while (b % k == 0)
                b /= k, g *= k;
            if (b == 1) {
                cout << -1 << " " << -1 << " " << -1 << " " << -1 << endl;
                continue;
            }
            //cout << p << " " << b << endl;
            exgcd(b, g, x, y);
            if (x > 0)
                cout << x * a << " " << g << " " << -y * a << " " << b << endl;
            else
                cout << y * a << " " << b << " " << -x * a << " " << g << endl;
        }
        return 0;
    
    }
    

    最后!!!画了一万年也没有画完的线稿来了,什么时候才能有时间画完啊QAQ

  • 相关阅读:
    ExtAspNet新版本发布v2.0beta4
    自己实现Rich Text Editor
    ExtAspNet应用技巧(五) 动态创建工具栏菜单
    IronPython的Hello World
    关于“跨语言调用”和“CLS(公共语言规范)”的一点体会
    文档,又是文档
    对项目目标的一点想法
    推荐一个WMI的查询分析器
    几个很不错的.NET 相关的FAQ和例子代码的连接
    用IronPython写winform程序
  • 原文地址:https://www.cnblogs.com/ruanbaiQAQ/p/13368094.html
Copyright © 2011-2022 走看看