新生赛26场

越学越废,呵呵呵呵。

没事,再接再厉就好了

乐乐的数字:

题目描述

乐乐做完数学作业,突发奇想定义了一种新的数:乐乐数。乐乐把n个数排成一行,一个数的“乐乐数”是指:在这个数的左边且比它小的数中最靠近它(即最靠右)的那个数。依次给出这n个数,请求出所有这n个数相对应的“乐乐数”。

输入

第一行是一个正整数n,表示一共有多少个数。
第二行有n个用空格隔开的正整数,它们从左至右给出了数列中的n个数。这些数保证小于231。

输出

输出一行用空格隔开的n个数。
这些数对应于输入数据中的数的“乐乐数”。如果输入中某个数没有“乐乐数”(即它左边的数都不比它小),请输出0。

样例输入 Copy

7
3 1 2 7 6 7 4

样例输出 Copy

0 0 1 2 2 6 2

提示

对于80%的数据,n≤10000;
对于100%的数据,n≤200000。 题解:都是补题哈哈,借鉴了大佬的代码,看懂之后着实佩服,还有人跟我说可以用单调栈做,等我研究出来重新补发哈,这题我个菜鸡首先想到的是循环,暴力来做,一次循环再加上break依然超时 大佬的想法是用空间换时间,用一个数组来专门记录答案,还有个数组就是移动来找那个数字,还有个原数组,把思路想明白,直接模拟(虽然我当时没做出来,呵呵了
#include<iostream>
using namespace std;
typedef long long int ll;
int b[1000000],a[1000000],c[1000000];
ll t;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        if(a[i-1]>=a[i])
        {
            int t=c[i-1];//再往前看一个数
            while(t>0&&a[t]>=a[i])
                t=c[t];  
            b[i]=a[t];
            c[i]=t; 
        }
        else
        {
            b[i]=a[i-1];//如果前一个数刚好比这个数要小,那正好的 
            c[i]=i-1;//表示位置 
        }
    }
    for(int i=1;i<=n;i++)
        printf("%d ",b[i]);
    return 0;
}

 

题目描述

乐乐最近玩起了字符游戏,规则是这样的:读入四行字符串,其中的字母都是大写的,乐乐想打印一个柱状图显示每个大写字母的频率。你能帮助她吗?

输入

共有4行:每行为一串字符,不超过72个字符。 

输出

与样例的格式保持严格的一致。

样例输入 Copy

THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!

样例输出 Copy

                            *
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

提示

1.输出的相邻字符间有一个空格。
2.最后一行的26个大写字母每次必须输出。
3.大写字母A所在的第一列前没有空格。
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int n=4,len,maxn=0,a[10000];
    char ch[100];
    while(n--)
    {
        cin.getline(ch,100);
        len=strlen(ch);
        for(int i=0;i<len;i++)
        {
            if(ch[i]>='A'&&ch[i]<='Z')
            {
                a[ch[i]-'A']++;
                maxn=max(maxn,a[ch[i]-'A']);
            }
        }
    }
    for(int i=maxn;i>0;i--)//代表个数木桶效应,所有的个数都比maxn要小 
    {
        for(int j=0;j<26;j++)//一排一排往下走 
        {
            if(j==0)
            {
                if(a[j]>=i)
                    printf("*");
                else 
                    printf(" ");
            }
            else
            {
                if(a[j]>=i)
                    printf(" *");
                else
                    printf("  ");
            }
            
        }
        cout<<endl;
    }
    printf("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n");
    
}

 

上一篇:快读快输模板


下一篇:【CF1438D Powerful Ksenia】题解