「Luogu P6101」[EER2]出言不逊

Posted shenxiaohuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「Luogu P6101」[EER2]出言不逊相关的知识,希望对你有一定的参考价值。

Portal

Portal1: Luogu

Solution

模拟,先找到在读入字符串内出现次数最多的字符,记录个数,然后以 (2) 为指数在现有长度上递增,就可以算出答案。

但是long long会溢出,所以要判断一下,如mx + mx < mx说明已经溢出了,然后就退出答案做个标记,输出的时候(+1),否则会死循环,至于__int128,我没试过。

代码纯属是为过而过,没什么可看的。

Code

#include<bits/stdc++.h>
#pragma GCC optimize(2)
//不知道为什么,不开会T
using namespace std;

char s[1000005];
unsigned long long L;
int main() {
    cin >> s;
    cin >> L;
    sort(s, s + strlen(s));//字符串排序方便计算出现最多的数
    unsigned long long lst = 0, mx = 0;
    s[strlen(s)] = ‘!‘;//最后要填一个随意的(不会出现的)字符,不然最后一段就不会算进去
    for (int i = 1; i <= strlen(s); i++)
        if (s[i] != s[i - 1]) {
            if (i - lst > mx) mx = i - lst;
            lst = i;
        }
    unsigned long long now = strlen(s) - 1, ans = 0;
    bool flag = 0;
    while (now < L) {
        now += mx;
        if (mx + mx < mx) {flag = 1; break;}
        mx = mx * 2;
        ans++;
    }
    if (flag) printf("%lld
", ans + 1); else printf("%lld
", ans);//溢出要标记
    return 0;
}

以上是关于「Luogu P6101」[EER2]出言不逊的主要内容,如果未能解决你的问题,请参考以下文章

极品亲戚

亲人要生,生人要熟,熟人要亲

全民抵制“辱华”品牌秀,D&G神回复:呵呵~ 那不是我!

程序猿 :D&G滚吧,你的需求我们是不会做的~

luogu P2481 [SDOI2010]代码拍卖会

Luogu P1009 阶乘之和