zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 25

    Educational Codeforces Round 25

    A.Binary Protocol

    题意分析

    给出一种新的表示数字的方法,根据1和0来表示。首先是一个数字n,表示01串的长度。接下来是一个n个数的01串。
    表示的规则
    1. 开头一定是1
    2. 0表示分隔
    3. 0分隔的区间内,1的个数就是这一位的数
    4. 保证数字一定合法

    代码总览

    #include <bits/stdc++.h>
    #define nmax 100
    using namespace std;
    char str[nmax];
    int main()
    {
        int n;
        scanf("%d",&n);
        char t;
        getchar();
        int num = 0;
        while(n--){
            scanf("%c",&t);
            if(t == '1'){
                num++;
            }else{
                printf("%d",num);
                num = 0;
            }
        }
            printf("%d
    ",num);
        return 0;
    }

    B. Five-In-a-Row

    题意分析

    检查当前棋盘是否保证下一步X能获胜即可。感觉没有什么简单的方法,写了个大模拟。

    代码总览

    #include <bits/stdc++.h>
    #define nmax 11
    using namespace std;
    char mp[nmax][nmax];
    bool iswin = false;
    char block[6];
    bool check()
    {
        int numofX = 0 ,numofPoint = 0;
        for(int i= 0;i<=4;++i){
            if(block[i] == 'X') numofX++;
            if(block[i] == '.') numofPoint++;
        }
        if(numofX == 4 && numofPoint == 1)return true;
        else return false;
    }
    bool check_row()
    {
        for(int i = 0;i<10;++i){
            for(int j = 0;j<=5;++j){
                for(int k = 0;k<=4;++k){
                    block[k] = mp[i][j+k];
                }
                block[5] = '';
                if(check()) return true;
            }
        }
        return false;
    }
    bool check_line()
    {
        for(int i = 0;i<10;++i){
            for(int j = 0;j<=5;++j){
                for(int k = 0;k<=4;++k){
                    block[k] = mp[j+k][i] ;
                }
                block[5] = '';
                if(check()) return true;
            }
        }
        return false;
    }
    bool check_cross()
    {
        for(int i = 0; i<=5;++i){
            for(int j = i;j<=5;++j){
                for(int k = 0;k<5;++k){
                   block[k]  = mp[j+k][j-i+k] ;
                }
                block[5] = '';
                if( check()) return true;
            }
        }
        for(int i = 0; i<=5;++i){
            for(int j = i;j<=5;++j){
                for(int k = 0;k<5;++k){
                     block[k] = mp[j-i+k][j+k] ;
                }
                block[5] = '';
                if(check()) return true;
            }
        }
        return false;
    }
    bool check_anticross()
    {
        for(int i = 0; i<=5;++i){
            for(int j = i;j<=5;++j){
                for(int k = 0;k<5;++k){
                     block[k] = mp[j+k][9-(j-i+k)] ;
                }
                block[5] = '';
                if(check()) return true;
            }
        }
        for(int i = 0; i<=5;++i){
            for(int j = i;j<=5;++j){
                for(int k = 0;k<5;++k){
                    block[k] = mp[9-(j+k)][j-i+k];
                }
                block[5] = '';
                if(check()) return true;
            }
        }
        return false;
    }
    int main()
    {
        for(int i = 0;i<10;++i)  scanf("%s",mp[i]);
        iswin = check_row();
        if(!iswin)  iswin = check_line();
        if(!iswin)  iswin  = check_cross();
        if(!iswin)  iswin = check_anticross();
        if(iswin == true) printf("YES
    ");
        else printf("NO
    ");
        return 0;
    }
    

    C. Multi-judge Solving

    题意分析

    有个人想在AOJ上做题,每个题目有一个难度系数,现在这个人打算在AOJ上做n道题,这个人目前做出来的最高系数难度的题目是k,并且我们知道,对于难度系数为ai的题目,如果他已经做出来一道题d,且有2*d>=ai,他就能做出来ai这道题,否则的话,他就需要去BOJ上找一道题来做,使得他能做ai这道题。请问他至少要到BOJ上做几道题,才能全部做完n道题。

    先对难度系数排序,然后O(n)扫描,如果能做就做,并且更新目前最高的难度。如果不能做,就去BOJ找一道题做,并且更新难度系数。输出最后找的题目数量即可。

    代码总览

        #include <bits/stdc++.h>
        #define nmax 1005
        using namespace std;
        int a[nmax];
        int main()
        {
            int n,k;
            scanf("%d %d",&n,&k);
            for(int i = 1;i<=n;++i){
                scanf("%d",&a[i]);
            }
            sort(a+1,a+n+1);
            int ans = 0;
            int nowmax = k;
            for(int i = 1;i<=n;++i){
                if(a[i] <= nowmax*2){
                    if(a[i] >= nowmax){
                        nowmax = a[i];
                    }
                }else{
                    while(nowmax*2 < a[i]){
                        nowmax*=2;
                        ans++;
                    }
                    if(a[i] >= nowmax){
                        nowmax = a[i];
                    }
                }
            }
            printf("%d
    ",ans);
            return 0;
        }
    

    D. Suitable Replacement

    题意分析

    有点乱

    代码总览

    #include <bits/stdc++.h>
    #define fr first
    #define sc scanf
    #define pf printf
    #define se second
    #define ll long long
    #define pb push_back
    #define pr pair< int,int >
    #define fin(s) freopen( s, "r", stdin )
    #define fout(s) freopen( s, "w", stdout )
    #define TIME ios_base::sync_with_stdio(0)
    using namespace std;
    
    const ll INF = 1e9;
    const ll N = 1e3 + 1;
    const ll mod = 1e7 + 9;
    const long double eps = 1E-7;
    
    bool flag;
    int l[26];
    string a, b;
    vector<int>V;
    int main()
    {
        TIME;
        cin >> a >> b;
        for( int i = 0; i < a.size(); i ++ )
        {
            if( a[i] == '?' )
                V.pb( i );
            else
                l[a[i]-'a'] ++;
        }
        while( !flag )
        {
            for( int i = 0; i < b.size(); i ++ )
            {
                if( l[b[i]-'a'] )
                    l[b[i]-'a'] --;
                else
                {
                    if( V.empty() )
                        flag = 1;
                    else
                        a[V.back()] = b[i],
                        V.pop_back();
                }
            }
        }
        cout << a << endl;
    }
  • 相关阅读:
    Linux防火墙白名单设置
    postgre级联更新
    postgre查询表和记录数,查表字段
    PostgreSQL中的 时间格式转化常识
    android 阿里云oss上传
    android studio connot resolve
    Mysql 优化,慢查询
    Docker 容器更新,打包,上传到阿里云
    Mysql 替换字段的一部分内容
    Docker 安装Nginx
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367064.html
Copyright © 2011-2022 走看看