OpenJudge - 8469:特殊密码锁

点击打开链接

这道题困扰了我几天

虽然并不懂贪心 但是早就想明白了如果第i个不一样就按第i+1个

但是这样就会卡在

011010110101010111111011111
000010111000000001101001110

这组数据上

debug发现如果按我的上述算法那么最后一个数总是不能正常的(我还手工确认了。。)

but

百度此题发现大家除了说按法之外还都说了第一个要不要按要特别讨论 那就讨论一下咯 手工神奇的发现按了一下第一个就会有答案了

然后就理解了为什么要跑两遍 因为要试一下没按第一个的情况和没按第一个的情况 看哪个情况是可以的 如果都不可以那么肯定就是impossible了 然后输出最优的一种情况就可以了

代码附上

#include
#include
#include
#include
using namespace std;
int ans1=0;
int ans2=0;
char aa[100],bb[100];
int a[100],b[100],c[100],l,f1,f2;
void fz(int x)
{
	a[x]=(a[x]+1)%2;
	a[x-1]=(a[x-1]+1)%2;
	if(x


你可能感兴趣的:(OpenJudge - 8469:特殊密码锁)