codeforces 725C Hidden Word(构造)
来源:互联网 发布:氮素网络是什么意思 编辑:程序博客网 时间:2024/06/03 19:38
题意:每个字母能够走到上下左右,左上,右上,左下,右下八个方向。 在图中字母的走向便是路径。 现在给出一个长度为27(26个大写字母每一个最少出现一次)的路径,请输出一个能够走出这个路径的 2*13 的字母图。不存在输出 Impossible
题解: 简单的画一画就可以知道出现了两次的那个字母如果挨在一起就是无解的。(例如: ABCDDEFGHIJKLMNOPQRSTUVWXYZ) 重复出现的字母间距离大于1的串都有解,那么我们找到出现两次的字母第一次出现的位置pos,以及两个字母之间的距离dis,将这个位置放在第一行的 13-(dis/2) 的位置。 然后按照路径串将其余的字母按顺序填入图中就行了,注意第二次出现的那个字母不填。
代码如下:
#include<iostream>#include<cstring>#include<cmath>#include<algorithm>using namespace std;char str[30];int mark[27];char ans[2][13];int main(){int i,j,dis,temp,step;while(cin>>str){memset(mark,-1,sizeof(mark));int flag=0;for(i=0;i<27;++i){if(mark[str[i]-'A']==-1)mark[str[i]-'A']=i;else{temp=mark[str[i]-'A'];dis=i-mark[str[i]-'A'];if(dis==1)flag=1;break;}}if(flag)cout<<"Impossible"<<endl;else{if(dis&1)dis++;i=dis/2;i=13-i;ans[0][i++]=str[temp];step=temp;while(i<13)//先填到第一行的末尾 {ans[0][i]=str[++step];i++;}i=12;while(i>=0&&step<26)//从第二行的末尾往前填 {if(str[++step]!=str[temp]){ans[1][i]=str[step];i--;}}flag=1;if(step==26)//填到路径串的最后一位时,需要从第一位填到重复字母第一次出现的位置 {step=0;flag=0;}while(i>=0){ans[1][i]=str[step];i--;step++;}i=0;while(step<26&&flag){//从第一行的前面开始填 ans[0][i]=str[++step];i++;}if(step==26)step=0;while(step<temp){ans[0][i]=str[step];step++;i++;}for(i=0;i<2;++i){for(j=0;j<13;++j)printf("%c",ans[i][j]);printf("\n");}}}return 0;}//ABCDEFGHIJKLMNOPQRSTUVWXYZA
0 0
- Codeforces 725C Hidden Word【思维+构造】
- codeforces 725C Hidden word(构造)
- codeforces 725C Hidden Word(构造)
- 【codeforces 725C】C. Hidden Word【字符串构造】
- Codeforces 725C Hidden Word
- 【36.11%】【codeforces 725C】Hidden Word
- [CodeForces725 C. Hidden Word] 构造 + STL
- [构造] Canada Cup 2016 C. Hidden Word
- Canada Cup 2016 C. Hidden Word(字符串构造)
- Canada Cup 2016 C. Hidden Word .
- (Canada Cup 2016 C) Hidden Word
- CodeForces 725C HiddenWord 字符串构造
- CodeForces 600C【构造】
- CodeForces 110C 【构造】
- Codeforces 141C【构造】
- CodeForces 828C【构造】
- Codeforces 862C(构造)
- Canada Cup 2016 C. Hidden Word 找规律、模拟、字符串
- 队列01:数组和链表实现
- effective C++函数返回值或引用
- 接口
- JQuery中$.ajax()方法参数详解
- QThread的使用要点和例子
- codeforces 725C Hidden Word(构造)
- java 选择排序
- Android4.3工程代码移植Android5.1
- 队列02:应用
- 【c语言问题系列教程之四】指针
- 多态
- 自定义AlertDialog对话框
- 《CLR via C#》读书笔记-.NET多线程(一)
- 使用Fragment和Viewpager实现Tab嵌套,仿网易云音乐tab