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

    A

    题意:给你一个01的字符串,0是个分界点,0把这个字符串分成(0的个数+1)个部分,分别求出这几部分1的个数。例如110011101 输出2031,100输出100,1001输出101

    代码:

    #include<stdio.h>
    using namespace std;
    int n;
    char a[100];
    int b[100];
    int main()
    {
    while(~scanf("%d",&n))
    {
    scanf("%s",a);
    int flag=0;
    int k=0;
    int cnt=0;
    for(int i=0; i<n; i++)
    {
    if(a[i]=='1')
    {
    cnt++;
    flag=0;
    }
    else
    {
    if(flag==0)
    {
    b[k++]=cnt;
    flag=1;
    cnt=0;
    }
    else if(flag==1)
    {
    b[k++]=0;
    }
    }
    }
    b[k++]=cnt;
    for(int i=0; i<k; i++)
    printf("%d",b[i]);
    printf(" ");
    }
    return 0;
    }

    B

    题意:五子棋,表示可以放旗子,x表示Alice的棋子,o是敌人的棋子,现在轮到Alice,问Alice是否能赢。

    代码:

    #include<stdio.h>
    using namespace std;
    char a[11][11];
    int b,flag;
    int main()
    {
    flag=0;
    for(int i=0; i<10; i++)
    scanf("%s",a[i]);
    for(int i=0; i<10; i++)
    for(int j=0; j<10; j++)
    {
    if(a[i][j]=='.')
    {
    b=0;
    for(int k=i+1; (k<=i+5)&&k<10; k++)
    if(a[k][j]=='X')
    b++;
    else
    break;
    for(int k=i-1; (k>=i-5)&&k>=0; k--)
    if(a[k][j]=='X')
    b++;
    else
    break;
    if(b>=4)
    flag=1;

    b=0;
    for(int k=j+1; (k<=j+5)&&k<10; k++)
    if(a[i][k]=='X')
    b++;
    else
    break;
    for(int k=j-1; (k>=j-5)&&k>=0; k--)
    if(a[i][k]=='X')
    b++;
    else
    break;
    if(b>=4)
    flag=1;

    b=0;
    for(int k=1; k<=5; k++)
    if((a[i+k][j+k]=='X')&&(i+k)<10&&(j+k)<10)
    b++;
    else
    break;
    for(int k=1; k<=5; k++)
    if((a[i-k][j-k]=='X')&&(i-k)>=0&&(j-k)>=0)
    b++;
    else
    break;
    if(b>=4)
    flag=1;

    b=0;
    for(int k=1; k<=5; k++)
    if((a[i+k][j-k]=='X')&&(i+k)<10&&(j-k)>=0)
    b++;
    else
    break;
    for(int k=1; k<=5; k++)
    if((a[i-k][j+k]=='X')&&(i-k)>=0&&(j+k)<10)
    b++;
    else
    break;
    if(b>=4)
    flag=1;
    if(flag==1)
    break;
    }
    else
    continue;
    }
    if(flag)
    printf("YES ");
    else
    printf("NO ");
    return 0;
    }

    C

    题意:现在拥有的困难数为k,如果a[i]/2<=k,表示这个问题可以解决,如果啊a[i]>k/2则k*=2,直到a[i]<=k/2,并且k=max(k,a[i]),问k*=2的总次数,使得所有的a[i]<=k/2。

    代码:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int n;
    double m;
    double a[1100];
    int main()
    {
    while(~scanf("%d%lf",&n,&m))
    {
    for(int i=0; i<n; i++)
    scanf("%lf",&a[i]);
    sort(a,a+n);
    double k=m;
    int cnt=0;
    for(int i=0; i<n; i++)
    {
    if(a[i]/2.0<=k)
    {
    k=max(k,a[i]);
    continue;
    }
    else
    {
    while(1)
    {
    k*=2;
    cnt++;
    if(a[i]/2.0<=k)
    break;
    }
    }
    k=max(k,a[i]);
    }
    printf("%d ",cnt);
    }
    return 0;
    }

  • 相关阅读:
    Spring 源码学习
    Feign Client 原理和使用
    算法基础:排序算法看这一篇就够了
    Spring 源码学习2
    Spring 源码学习
    最优包裹组合-贪心算法
    @Transactional 事务的底层原理
    Mysql索引扫盲总结
    snowflake原理解析
    分布式ID总结
  • 原文地址:https://www.cnblogs.com/xiejiamin/p/7228101.html
Copyright © 2011-2022 走看看