被3三整除的子序列(站外求助)具体在贴内
  • 板块题目总版
  • 楼主鱼书
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/10/25 18:39
  • 上次更新2023/11/5 09:53:55
查看原帖
被3三整除的子序列(站外求助)具体在贴内
85203
鱼书楼主2020/10/25 18:39

给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模

#include<iostream>

using namespace std;

const long k=1e9+7;

char num[51];

int number[51];

int sta[51][51];

unsigned long long ans;

int mods(int supply)

{

    if(supply%3==0)return 0;

    if(supply%3==1)return 1;

    if(supply%3==2)return 2;

}

int main()

{

    int len=1;

    while(cin>>num[len])

    {

        len++;

    }

    len--;

    for(int i=1;i<=len;i++)

    {

        number[i]=num[i]-'0';

    }

    sta[1][mods(number[1])]++;

    ans+=sta[1][0]%k;

    for(int i=2;i<=len;i++)

    {

          sta[i][mods(number[i])]++;

          for(int j=0;j<=2;j++)

          {   

              if(mods(number[i]+j)!=0)

                  sta[i][mods(number[i]+j)]+=sta[i-1][mods(number[i]+j)]+sta[i-1][j];

              else sta[i][mods(number[i]+j)]+=sta[i-1][j];

          }



          ans+=sta[i][0]%k;

    }

    cout<<ans;

    return 0;

}


有很多样例我输出的答案比他给的少输出了1,我自己没看出来哪里有错,请问怎么找出来

2020/10/25 18:39
加载中...