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\n", 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\n", 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;
}

  

posted @ 2016-08-12 21:06  NEVERSTOPAC  阅读(154)  评论(0编辑  收藏  举报