zoukankan      html  css  js  c++  java
  • Codeforces 1251B Binary Palindromes

    思路:

    1.n个字符串,我们一定可以创造出n-1个回文串,我们只需要判断最后一个能否成为回文串即可;
    2.字符串分为两种:奇数长度的和偶数长度的,其中奇数长度的一定是由奇数个0/1加上偶数个0/1,偶数长度的一定是由偶数个数的0和1相加;
    3.在最开始统计此次所有字符串0的总和的奇偶性zero和1的总和的奇偶性one(值为1代表奇数,0代表偶数),同时计算出奇数长度串的个数,每有一个奇数串,对zeroone做出变化,最后判断zeroone是否都为0即可;

    代码:

    #define IOS ios::sync_with_stdio(false);cin.tie(0)
    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> p;
    typedef long long ll;
    #define isOp(x,y) ((x^y)<0)
    #define mem(a,x) memset(a,x,sizeof(a))
    #define m_p(a,b) make_pair(a,b)
    #define p_b(a) push_back(a)
    #define rp(i,n) for(int i=0;i<n;i++)
    #define rpn(i,n) for(int i=1;i<=n;i++)
    #define l_b(a,n,x) lower_bound(a,a+n,x)-a
    #define u_b(a,n,x) upper_bound(a,a+n,x)-a
    int main(){
    	IOS;
    	int q;
    	cin>>q;
    	rp(i,q){
    		int n;
    		cin>>n;
    		int odd_n=0,even_n=0;//统计奇数长度和偶数长度的字符串个数
    		bool one=false,zero=false;//false为偶 true为奇 
    		rp(j,n){
    			string s;
    			cin>>s;
    			if(s.length()%2) odd_n++;
    			else even_n++;
    			for(auto e:s){
    				if(e=='1') one=!one;
    				else zero!=zero;
    			}
    		}
    		while(odd_n--){
    			if(one) one=!one;
    			else zero!=zero;
    		}
    		if(!one&&!zero) cout<<n<<'
    ';
    		else cout<<n-1<<'
    ';
    	}
    	return 0;
    }
    
  • 相关阅读:
    UVa 541 Error Correction
    UVa 11045 My T-shirt suits me
    【模板】Ford-Fulkerson算法
    POJ 1273 Drainage Ditches
    UVa 10158 War
    UVa 658 It's not a Bug, it's a Feature!
    【模板】并查集
    【模板】Floyd-Warshall算法
    UVa 10034 Freckles
    UVa 10048 Audiophobia
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308894.html
Copyright © 2011-2022 走看看