码迷,mamicode.com
首页 > 其他好文 > 详细

poj1830 开关问题

时间:2018-03-07 10:28:14      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:main   scanf   iostream   splay   ase   ++   size   pre   ring   


\(a_{i,j}\) 表示第 \(j\) 个开关对第 \(i\) 号开关产生的影响,\(x_i\) 为对第 \(i\) 个开关的操作,则
\[\begin{cases} a_{1,1}x_1\ \mathrm{xor}\ a_{1,2}x_2\ \mathrm{xor}\ \cdots\ \mathrm{xor}\ a_{1,n}x_n=start_1 \ \mathrm{xor}\ end_1 \a_{2,1}x_1\ \mathrm{xor}\ a_{2,2}x_2\ \mathrm{xor}\ \cdots\ \mathrm{xor}\ a_{2,n}x_n=start_2 \ \mathrm{xor}\ end_2 \\cdots \a_{n,1}x_1\ \mathrm{xor}\ a_{n,2}x_2\ \mathrm{xor}\ \cdots\ \mathrm{xor}\ a_{n,n}x_n=start_n \ \mathrm{xor}\ end_n \\end{cases}\]
解就是了

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int T, a[35], sta, end, n, uu, vv;
int gauss(){
    for(int i=1; i<=n; i++){
        int maxi=i;
        for(int j=i+1; j<=n; j++)
            if(a[j]>a[maxi])
                maxi = j;
        swap(a[maxi], a[i]);
        if(a[i]==0) return 1<<(n-i+1);
        if(a[i]==1) return -1;
        for(int j=n; j; j--)
            if(a[i]&(1<<j)){
                for(int k=1; k<=n; k++)
                    if(k!=i && a[k]&(1<<j))
                        a[k] ^= a[i];
                break;
            }
    }
    return 1;
}
int main(){
    cin>>T;
    while(T--){
        memset(a, 0, sizeof(a));
        sta = end = 0;
        scanf("%d", &n);
        for(int i=1; i<=n; i++){
            scanf("%d", &uu);
            a[i] ^= uu;
        }
        for(int i=1; i<=n; i++){
            scanf("%d", &uu);
            a[i] ^= uu;
            a[i] |= 1<<i;
        }
        while(scanf("%d %d", &uu, &vv)!=EOF){
            if(!uu && !vv)  break;
            a[vv] |= 1<<uu;
        }
        int re=gauss();
        if(re<0)    printf("Oh,it‘s impossible~!!\n");
        else    printf("%d\n", re);
    }
    return 0;
}

poj1830 开关问题

标签:main   scanf   iostream   splay   ase   ++   size   pre   ring   

原文地址:https://www.cnblogs.com/poorpool/p/8520357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!