zoukankan      html  css  js  c++  java
  • 2019 Multi-University Training Contest 10

    Valentine's Day

    #include <bits/stdc++.h>
     
    using namespace std;
    const int maxn=10100;
    double p[maxn];
    int n;
    bool cmp(double x, double y){
        return x>y;
    }
    int main() {
        int _;
        scanf("%d",&_);
        while (_--) {
            scanf("%d", &n);
            for (int i = 1; i <= n; i++) {
                scanf("%lf", &p[i]);
            }
            sort(p + 1, p + n + 1, cmp);
            double ans = p[1], tmp = (1 - p[1]);
            for (int i = 2; i <= n; i++) {
                double now = tmp * p[i] + ans * (1 - p[i]);
                if (now >= ans) {
                    ans = now;
                    tmp *= (1 - p[i]);
                }
            }
            printf("%.11lf
    ", ans);
        }
        return 0;
    }
    

    Welcome Party

    #include <bits/stdc++.h>
     
    using namespace std;
    const int maxn=1e5+10;
    typedef long long ll;
    const ll inf=0x3f3f3f3f3f3f3f3f;
    set<ll>s;
    set<ll>::iterator it;
    int n;
    ll suf[maxn];
    struct node {
        ll x, y;
     
        bool operator<(const node &b) const {
            return x < b.x;
        }
    }a[maxn];
     
    int main() {
        int _;
        scanf("%d", &_);
        while (_--) {
            s.clear();
            scanf("%d", &n);
            for (int i = 1; i <= n; i++) {
                scanf("%lld%lld", &a[i].x, &a[i].y);
            }
            sort(a + 1, a + n + 1);
            suf[n] = a[n].y;
            for (int i = n - 1; i >= 1; i--) {
                suf[i] = max(suf[i + 1], a[i].y);
            }
            ll ans = inf;
            for (int i = 1; i <= n; i++) {
                ll cur = inf, r=0;
                if (i < n) {
                    r = suf[i + 1];
                    cur = min(cur, abs(a[i].x - r));
                }
                it = s.lower_bound(a[i].x);
                if (it != s.end()) {
                    cur = min(cur, abs(max(r, (*it)) - a[i].x));
                }
                if (it != s.begin()) it--;
                cur = min(cur, abs(max(r, (*it)) - a[i].x));
                s.insert(a[i].y);
                ans = min(ans, cur);
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
    

    Make Rounddog Happy

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+10;
    int lg[maxn],n,st[maxn][21],k,a[maxn],vis[maxn],A[maxn],B[maxn];
    ll ans;
    int get(int l,int r){
        int k=lg[r-l+1];
        return a[st[l][k]]>=a[st[r-(1<<k)+1][k]]?st[l][k]:st[r-(1<<k)+1][k];
    }
    void solve(int l,int r) {
        if (l > r) return;
        int pos = get(l, r);
        if (pos - l < r - pos) {
            for (int i = l; i <= pos; i++) {
                int t = a[pos] - k, lr = i + t - 1;
                int kk = min(r, B[i]);
                lr = max(lr, pos);
                if (lr > kk) continue;
                ans += kk - lr + 1;
            }
        } else {
            for (int i = pos; i <= r; i++) {
                int t = a[pos] - k, rl = i - t + 1;
                int kk = max(l, A[i]);
                rl = min(rl, pos);
                if (rl < kk) continue;
                ans += rl - kk + 1;
            }
        }
        solve(l, pos - 1);
        solve(pos + 1, r);
    }
    
    int main() {
        int _;
        lg[0] = -1;
        for (int i = 1; i < maxn; i++) lg[i] = lg[i >> 1] + 1;
        scanf("%d", &_);
        while (_--) {
            scanf("%d%d", &n, &k);
            ans = 0;
            for (int i = 1; i <= n; i++) {
                st[i][0] = i;
                scanf("%d", &a[i]);
            }
            for (int i = 1; i <= 20; i++) {
                for (int j = 1; j <= n + 1 - (1 << i); j++) {
                    st[j][i] =
                            a[st[j][i - 1]] > a[st[j + (1 << (i - 1))][i - 1]] ? st[j][i - 1] : st[j + (1 << (i - 1))][i - 1];
                }
            }
            for (int i = 1; i <= n; i++)
                vis[i] = 0;
            A[1] = 1;
            vis[a[1]] = 1;
            for (int i = 2; i <= n; i++) {
                if (vis[a[i]]) A[i] = max(A[i - 1], vis[a[i]] + 1);
                else A[i] = A[i - 1];
                vis[a[i]] = i;
            }
            for (int i = 1; i <= n; i++)
                vis[i] = 0;
            B[n] = n;
            vis[a[n]] = n;
            for (int i = n - 1; i >= 1; i--) {
                if (vis[a[i]]) B[i] = min(B[i + 1], vis[a[i]] - 1);
                else B[i] = B[i + 1];
                vis[a[i]] = i;
            }
            solve(1, n);
            printf("%lld
    ", ans);
        }
        return 0;
    }
    

    Block Breaker

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=2010;
    int a[maxn][maxn],n,m,q;
    bool check(int x,int y) {
        int cnt1 = 0, cnt2 = 0;
        if (a[x + 1][y] == 0 || a[x - 1][y] == 0) cnt1 = 1;
        if (a[x][y + 1] == 0 || a[x][y - 1] == 0) cnt2 = 1;
        if (cnt1 && cnt2)
            return 1;
        return 0;
    }
    int dx[4]={0,1,0,-1};
    int dy[4]={1,0,-1,0};
    int ans=0;
    void dfs(int x,int y) {
        for (int i = 0; i < 4; i++) {
            int xx = x + dx[i], yy = y + dy[i];
            if (xx <= 0 || xx > n || yy <= 0 || yy > m)
                continue;
            if (a[xx][yy] == 0) continue;
            if (check(xx, yy)) {
                a[xx][yy] = 0;
                ans++;
                dfs(xx, yy);
            }
        }
    }
    int main() {
        int _;
        scanf("%d", &_);
        while (_--) {
            scanf("%d%d%d", &n, &m, &q);
            for (int i = 0; i <= n + 1; i++) {
                for (int j = 0; j <= m + 1; j++) {
                    a[i][j] = 1;
                }
            }
            while (q--) {
                ans=0;
                int x,y;
                scanf("%d%d", &x, &y);
                if (a[x][y] == 0) {
                    printf("0
    ");
                    continue;
                }
                a[x][y] = 0;
                ans++;
                dfs(x, y);
                printf("%d
    ", ans);
            }
        }
    }
    
  • 相关阅读:
    阅读prettytable 一些代码、get、set 检查参数
    python 库 PrettyTabble 使用与错误
    python 内建模块与第三方模块
    python 排序 堆排序
    python 排序 桶排序
    python 排序冒泡排序与双向冒泡排序
    python 函数式编程 闭包,返回一个函数
    python 排序 选择排序
    python 排序 归并排序
    python 排序 插入排序与希尔排序
  • 原文地址:https://www.cnblogs.com/Accpted/p/11390703.html
Copyright © 2011-2022 走看看