AcWing 1208. 翻硬币
原题链接
简单
作者:
寻_36
,
2022-12-09 22:41:22
,
所有人可见
,
阅读 169
//费解的开关还需要枚举一下第一行的开关方案,这题直接可以推出固定唯一的策略~~~~
//y总说,从一个状态,给你一些操作变成另一个状态,求最小操作次数。
//可以将该类问题抽象剥离成dfs~~~~~ 待 宽搜y总说后面会讲
//bfs复杂度很高
//y总的思路和费解的开关是一个思路,擦。。。没有学以致用。。
//已经找到一种手工的有套路的变换方法,现在需要把手工的方法转化成代码!! 就是这个流程吧?
//而且我们只是计算次数就行了,我们不用模拟手工的过程,只需要总结手工需要多少次。 可!!
//难度大大降低!
//就仿佛我们在总结规律似的,而不需要模拟过程!
//总结:我的这种手工方法,复杂度有些高,不是最好的方法。。。 y总的非常清晰,而且非常简单。擦
#include<iostream> //什么时候能学会盲打呢? 感觉看键盘很不舒服
#include<cstring>
using namespace std;
const int N=105;
char s[N] , e[N]; //初始时是啥啊? '' ??
int res;
int rong(int x, int y){
return y-x;
}
int main(){
cin>>s>>e; //果然是这里出问题了!!擦!!
//一个>> 接受一个流,该流以空格,tab和回车结束。 可!不再困惑了!
// int len=strlen(s);
int i=0;
while(s[i]=='*'||s[i]=='o')
{ //好像不能要i++ i的变化在下面,其实用while写更好
if(s[i]!=e[i]){
for(int j=i+1;s[j]=='*'||s[j]=='o';j++){
if(s[j]!=e[j]){ //因为有解,所以这个if必然会执行
res+=rong(i,j);
i=j+1;
break;
}
}
}else i++;
}
cout<<res;
return 0;
}