zoukankan      html  css  js  c++  java
  • 牛客IOI周赛26-普及组 B. 子序列(int128)

    链接:https://ac.nowcoder.com/acm/contest/11233/B
    来源:牛客网

    题目描述

    给出一个仅包含 a,b 的字符串 A。在 A 中间任意位置(包括开头结尾)插入一个字符,最大化 aab 作为子序列(可以不连续)在 A 中出现的次数。

    输入描述:

    第一行一个仅包含 a,b 的字符串 A。
    

    输出描述:

    输出一个整数,为插入一个字符后,aab 作为子序列在 A 中出现的次数的最大值。
    

    示例1

    输入

    复制

    abababa
    

    输出

    复制

    10
    

    说明

    在第一个字符后插入一个 a,变为 aabababa。
    

    示例2

    输入

    复制

    ababbaababa
    

    输出

    复制

    33
    

    示例3

    输入

    复制

    aa
    

    输出

    复制

    1
    

    实际上只可能把a加在头上或者把b加在末尾,取最大的即可。至于计算的方法是找到每个b然后算前面有多少个a,组合数搞一下即可。

    写题解的目的是为了提醒一定要算一下数据范围,这个题最后一个点会爆long long,因此可以用int128乱搞,注意输出要写一个函数。

    #include <bits/stdc++.h>
    #define int __int128
    using namespace std;
    char s[6600005];
    void print(__int128 x)
    {
        if(x<0)
        {
            putchar('-');
            x=-x;
        }
        if(x>9)print(x/10);
        putchar(x%10+'0');
    }
    signed main() {
    	scanf("%s", s);
    	int cnta = 0;
    	int ans1 = 0, ans2 = 0;
    	int sz = strlen(s);
    	for(int i = 0; i < sz; i++) {
    		if(s[i] == 'a') cnta++;
    		else {
    			ans1 += (cnta + 1) * cnta / 2;
    			ans2 += cnta * (cnta - 1) / 2;
    		}
    	}
    	ans2 += cnta * (cnta - 1) / 2;
    	if(ans1 > ans2) print(ans1);
    	else print(ans2);
    	return 0;
    }
    
  • 相关阅读:
    Middleware
    Languages
    Errors
    Config
    CLI Console
    Linux远程复制文件
    CentOS下安装Gitlab
    Maven_POM配置结构
    Maven_POM配置详解
    MySQL索引背后的数据结构及算法原理
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/14851433.html
Copyright © 2011-2022 走看看