社区讨论
求大家帮忙看一下我这里题解哪里格式错了,我不太理解管理员给的原因
灌水区参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @lszv5l50
- 此快照首次捕获于
- 2024/02/24 17:13 2 年前
- 此快照最后确认于
- 2024/02/24 20:43 2 年前
很遗憾,您上传的题解 数字串 Number String 未能通过审核。原因是 【中文标点符号】与【英文、数字、公式或汉字】之间不应添加多余空格;数学公式中的文本应使用 \text,字符串应使用 \texttt;审核管理员:shinzanmono,对审核结果有疑问请私信交流。 。
题意:给你一个字符串 , 表示排列中 , 表示排列中 , 表示无限制。
表示前 个满足字符串条件的结尾为 的 的排列。
如果 是
I,那么 如果 是
CPPD,那么 ,因为要令当前位为 ,如果前面出现过 ,就令前面的所有大于等于 的数 ,就能构造出新的排列了。比如 ,要在第六位插入 ,令 的数都 ,于是就构造出新的 排列 。然后代码的话处理出前缀和 ,就不用 了。#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int maxn = 1e3 + 10;
char s[maxn];
long long dp[maxn][maxn]; //前缀和
int main()
{
while(scanf("%s", s) != EOF){
int n = strlen(s);
dp[0][1] = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i + 1; j++){
dp[i][j] = dp[i][j-1]; //前缀和累加
if(s[i-1] != 'I') dp[i][j] += dp[i-1][i] - dp[i-1][j-1] + mod;
if(s[i-1] != 'D') dp[i][j] += dp[i-1][j-1];
dp[i][j] %= mod;
}
}
printf("%lld\n", dp[n][n+1]);
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...