• 2016 Multi-University Training Contest 8


    solved 4/11

    2016 Multi-University Training Contest 8

    贪心 1001 Ball(BH)

    代码:

    #include <bits/stdc++.h>
    
    const int N = 1000 + 5;
    std::pair<int, int> a[N];
    int n, m;
    
    int main() {
        int T;
        scanf ("%d", &T);
        while (T--) {
            scanf ("%d%d", &n, &m);
            for (int i=1; i<=n; ++i) {
                int c;
                scanf ("%d", &c);
                a[i] = {0, c};
            }
            for (int i=1; i<=n; ++i) {
                int c;
                scanf ("%d", &c);
                for (int j=1; j<=n; ++j) {
                    if (a[j].second == c && !a[j].first) {
                        a[j].first = i;
                        break;
                    }
                }
            }
            while (m--) {
                int l, r;
                scanf ("%d%d", &l, &r);
                std::sort (a+l, a+r+1);
            }
            bool flag = true;
            for (int i=1; i<=n; ++i) {
                if (a[i].first != i) {
                    flag = false;
                    break;
                }
            }
            puts (flag ? "Yes" : "No");
        }
        return 0;
    }

    物理+微分方程 1006 physics(BH)

    代码:

    #include <bits/stdc++.h>
    
    int v[100005];
    
    int main() {
        int T;
        scanf ("%d", &T);
        while (T--) {
            int n, c;
            scanf ("%d%d", &n, &c);
            for (int i=1; i<=n; ++i) {
                int x, d;
                scanf ("%d%d%d", v+i, &x, &d);
            }
            std::sort (v+1, v+1+n);
            int m;
            scanf ("%d", &m);
            while (m--) {
                int t, k;
                scanf ("%d%d", &t, &k);
                printf ("%.3f
    ", sqrt ((double) v[k]*v[k] + 2.0*c*t));
            }
        }
        return 0;
    }

    线段树+优化 1008 Rikka with Sequence(BH)

    代码:(数据加强后TLE)

    #include <bits/stdc++.h>
    
    typedef long long ll;
    const int N = 1e5 + 5;
    
    #define lch o << 1
    #define rch o << 1 | 1
    
    ll sum[N<<2], same[N<<2], add[N<<2];
    
    void push_up(int o) {
        if (same[lch] == same[rch])
            same[o] = same[lch];
        else
            same[o] = 0;
        sum[o] = sum[lch] + sum[rch];
    }
    
    void push_down1(int o, int l, int r) {
        add[lch] += add[o];
        add[rch] += add[o];
        int mid = l + r >> 1;
        sum[lch] += add[o] * (mid-l+1);
        sum[rch] += add[o] * (r-mid);
        if (same[lch])
            same[lch] += add[o];
        if (same[rch])
            same[rch] += add[o];
        add[o] = 0;
    }
    
    void push_down2(int o, int l, int r) {
        same[lch] = same[rch] = same[o];
        int mid = l + r >> 1;
        sum[lch] = same[o] * (mid-l+1);
        sum[rch] = same[o] * (r-mid);
        same[o] = 0;
    }
    
    void build(int o, int l, int r) {
        add[o] = 0;
        if (l == r) {
            scanf ("%I64d", &sum[o]);
            same[o] = sum[o];
            return ;
        }
        int mid = l + r >> 1;
        build (lch, l, mid);
        build (rch, mid+1, r);
        push_up (o);
    }
    
    void modify_add(int o, int l, int r, int ql, int qr, int c) {
        if (ql <= l && r <= qr) {
            sum[o] += (ll) (r - l + 1) * c;
            if (same[o])
                same[o] += c;
            else
                add[o] += c;
            return ;
        }
        if (add[o])
            push_down1 (o, l, r);
        if (same[o])
            push_down2 (o, l, r);
        int mid = l + r >> 1;
        if (ql <= mid)
            modify_add (lch, l, mid, ql, qr, c);
        if (qr > mid)
            modify_add (rch, mid+1, r, ql, qr, c);
        push_up (o);
    }
    
    void modify_sqrt(int o, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr && same[o]) {
            same[o] = (ll) sqrt ((double) same[o]);
            sum[o] = same[o] * (r - l + 1);
            add[o] = 0;
            return ;
        }
        if (add[o])
            push_down1 (o, l, r);
        if (same[o])
            push_down2 (o, l, r);
        int mid = l + r >> 1;
        if (ql <= mid)
            modify_sqrt (lch, l, mid, ql, qr);
        if (qr > mid)
            modify_sqrt (rch, mid+1, r, ql, qr);
        push_up (o);
    }
    
    ll query(int o, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr) {
            return sum[o];
        }
        if (add[o])
            push_down1 (o, l, r);
        if (same[o])
            push_down2 (o, l, r);
        int mid = l + r >> 1;
        ll ret = 0;
        if (ql <= mid)
            ret += query (lch, l, mid, ql, qr);
        if (qr > mid)
            ret += query (rch, mid+1, r, ql, qr);
        return ret;
    }
    
    int main() {
        int T;
        scanf ("%d", &T);
        while (T--) {
            int n, m;
            scanf ("%d%d", &n, &m);
            build (1, 1, n);
            int tp, ql, qr, c;
            while (m--) {
                scanf ("%d%d%d", &tp, &ql, &qr);
                if (tp == 1) {
                    scanf ("%d", &c);
                    modify_add (1, 1, n, ql, qr, c);
                } else if (tp == 2) {
                    modify_sqrt (1, 1, n, ql, qr);
                } else {
                    printf ("%I64d
    ", query (1, 1, n, ql, qr));
                }
            }
        }
        return 0;
    }

    构造 1011 Rikka with Parenthesis II(BH)

    代码:

    #include <bits/stdc++.h>
    
    const int N = 1e5 + 5;
    char str[N];
    int n;
    
    bool check() {
        if (n & 1)
            return false;
    
        if (n == 2) {
            if (strcmp (str, ")(") != 0)
                return false;
        }
    
        int l = 0, r = 0;
        for (int i=0; i<n; ++i) {
            if (str[i] == '(')
                l++;
            else
                r++;
        }
        return l == r;
    }
    
    int main() {
        //freopen ("1011.txt", "r", stdin);
        int T;
        scanf ("%d", &T);
        while (T--) {
            scanf ("%d", &n);
            scanf ("%s", str);
    
            //printf ("%s ", str);
            
            if (!check ()) {
                puts ("No");
                continue;
            }
            
            int top = 0, error = 0, id = -1;
            for (int i=0; i<n; ++i) {
                if (str[i] == '(') {
                    top++;
                } else {
                    if (top == 0) {
                        error++;
                        id = i;
                        break;
                    }
                    else
                        top--;
                }
            }
    
            if (!error) {
                puts (top == 0 ? "Yes" : "No");
            } else {
                str[id] = '(';
                top = error = 0;
                for (int i=0; i<n; ++i) {
                    if (str[i] == '(') {
                        top++;
                    } else {
                        if (top == 0) {
                            error++;
                            break;
                        }
                        top--;
                    }
                }
                puts (((!error && top == 2) ? "Yes" : "No"));
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/NEVERSTOPAC/p/5766563.html
Copyright © 2020-2023  润新知