uva 11127(暴力)
2024-08-28 21:14:12
题意:给出一个字符串,包含0、1、*,当中×是能够替换成0或者1的,假设字符串的某个子串S有SSS这种连续反复3次出现,不是Triple-free串,问给出的字符串能够形成多少个非Triple-free串。
题解:由于串长度最多31,所以能够暴力枚举每一位,边枚举边推断。
#include <stdio.h>
#include <string.h>
const int N = 35;
char str[N], str2[N];
int n;
long long res;
bool judge(int cur) {
for (int i = 1; i * 3 <= (cur + 1); i++) {
int e = cur - i * 3, cnt2 = 0;
for (int j = cur; j > cur - i; j--) {
int cnt = 0;
for (int k = j; k > e; k -= i)
if (str2[j] != str2[k])
break;
else
cnt++;
if (cnt == 3)
cnt2++;
else
break;
}
if (cnt2 == i)
return false;
}
return true;
}
void dfs(int cur) {
if (cur == n) {
res++;
return;
}
if (cur == 0 || cur == 1) {
if (str[cur] == '0' || str[cur] == '1') {
str2[cur] = str[cur];
dfs(cur + 1);
}
else {
str2[cur] = '0';
dfs(cur + 1);
str2[cur] = '1';
dfs(cur + 1);
}
return;
}
str2[cur] = '0';
if (judge(cur)) {
if (str[cur] == '0' || str[cur] == '*')
dfs(cur + 1);
}
str2[cur] = '1';
if (judge(cur)) {
if (str[cur] == '1' || str[cur] == '*')
dfs(cur + 1);
}
}
int main() {
int cas = 1;
while (scanf("%d", &n) == 1 && n) {
scanf("%s", str);
res = 0;
dfs(0);
printf("Case %d: %lld\n", cas++, res);
}
return 0;
}
最新文章
- PHP 函数(数组字符串)
- Proxy Pattern(Java动态代理和cglib的实现)
- Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数
- (转)提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- QueryRunner使用
- JAVA事务
- jQuery Easyui DataGrid应用
- Qt 窗体的模态与非模态(setWindowFlags(Qt::WindowStaysOnTopHint);比较有用,还有Qt::WA_DeleteOnClose)
- WARNING [Project: :app] To shrink resources you must also enable ProGuard
- target-action传值
- C语言头文件
- Can DBC 文件翻译,不是很标准,凑合看还可以
- element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项
- mongoDB python 操作
- java操作数据库:分页查询
- require.js Javascript模块化
- luogu P4161 [SCOI2009]游戏
- 给 vue项目添加ESLint
- C# DataView操作DataTable
- json 的相互 转换