2017, X Samara Regional Intercollegiate Programming Contest B.Pursuing the Happiness (string函数)

-
题意:给你一个字符串,可以交换两个字符的位置,问操作后能否在字符串中找到子串\("happiness"\),如果不能,输出交换的两个位置.
-
题解:这题其实用string中的find函数很是方便啊,假如字符串中不含子串,我们判断一下交换\(1\)和\(2\)位置的字符后是否含有子串,如果有就直接交换\(1\)和\(3\),没有当然就是\(1\)和\(2\)啦.在考虑有子串的情况,如果含有\(1\)个子串,就直接交换子串的第一个和第二个位置,如果含有两个子串,就交换第一个子串的第一个位置和第二个子串的第二个位置即可,如果含有三个及以上的子串,就束手无策啦.具体还是看代码吧.
-
代码:
string s; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>s; string t="happiness"; int pos1=s.find(t); if(pos1==s.npos){ puts("YES"); swap(s[0],s[1]); if(s.find(t)==s.npos){ printf("1 2\n"); } else{ printf("1 3\n"); } } else{ int pos2=s.find(t,pos1+8); if(pos2!=s.npos){ int pos3=s.find(t,pos2+8); if(pos3!=s.npos){ puts("NO"); } else{ puts("YES"); printf("%d %d\n",pos1+1,pos2+2); }; } else{ puts("YES"); printf("%d %d\n",pos1+1,pos1+2); }; } return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号