软件工程今日总结

三个小时
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;

}
把相邻两个硬币翻转两次相当于不翻,所以最优方案中同一组硬币最多只会翻转一次,故翻转顺序无后效性,考虑贪心:从前往后比较,发现一个不同的硬币就把它和他后面的硬币翻转,计数器累加,这样最后累加结果一定是最优方案的次数。

posted @ 2025-03-20 22:43  C(5,3)  阅读(7)  评论(0)    收藏  举报