GDCPC #2 F - Palindrome
来源:互联网 发布:python股票自动交易 编辑:程序博客网 时间:2024/06/05 20:31
很多东西只是知道皮毛,但其实什么也不懂。。。
虽然知道用并查集,但还是不会写。。。
(脑残)
思路不清晰,想得太复杂,思维混乱一片,,,
题意是给个字符串,‘?’可以替换成一个小写字母,然后给出m个限制条件,求构成回文串的种数。。。
一:并查集:注意在合并时‘?’-->字母,否则很难判断‘?“是否可以替换成任意一个字母
二:先合并前后在合并限制条件
三:判断是从前到后,如果是pre【i】为’?‘,说明可以取任意一个字母,如果pre【i】!=i,而且s【i】!=’?“,说明有矛盾,因为如果s【i】==‘?”,说明他和pre【i】取一样的值。
自己写了好久但是都没写出来,思维太混乱了,看别人的代码又看不进去,或是看不懂,好烦,,,唉~~~自己为什么这么脑残
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;#define N 50001const long long M=1e9+7;char s[N];int par[N],use[N];int t,n,m;int find(int x){ int s; for(s=x; par[s]!=s; s=par[s]); while(s!=x) { int t=par[x]; par[x]=s; x=t; } return s;}void un(int r1,int r2){ int a=find(r1),b=find(r2); if(s[a]!='?') { par[b]=a; } else { par[a]=b; }}int main(){ cin>>t; while(t--) { int flag=0; memset(use,0,sizeof(use)); int a,b; long long c=1; cin>>n>>m; getchar(); for(int i=1; i<=n; i++) { scanf("%c",&s[i]); par[i]=i; } for(int i=1,j=n; i<j; i++,j--) { un(i,j); } for(int i=0; i<m; i++) { cin>>a>>b; un(a,b); } for(int i=1; i<=n; i++) { int x=find(i); if(s[x]=='?') { if(!use[x]) { use[x]=1; c=(c*26)%M; } } else if(s[x]!=s[i]&&s[i]!='?') flag=1; } if(flag==1) cout<<"0"<<endl; else cout<<c<<endl; cout<<endl; } return 0;}
F - Palindrome 密码:sweetz0306
0 0
- GDCPC #2 F - Palindrome
- GDCPC 2008:F Fengshui
- F. Palindrome
- 2017GDCPC总结 by+2
- GDCPC GO
- 2011 GDCPC 总结
- 2014 GDCPC 反省!!
- GDCPC-2014 总结
- 2017GDCPC赛后总结
- Gym 100676F Palindrome(并差集)
- 广东省2013GDCPC赛后感受
- GDCPC 2008:B Reading books
- GDCPC 2008:I Table tennis
- 2016 GDCPC 赛后小感
- 2017GDCPC省赛总结
- 2017GDCPC题解(未完)
- %.2f 和 %1.2f的区别
- 已知f[0]=f[1]=1 f[2]=0 f[n]=f[n-1]+f[n-3] 求 f[0]~f[50]的最大值
- opencv mat元素的遍历
- Java ConcurrentModificationException异常原因和解决方法
- CocoaLumberjack 学习总结(一)
- PAT-Shopping in Mars (25)
- 236. Lowest Common Ancestor of a Binary Tree
- GDCPC #2 F - Palindrome
- online_judge_1513
- 【高性能】Eigen VS Matlab
- 怎样显示MYSQL表的信息
- 一些关于端口有用的DOS命令
- nGrinder源码分析:详细报告页数据展示
- 找出四位数的吸血鬼数字:类似1260=21*60
- 前端基础学习-css基础笔记
- secureCRT命令