码迷,mamicode.com
首页 > 编程语言 > 详细

2018年全国多校算法寒假训练营练习比赛(第二场)

时间:2018-01-28 17:25:39      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:UI   lan   子序列   include   gpo   练手   产生   sub   训练   

A题:

链接:https://www.nowcoder.com/acm/contest/74/A
来源:牛客网

小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO经过一段时间以后会变成oO。
技术分享图片

输入描述:

数据有多组,处理到文件结束。
每组输入包含一行仅有‘O‘与‘o‘组成的字符串。

输出描述:

每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。

示例1

输入

ooOOoooO

输出

oO

说明

自左到右进行合并

备注:

对于100%的数据,
字符串的长度不超过100。
#include<bits/stdc++.h>
using namespace std;

//const int INF =0x3f3f3f3f;
//int SUM[1005][1005];
//int dp[1005][1005];

int dp[105];

int main()
{
    string s;
    while(cin >> s)
    {
        string string1 = "";
        for(int i=0;i < s.length();i++)
        {
            string1 = s[i] + string1;
        }

        int lens = string1.length();

        int t = lens;
        while(1)
        {
            if(t == 0)
                break;
            if(string1[t-1] == string1[t-2])
            {
                if(string1[t-1] == o)
                {
                    if(t < string1.length())
                    {
                        string stemp = string1.substr(t,string1.length()-t);
                        string1 = string1.substr(0,t-2);
                        string1 += O;
                        string1 += stemp;
                        t = string1.length();
                    }
                    else
                    {
                        string1 = string1.substr(0,t-2);
                        string1 += O;
                        t = string1.length();
                    }
                }
                else if(string1[t-1] == O)
                {
                    if(t < string1.length())
                    {
                        string stemp = string1.substr(t,string1.length()-t);
                        string1 = string1.substr(0,t-2);
                        string1 += stemp;
                        t = string1.length();
                    }
                    else
                    {
                        string1 = string1.substr(0,t-2);
                        t = string1.length();
                    }
                }
            }
            else
            {
                t = t-1;
            }
        }
        string string2 = "";
        for(int i=0;i < string1.length();i++)
        {
            string2 = string1[i] + string2;
        }
        cout << string2 << endl;



    }
    return 0;
}

写了一个h,长长一坨。

B题

链接:https://www.nowcoder.com/acm/contest/74/D
来源:牛客网

题目描述

Wozuinb非常喜欢打炉石传说,但是菜的不行,所以他决定打
竞技场来练练手。系统按顺序给出n张卡牌,每张卡牌都有自
己的使用消耗a[i],每次只给出一张,wozuinb可以选择或者
弃掉这张牌。每选择一张牌都会按选择顺序放在卡槽中,当
卡槽中放满30张即可组成一套套牌。Wozuinb希望自己的套牌的
消耗满足一个平滑的曲线,即30张卡牌都满足第i张卡牌的消耗
不小于第i-1张(i>1)。请你帮助wozuinb看一看,这些卡牌能不
能组成想要的套牌,如果能组成输出“yes”,如果不能输出“no”。

输入描述:

第一行输入一个整数n,0<n<100。
第二行输入一行数字a[i],每个数字用空格隔开,代表第i张出现的卡牌的消耗。

输出描述:

输出一行,“yes”或“no”
示例1

输入

5
1 2 3 4 5

输出

no
#include<bits/stdc++.h>
using namespace std;

//const int INF =0x3f3f3f3f;
//int SUM[1005][1005];
//int dp[1005][1005];

int dp[105];

int main()
{
    int n;
   cin >> n;
    int a[105];
    for(int i=0;i < 105;i++)
        dp[i] = 1;

    for(int i=1;i <= n;i++)
        cin >> a[i];
    for(int i=1;i <= n;i++)
    {
        for(int j=1;j < i;j++)
        {
            if(a[i] >= a[j])
            {
                dp[i] = max(dp[i],dp[j]+1);
            }

        }
    }
    int ans = 0;
    for(int i=1;i <= n;i++)
    {
        ans = max(ans,dp[i]);
    }

    if(ans >= 30)
        cout << "yes" << endl;
    else
        cout << "no" << endl;
    
    return 0;
}

最长不下降子序列裸题。

H题

链接:https://www.nowcoder.com/acm/contest/74/H
来源:牛客网

题目描述

既然是了断局了,大家就随便玩玩数字呗。
已知一个数列前10项分别是 
{0, 1, 1, 2, 4, 7, 13, 24, 44, 81}
小G不满足呀:我要更多的数!!!不给就不让你们玩了。
小G会问你第n项是什么数字,请回答这个顽皮的孩子吧。

输入描述:

多组数据输入输出;
第一行输入一个整数n(1<=n<=50)

输出描述:

输出数列中的第n个数。
示例1

输入

1
2
3

输出

0
1
1
#include<bits/stdc++.h>
using namespace std;

//const int INF =0x3f3f3f3f;
//int SUM[1005][1005];
//int dp[1005][1005];


int main()
{
    long long a[55];
    a[1] = 0;
    a[2] = 1;
    a[3] = 1;
    for(int i=4;i <= 54;i++)
    {
        a[i] = a[i-3] + a[i-2] + a[i-1];
    }
    int n;
    while(cin >> n)
    {
        cout << a[n] << endl;
    }

    return 0;
}

找规律+longlong

只写了3题,太菜了,日后补题。

2018年全国多校算法寒假训练营练习比赛(第二场)

标签:UI   lan   子序列   include   gpo   练手   产生   sub   训练   

原文地址:https://www.cnblogs.com/cunyusup/p/8371598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!