被3整除的子串行 組合數學 快速冪

2021-09-20 04:01:41 字數 945 閱讀 2632

被3整除的子串行

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 524288k,其他語言1048576k

64bit io format: %lld

給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除

答案對1e9+7取模

輸入乙個字串,由數字構成,長度小於等於50
輸出乙個整數
思路:先把字串中所有字元%3,記錄0,1,2 的個數,0的個數即直接記錄,然後求1,2組合成3的個數。

#include#include#include#includeusing namespace std;

const int mod=1e9+7;

string str;

#define int long long

int arr[55];

bool vis[55];

long long ans=0;

int a[55][55];

void init()

for(int i=3;i<=50;i++)

}}int pow_mod(int a, int b)

temp = temp * temp % mod;

}return res%mod;

}signed main()

int m=min(arr[1],arr[2]);

temp=pow_mod(2,arr[0]);

for(int i=0;i<=arr[1];i++)else if(j==0)else

ans=(ans+a[arr[1]][i]*a[arr[2]][j]*temp)%mod;}}

}for(int i=1;i<=arr[0];i++)

cout

}

4 1 被3整除的子串行

給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入乙個字串,由數字構成,長度小於等於50 輸出乙個整數 132931 因為被3取餘只可能是 0 1 2 所以每次提取乙個數字把它現有的可能和之前的可能性相結合就可以得到每次的被3整除的總數。dp i j d...

dp被3整除的子串行

給你乙個長度為50的數字串,問你有多少個子序列構成的數字可以被3整除 答案對1e9 7取模 輸入乙個字串,由數字構成,長度小於等於50輸出乙個整數示例1 複製132 複製3 示例2複製9 複製1 示例3複製333 複製7 示例4複製123456 複製23 示例5複製00 複製3 n為長度 子任務1 ...

DP 被3整除的子串行

題意 給定乙個數字串,然後求出所有子串行中能被3整除的個數。題解 1 狀態表示 f i j 指的是,以s i 結尾的對3取餘後值為j的集合 2 f i j 方案數 3 集合劃分 每次轉移都是從f 1,2,i 1 0,1,2 1 include2 include3 include4 include5 ...