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

    A,连续的1的个数就是每个位置上的数,注意0的处理,最后一个0不用删除

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100+10,maxn=500+100,inf=0x3f3f3f;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        string s;
        cin>>n>>s;
        int i=0;
        while(i<s.size()){
            int j=i;
            while(j<s.size()&&s[j]=='1')j++;
            cout<<j-i;
            i=j;
            while(j<s.size()&&s[j]=='0')j++;
            int p=j-i;
            if(j!=s.size())p--;
            if(p>0)
            {
                while(p--)cout<<"0";
            }
            i=j;
          //  cout<<i<<endl;
        }
        cout<<endl;
        return 0;
    }
    /********************
    
    ********************/
    A

    B,放一个点能有连续5个x,直接暴力

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100+10,maxn=500+100,inf=0x3f3f3f;
    
    char ma[N][N];
    bool ok(int x,int y)
    {
        if(x<=6)
        {
            int a=0,b=0;
            for(int i=0;i<5;i++)
            {
                if(ma[x+i][y]=='X')a++;
                else if(ma[x+i][y]=='O')b++;
            }
            if(b==0&&a>=4)return 1;
        }
        if(y<=6)
        {
            int a=0,b=0;
            for(int i=0;i<5;i++)
            {
                if(ma[x][y+i]=='X')a++;
                else if(ma[x][y+i]=='O')b++;
            }
            if(b==0&&a>=4)return 1;
        }
        if(x<=6&&y<=6)
        {
            int a=0,b=0;
            for(int i=0;i<5;i++)
            {
                if(ma[x+i][y+i]=='X')a++;
                else if(ma[x+i][y+i]=='O')b++;
            }
            if(b==0&&a>=4)return 1;
        }
        if(x>=4&&y<=6)
        {
            int a=0,b=0;
            for(int i=0;i<5;i++)
            {
                if(ma[x-i][y+i]=='X')a++;
                else if(ma[x-i][y+i]=='O')b++;
            }
            if(b==0&&a>=4)return 1;
        }
        return 0;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        for(int i=1;i<=10;i++)
            for(int j=1;j<=10;j++)
                cin>>ma[i][j];
        for(int i=1;i<=10;i++)
        {
            for(int j=1;j<=10;j++)
            {
                if(ok(i,j))
                {
                   // cout<<i<<" "<<j<<endl;
                    cout<<"YES"<<endl;
                    return 0;
                }
            }
        }
        cout<<"NO"<<endl;
        return 0;
    }
    /********************
    XXOXX.....
    OOXOO.....
    ....XX....
    ....OO....
    ...XOOX...
    ..XO..OX..
    OX......XO
    XO..XX..OX
    ....OO....
    ..........
    ********************/
    B

    C,模拟

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=1000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll a[N];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll n,k;
        cin>>n>>k;
        for(int i=0;i<n;i++)cin>>a[i];
        sort(a,a+n);
        ll ans=0;
        for(int i=0;i<n;i++)
        {
            if(a[i]<=k)continue;
            else if(k<a[i]&&a[i]<=2*k)k=a[i];
            else
            {
                while(2*k<a[i])k*=2,ans++;
                k=a[i];
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    /********************
    2 1
    3 6
    ********************/
    C

    D、二分倍数,用一个容器存答案,然后输出即可

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=1000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll a[N];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll n,k;
        cin>>n>>k;
        for(int i=0;i<n;i++)cin>>a[i];
        sort(a,a+n);
        ll ans=0;
        for(int i=0;i<n;i++)
        {
            if(a[i]<=k)continue;
            else if(k<a[i]&&a[i]<=2*k)k=a[i];
            else
            {
                while(2*k<a[i])k*=2,ans++;
                k=a[i];
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    /********************
    2 1
    3 6
    ********************/
    D

    E,拓扑排序,记录出度,优先队列从大到小排

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=500+100,inf=0x3f3f3f;
    
    vector<int>v[N];
    int lab[N],out[N],n;
    void bfs()
    {
        priority_queue<int,vector<int>,less<int> >q;
        memset(lab,-1,sizeof lab);
        int res=n;
        for(int i=1;i<=n;i++)
            if(out[i]==0)
               q.push(i);
        while(!q.empty()){
            int k=q.top();
            lab[k]=res--;
            q.pop();
            for(int i=0;i<v[k].size();i++)
            {
                out[v[k][i]]--;
                if(out[v[k][i]]==0)q.push(v[k][i]);
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int m;
        cin>>n>>m;
        for(int i=0;i<m;i++)
        {
            int a,b;
            cin>>a>>b;
            v[b].push_back(a);
            out[a]++;
        }
        bfs();
        for(int i=1;i<=n;i++)
            cout<<lab[i]<<" ";
        cout<<endl;
        return 0;
    }
    /********************
    
    ********************/
    E
  • 相关阅读:
    mysql通过一张表更新另一张表
    申请微信支付填错对公账号的解决办法
    radio 实现点击两次 第一次点击选中第二次点击取消
    C#修改下拉框选项的高度
    Centos7 用yum命令安装LAMP环境(php+Apache+Mysql)以及php扩展
    php备份数据库
    windows环境下 composer 的安装与使用
    PHP获取多维数据的交集与差集
    JS 图片懒加载
    搭建 window + nginx + php 开发环境
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7273212.html
Copyright © 2011-2022 走看看