poj 3087 直接模拟
2017-01-18 20:48
246 查看
这个题数据比较水。。。然后题目比较难看懂。意思就是,s1,和s2两堆牌,然后先s2一张再s1,最后会出现一个s12序列,例如s1 AHAH
S2 HAHA 然后s12为HAAHHAAH,然后前面一部分给s1,后面一部分给s2,然后再重复操作。最后看能否达到目标序列。
为什么说数据水呢,因为直接若操作次数大于于100,然后就可以判断不能达到了。大牛的做法是经过了一些操作后看s1是否等于刚开始输入的序列,若等于,则不能达到。
然后这个代码要注意的一点是初始化,,,如果s12不初始化的话,很有可能会WA;
S2 HAHA 然后s12为HAAHHAAH,然后前面一部分给s1,后面一部分给s2,然后再重复操作。最后看能否达到目标序列。
为什么说数据水呢,因为直接若操作次数大于于100,然后就可以判断不能达到了。大牛的做法是经过了一些操作后看s1是否等于刚开始输入的序列,若等于,则不能达到。
然后这个代码要注意的一点是初始化,,,如果s12不初始化的话,很有可能会WA;
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 505 char s1[maxn]; char s11[maxn]; char s22[maxn]; char s2[maxn]; char s12[maxn*2]; char s21[maxn*2]; int main() { int N; scanf("%d",&N); int temp=N; while(N--) { int n; memset(s1,0,sizeof(s1));//注意这里的初始化 memset(s11,0,sizeof(s11)); memset(s2,0,sizeof(s2)); memset(s22,0,sizeof(s22)); memset(s12,0,sizeof(s12)); memset(s21,0,sizeof(s21)); scanf("%d",&n); scanf("%s",s1); scanf("%s",s2); scanf("%s",s21); int flag=1; for(int i=0;i<2*n;i=i+2) { s12[i]=s2[i/2]; s12[i+1]=s1[i/2]; } for(int i=0;i<n;i++) s11[i]=s1[i]; for(int i=0;i<n;i++) s22[i]=s2[i]; while(strcmp(s21,s12)!=0) { flag++; for(int i=0;i<n;i++) s1[i]=s12[i]; for(int i=0;i<n;i++) s2[i]=s12[n+i]; for(int i=0;i<2*n;i=i+2) { s12[i]=s2[i/2]; s12[i+1]=s1[i/2]; } if(strcmp(s11,s1)==0) { 9cb3 flag=-1; break; } } printf("%d ",temp-N); printf("%d\n",flag); } return 0; }
相关文章推荐
- poj 3087 直接模拟
- poj 3087 直接模拟
- poj 3087 直接模拟
- poj 3087 直接模拟
- poj 3087 直接模拟
- poj 3087 直接模拟
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- mac 系统使用macaca inspector 获取iphone真机应用元素
- Navicat for MySQL 连接数据库、管理用户、创建数据库和表
- 《李明老师讲Linux》学习笔记——Linux系统安装(上)
- C++学习(九):stringstream
- 设计模式之设配器模式
- Spring_9_SpEL表达式
- Linux内核模块LKM的动态加载技术分析
- 安装Python pip的问题
- OJ 7217 猴子吃桃__枚举
- STL之适配器
- 磨刀不误砍柴工——统一日志系统 Log4Net/ExceptionLess
- linuxc
- C#85课的主要内容