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


    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题,太菜了,日后补题。

  • 相关阅读:
    .net同时执行多条sql语句(含事务功能)
    SQL标量值函数:小写金额转大写
    找出与某id相近的四条记录
    sql查询优化 索引优化
    半成品收发数量流程管控
    半成品进销存
    多表分页查询存储过程
    DataGridView数据用NPOI导出到Excel
    SQL事务+存储过程
    left join、right join和join的区别
  • 原文地址:https://www.cnblogs.com/cunyusup/p/8371598.html
Copyright © 2020-2023  润新知