• Uva



    刚開始想了一个变换顺序,模拟进行操作。写了浩浩荡荡200多行最后WA了,感觉还是方法不正确。。。后来从仅仅能0变1,不能1变0入手,应该先满足上1下0的情况,其它的三种情况用简单的变换就能够了。

    先用0-1和1-0进行配对。配对一次。交换S中的0和1。

    假设没有0-1了,那就用?-1和1-0进行配对。先把?

    换成0,再运行上一步。

    假设0-1和?

    -1都没有了,可是1-0还有,说明无解。

    把上面的1配对成功之后。其它的都能够通过一次操作配对。

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cctype>
    #include <cstring>
    #include <string>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <bitset> 
    #include <cassert> 
    #include <cmath>
    #include <functional>
    
    using namespace std;
    
    const int maxn = 105;
    int oneVzero, zeroVone, qVone, qVzero;
    int ans;
    string S, T;
    
    void solve()
    {
    	for (int i = 0; i < S.length(); i++) {
    		if (S[i] == '1' && T[i] == '0') {
    			oneVzero++;
    		}
    		else if (S[i] == '0' && T[i] == '1') {
    			zeroVone++;
    		}
    		else if (S[i] == '?' && T[i] == '0') {
    			qVzero++;
    		}
    		else if (S[i] == '?' && T[i] == '1') {
    			qVone++;
    		}
    	}
    
    	while (oneVzero && zeroVone) { // 交换1-0和0-1
    		oneVzero--;
    		zeroVone--;
    		ans++;
    	}
    	while (oneVzero && qVone) { // 交换1-0和?-1
    		oneVzero--;
    		qVone--;
    		ans += 2;
    	}
    	if (oneVzero) {
    		ans = -1;
    	}
    	else {
    		ans += zeroVone + qVone + qVzero;
    	}
    }
    
    int main()
    {
    	ios::sync_with_stdio(false);
    	int C;
    	cin >> C;
    	int kase = 0;
    	while (C--) {
    		cin >> S >> T;
    
    		// 初始化
    		ans = 0;
    		oneVzero = zeroVone = qVzero = qVone = 0;
    		solve();
    		cout << "Case " << ++kase << ": " << ans << endl;
    	}
    
    	return 0;
    }




    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4872305.html
Copyright © 2020-2023  润新知