http://poj.org/problem?id=3087
题意 : 我只能说,,英语不好是硬伤。。。这个题比较别扭啊,不知道真正题意是不是我所想的,我先把我A了的代码按照的题意的意思说一下,就是说两堆字符串每堆n个字符,从下边开始轮流取,其实输入之后就是从头开始取,先取第二个字符串的,放在最底下,再取第一个的,直到合成一个新的,然后再把下边n个取出来当成第一个字符串,上边n个当成第二个字符串,继续进行上述操作,直到新合成的字符串与题目中给出的目标字符串相同,若是合不成就输出-1,每次输出先输出是第几组数据,再输出需要几次可以达到目标字符串
思路 : 模拟?还行吧,挺简单的,用map函数标记一下就行,若是新合成的与之前某个合成的一样的,代表着这一组会陷入无限循环中,所以直接输出-1就行了

#include<cstdio> #include<iostream> #include<map> #include<cstring> using namespace std ; const int maxn = 1010 ; int main() { int n ; cin>>n ; char ch[maxn],sh[maxn],sch[maxn],neww[maxn] ; for(int i = 1 ; i <= n ; i++) { map<string,int> p ; int m ,cnt = 0 ,sum = 0; cin>>m ; cin>>ch>>sh>>sch ; cout<<i<<' '; while(1) { cnt = 0 ; for(int j = 0 ; j < m ; j++) { neww[cnt++] = sh[j] ; neww[cnt++] = ch[j] ; } neww[2*m] = '\0'; sum++ ; if(strcmp(neww,sch) == 0) { cout<<sum<<endl; break ; } if(p[neww]) { cout<<"-1"<<endl; break ; } p[neww]++ ; strncpy(ch,neww,m); ch[m]='\0'; strcpy(sh,neww+m); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步