zoukankan      html  css  js  c++  java
  • 第二天

    A. Set of Strings

    链接:http://codeforces.com/problemset/problem/544/A

    题目大意:

    给你一个K和一串字符,然后吧这个字符分成k份,并且每一份的开头字母都不一样

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    using namespace std;
    #define INF 0xfffffff
    #define N 200
    
    int main()
    {
        char s[N];
        int k,i;
        while(scanf("%d %s",&k,s)!=EOF)
        {
            int a[N],vis[30],m=0;///vis表示这个字母是否出现过,a表示不一样的字母的下标
            memset(vis,0,sizeof(vis));
            for(i=0;s[i];i++)
            {
                if(vis[s[i]-'a']==0)
                {
                    vis[s[i]-'a']=1;
                    a[m++]=i;
                }
            }
            if(k>m)
            {
                printf("NO
    ");
                continue;
            }
            printf("YES
    ");
            m=0;
            for(i=1;i<k;i++)
            {
                for(int j=a[m];j<a[m+1];j++)
                {
                    printf("%c",s[j]);
                }
                printf("
    ");
                m++;
            }
            for(i=a[m];s[i];i++)
                printf("%c",s[i]);
            printf("
    ");
        }
        return 0;
    }

    B. Sea and Islands

    http://codeforces.com/problemset/problem/544/B

    题目大意:

    给你一个n表示海洋n行n列,然后给你一个K,让你在海洋上加沙滩,看可不可以加k个

    如果可以  输出加过的图形(只要符合题目都可以)

    分析:

    先求出这个图形能加的最多的沙滩有多少个

    等差数列求和  公差为-2

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    using namespace std;
    #define INF 0xfffffff
    #define N 110
    
    int main()
    {
        int n,m,k,i,j;
        while(scanf("%d %d",&m,&k)!=EOF)
        {
            n=(m+1)/2;
            int S=n*m+n*(n-1)/2*(-2)+(n-1)*(m-2)+(n-1)*(n-2)/2*(-2);
            if(k>S)
            {
                printf("NO
    ");
                continue;
            }
            printf("YES
    ");
            int ans=0;
            for(i=0; i<m; i++)
            {
                for(j=1; j<=m; j++)
                {
                    if(ans<k)
                    {
                        if((i%2==0 && j%2==1)||(i%2==1 && j%2==0))
                        {
                            printf("L");
                            ans++;
                        }
                        else
                            printf("S");
                    }
                    else
                        printf("S");
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    1289大鱼吃小鱼(STL中栈的应用)
    1347旋转字符串
    2133排队接水——优先队列
    7-37 整数分解为若干项之和(20 分)
    有一个VC的bug:非标准语法
    指针的一点点用法
    好久没写的博客_数组的长度等小问题
    解决strcmp的错误以及VS的快捷键
    输入流和注释
    VS出现异常?!和十进制转二进制比是小事
  • 原文地址:https://www.cnblogs.com/linliu/p/5001451.html
Copyright © 2011-2022 走看看