#include<bits/stdc++.h> using namespace std; const int mod = int(1e9 + 7); int table[1010][1010]; void init(int n/*数量*/,int len/*范围*/) { memset(table, 0, sizeof(table)); vector<int> dp(len, 1); for(int i=1;i<=n;i++) { table[i][0] = 1; for(int j=1;j<len;j++) { dp[j] += dp[j - 1]; dp[j] %= mod; table[i][j] = dp[j]; } } } int FillArray(vector<int> a, int k) { a.insert(a.begin(), 1); a.insert(a.end(), k); const int n = a.size(); vector<pair<int, int>> zero; int max_n = 0; int max_len = 0; for(int i=0;i<n-1;i++) { if(a[i+1]==0) { int j = i + 1; while (j < n && a[j] == 0) j++; int x = j - i-1; int y = a[j] - a[i]; zero.push_back({ x,y }); max_n = max(max_n, x); max_len = max(max_len, y+1); i = j-1; } } init(max_n, max_len); int64_t res = 1; for(auto [x,y]:zero) { res *= table[x][y]; res %= mod; } return res; } int main() { cout << FillArray({ 0,0,0,0,0,67,0,0 }, 100)<<endl; cout << FillArray({ 1,0,0 }, 3) << endl; cout << FillArray({ 0,4,4 }, 4) << endl; } 我想静静,最后应该用乘法把每个区间乘起来,我用成加分我想哭
点赞 评论

相关推荐

牛客ID:561366855:期望薪资多少?难以相信这简历找不到工作。说明二本电子信息专业想对口就业非常难。
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务