题目描述
解题报告
观察样例
题目中要求:每次只能同时翻转相邻的两个硬币。那么,我们可以把每个硬币当做一个灯泡,两个相连的硬币就变成了一个开关。回到了我们熟悉的开关模型,而且是一维的,解决的方式就可以直接递推枚举,然后比较当前位置和最终状态是否相同,不同的话就"摁"一下"开关"。
对于题目所给的样例,实际是按照如下的方式进行的。
参考代码
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 110; int n; char start[N],ans[N];//分别表示初始给的字符串和答案最终要的字符串 void turn (int x) { if(start[x] == '*') start[x] = 'o'; else start[x] = '*'; } int main() { cin >> start >> ans; n = strlen(start); int res = 0; for(int i = 0; i < n-1;i++) if(start[i] != ans[i]) { turn(i),turn(i+1); res ++; } cout << res << endl; return 0; }