• Educational Codeforces Round 11


    DUANG: http://codeforces.com/contest/660

    A

    求让给定数组相邻元素互质所需要插入的数的个数并输出互质数组

    不互质的中间加个1

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 1111;
    ll num[maxn];
    ll gcd(ll a, ll b){
        if(b == 0) return a;
        return gcd(b, a%b);
    }
    int main(){
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i) scanf("%d", &num[i]);
        vector<int> k;
        for(int i = 1; i < n; ++i){
            if(gcd(num[i-1], num[i]) != 1){
                k.push_back(i);
            }
        }
        printf("%d
    ", k.size());
        int j = 0;
        for(int i = 0; i < n; ++i){
            if(j < k.size() && i == k[j]){
                printf("1 ");
                ++j;
            }
            printf("%d ", num[i]);
        }
        return 0;
    }

     B

    给定规则

    输入n行m人,按照规则坐好,再按照规则离开,输出离开顺序

    瞎搞

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 444;
    bool vis[maxn];
    int main(){
        int n, m;
        scanf("%d %d", &n, &m);
        int a = 2*n+1, b = 1, c = 2*n+2, d = 2;
        //printf("%d %d %d %d
    ", a, b, c, d);
        memset(vis, true, sizeof(vis));
        for(int i = 0; i < 100; ++i){
            if(a <= m && vis[a]){
                printf("%d ", a);
                vis[a] = false;
                a += 2;
            }
            if(b <= m && vis[b]){
                printf("%d ", b);
                vis[b] = false;
                b += 2;
            }
            if(c <= m && vis[c]){
                printf("%d ", c);
                vis[c] = false;
                c += 2;
            }
            if(d <= m && vis[d]){
                printf("%d ", d);
                vis[d] = false;
                d += 2;
            }
        }
        return 0;
    }

     C

    给你n个数和k个把0变成1的机会,求最多几个1并输出那种情况

    !!!maple师兄指点下撸出第一发尺取

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 333333;
    int num[maxn];
    
    int main(){
        int n, m;
        scanf("%d %d", &n, &m);
        for(int i = 0; i < n; ++i) scanf("%d", &num[i]);
        int l = 0, r = 0, ll = 0, rr = 0, ans = 0, tmp = 0, cnt = m;
        while(r < n){
            if(num[r]){
                tmp++;
                r++;
            }
            else{
                if(cnt){
                    r++;
                    cnt--;
                    tmp++;
                }
                else{
                    if(!num[l])
                        cnt++;
                    l++;
                    tmp--;
                }
            }
            if(tmp > ans){
                ans = tmp;
                ll = l;
                rr = r;
            }
        }
        printf("%d
    ", ans);
        for(int i = 0; i < ll; ++i) printf("%d ", num[i]);
        for(int i = ll; i < rr; ++i) printf("%d ", 1);
        for(int i = rr; i < n; ++i) printf("%d ", num[i]);
        return 0;
    }

    D

    给n个点求能组多少个平行四边形

    题解给的想法更新了一下我的大脑   yeah~

    两组能组成平行四边形的点的x坐标和相等、y坐标和相等

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 2222;
    int x[maxn], y[maxn];
    
    int main(){
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i) scanf("%d %d", &x[i], &y[i]);
        map<pair<int, int>, int> m;
        m.clear();
        for(int i = 0; i < n; ++i)
            for(int j = 0; j < i; ++j)
                m[{x[i]+x[j], y[i]+y[j]}]++;
        int ans = 0;
        for(auto& p : m)
            ans += p.second*(p.second-1)/2;
        printf("%d
    ", ans);
        return 0;
    }

     for(auto& p : m) 容器遍历新姿势?

    另一种想法: 能构成平行四边形的一定是两个相同的变量

    http://www.cnblogs.com/qscqesze/p/5373418.html

    E、F..........233333333

  • 相关阅读:
    Netbeans 注释模板配置
    你可能不知道的5 个强大的HTML5 API 函数
    科幻大片中那些牛X代码真相
    怎么才能成为一名PHP专家?
    网页设计中常见的错误列举
    五个必须警惕的数据库设计错误
    五种情况会导致Session 丢失
    四种策略防止用户将表单重复提交
    jQuery的deferred对象使用笔记
    [Web前端]由cookies安全说开去
  • 原文地址:https://www.cnblogs.com/book-book/p/5385260.html
Copyright © 2020-2023  润新知