软件工程今日总结
三个小时
200
include<bits/stdc++.h>
using namespace std;
class judge{
public:
judge(char a1,char b1)
{
a=a1;
b=b1;
}
bool judging()
{if(a==b)
return true;
if(a!=b)
return false;
}
private:
char a,b;
};
int main()
{
int i,j,k,length,num=0;
string pre,fin;
cin>>pre;
cin>>fin;
length=pre.length();//杈撳叆瀛楃涓叉壘鍒拌緭鍏ョ殑闀垮害
char ch1[length+1],ch2[length+1];
for(i=0;i<length;i++)
{
ch1[i]=pre[i];
ch2[i]=fin[i];
}//鎶婄‖甯佹寜涓垎寮€锛?
for(i=0;i<length;i++)
{
judge ju(ch1[i],ch2[i]);
if(ju.judging()==true)
{
continue;
}
else if(ju.judging()==false)
{
switch(ch1[i])
{
case '*':
ch1[i]='o';
switch(ch1[i+1])
{
case 'o':
ch1[i+1]='*';
break;
case '*':
ch1[i+1]='o';
break;
}
break;
case 'o':
ch1[i]='*';
switch(ch1[i+1])
{
case 'o':
ch1[i+1]='*';
break;
case '*':
ch1[i+1]='o';
break;
}
break;
}
num++;
}
}
cout<<num<<endl;
return 0;
}
把相邻两个硬币翻转两次相当于不翻,所以最优方案中同一组硬币最多只会翻转一次,故翻转顺序无后效性,考虑贪心:从前往后比较,发现一个不同的硬币就把它和他后面的硬币翻转,计数器累加,这样最后累加结果一定是最优方案的次数。

浙公网安备 33010602011771号