F. Palindrome
来源:互联网 发布:java web框架最新技术 编辑:程序博客网 时间:2024/06/07 00:28
题意:
有n个字符,里面有?,可以表示任何字母,在满足m个约束条件的情况下,
求出有多少种可能,记得mod一个大数。
思路:
重要的是要分情况,一个?在计算的时候,只能是1或者26种可能,所以
用并查集去区分它们。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 50005;char s[MAXN];int n,m;int f[MAXN],flag;int Find(int x){ if(x == f[x]) return x; else return f[x] = Find(f[x]);}void judge(int x,int y){ if(s[x] == s[y]) f[x] = y; else if(s[x] == '?') f[x] = y; else if(s[y] == '?') f[y] = x; else flag = true;}int main(){ //freopen("in.txt","r",stdin); int ncase; scanf("%d",&ncase); while(ncase--) { flag = false; scanf("%d%d%s",&n,&m,s); for(int i = 0;i < n; i++) f[i] = i; for(int i = 0,j = n-1;i < j; i++,j--) { judge(i,j); } for(int i = 0;i < m; i++) { int a,b; scanf("%d%d",&a,&b); a--,b--; judge(Find(a),Find(b)); } if(flag) { printf("0\n"); continue; } else { long long ans = 1; for(int i = 0;i < n; i++) { if(f[i] == i && s[i] == '?') { ans *= 26; ans %= 1000000007; } } printf("%lld\n",ans); } } return 0;}
0 0
- F. Palindrome
- GDCPC #2 F - Palindrome
- Gym 100676F Palindrome(并差集)
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- Palindrome
- MySQL中secure-file-priv 配置项对数据导入导出的影响
- rhel小测试
- 我的Linux学习二(CentOS 7的网络配置)
- 5-5 回文判断 (20分)
- poj 3254 Corn Fields 状压dp
- F. Palindrome
- Java 抽象类
- python xgboost算法实践
- 分而治之:Fork/Join框架
- Oracle有哪些服务是必须开启的?
- 各位大牛帮忙看看问题出来哪?自己实现一个数组模板类,编译无法通过
- 我的Android NDK之旅(一),不使用ndk-build命令来创建jni
- 【数据结构】图的遍历--广度优先搜索
- leetcode--66. Plus One