听说灌水区都是大佬
  • 板块灌水区
  • 楼主Secret_Sky_2021
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/10 09:52
  • 上次更新2023/11/3 04:48:31
查看原帖
听说灌水区都是大佬
601270
Secret_Sky_2021楼主2023/8/10 09:52
//原题解   https://blog.csdn.net/qq_44096896/article/details/104149743
//题目链接   https://atcoder.jp/contests/abc129/tasks/abc129_e
题解代码:
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e5+5;
char s[maxn];
int main()
{
    scanf("%s",s+1);
    ll a=1,b=0;//a记录的是前几位和s相同的数量,b记录的是不同的
    int l=strlen(s+1);//他一共有三种情况,两种,一个是0,一个是1,一种,都是0;
    for(int i=1;i<=l;i++)
    {
        if(s[i]=='1')//如果为1,那么对于a,两种情况,一个是1,一个是0
                    //对于b,他有两种情况,一种是有原来的b,后面跟着那三种情况再加上a的情况后面跟上0
        {
            b=b*3+a;
            b%=mod;
            a=a*2%mod;
        }
        else//如果为0,那么,a只有一种情况,对于b,后面三种情况都可以
        {
            b*=3;
            b%=mod;
        }
    }
    printf("%lld\n",(a+b)%mod);
    return 0;
}

问:1、b=b*3+a;为什么吧b要乘三;

2、a、b是存储什么的(原题解看不懂)

2023/8/10 09:52
加载中...