UVA310

来源:互联网 发布:5800简单编程教学 编辑:程序博客网 时间:2024/06/16 16:18

一开始输入四个字符串(都是只含a,b),第三串是初始字符串,第四串是目标字符串,变化方式是把第三串中出现a就替换成第一串,出现b就替换成第二串。问新字符创的子集中(也就是截断出目标字符串长度)含不含目标字符串。

做法就是妹子都把ab全变完后,截断出目标字符串长度的所有子集,判断有没有满足的,满足就结束。 不满足,并且没有出现过,就入队列。


AC代码:


#include<iostream>#include<string>#include<map>#include<queue>using namespace std;string a;string b;string beg;string target;string s,s1;bool ok;queue<string> q;map<string ,int> m;void judge (string temp) {for (int i = 0; i < temp.size() - 1 ;i++) {string temp2 = "";for (int j = i ; j < i + target.size() && j < temp.size() ;j++) {temp2 += temp[j];}if(temp2 == target) {ok = true;return ;}else {if (!m[temp2]) {q.push(temp2);m[temp2] = 1;}}}}void bfs () {ok = false;while(!q.empty()) {q.pop();}m.clear();s = beg;m[s] = 1;q.push(s);if (beg.size() >= target.size())judge(beg);if(ok)return;while (!q.empty()) {s = q.front();q.pop();string temp = "";for (int i = 0 ; i < s.size() ;i++) {if (s[i] == 'a') temp += a;if (s[i] == 'b')temp += b;}judge(temp);if (ok)return;}}int main () {while (cin >> a) {cin >> b >> beg >> target;bfs();if(ok)cout << "YES"<<endl;elsecout << "NO"<<endl;}return 0;}


0 0
原创粉丝点击