当前位置: 首页 > news >正文

POJ 1830 开关问题 高斯消元

  题目链接: http://poj.org/problem?id=1830

  题目描述: 给出开关的初始, 末状态, 再给出互相影响的开关关系, 输出有几种方式可以从初始到结束状态

  解题思路: 这是个高斯消元题.....题单可能是放错了吧.....解的个数为2^(自由变元的个数)

  代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <iterator>
#include <cmath>
#include <algorithm>
#include <stack>
#include <deque>
#include <map>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define mem0(a) memset(a,0,sizeof(a))
#define sca(x) scanf("%d",&x)
#define de printf("=======\n")
typedef long long ll;
using namespace std;

const int maxn = 40;
int a[maxn][maxn];;
int n;
int s[maxn];
int e[maxn];

int gauss() {
    int i;
    int j;
    for( i = 1, j = 1; i <= n && j <= n; j++ ) {
        
            int k = i;
            for( k = i; k <= n; k++ ) {
                if( a[k][j] ) break;
            }
            if( a[k][j] ) {
                for( int r = 1; r <= n+1; r++ ) {
                    swap(a[i][r], a[k][r]);
                }
                for( int r = 1; r <= n; r++ ) {
                    if( r != i && a[r][j] ) {
                        for( int k = 1; k <= n+1; k++ ) {
                            a[r][k] ^= a[i][k];
                        }
                    }
                }
                i++;
            }
        
    }
    for( int j = i; j <= n; j++ ) {
        if( a[j][n+1] ) return -1;
    }
    return 1<<(n-i+1);
}
int main() {
    int t;
    sca(t);
    while( t-- ) {
        sca(n);
        mem0(a);
        for( int i = 1; i <= n; i++ ) {
            sca(s[i]);
        }
        for( int i = 1; i <= n; i++ ) {
            sca(e[i]);
            a[i][n+1] = s[i] ^ e[i];
            a[i][i] = 1;
        }
        int x, y;
        while( scanf( "%d%d", &x, &y ) && x+y ) {
            a[y][x] = 1;
        }
        int ans = gauss();
        if( ans == -1 ) {
            printf( "Oh,it's impossible~!!\n" );
        }
        else {
            printf( "%d\n", ans );
        }
    }
}
View Code

  思考: 有空应该回顾一下高斯消元和fft这种模板的, 等我这两个专题刷完的吧, 不复习有点儿忘了感觉.....是时候应该学习高数了......

转载于:https://www.cnblogs.com/FriskyPuppy/p/7445185.html

相关文章:

  • CAN协议,系统结构和帧结构
  • New Concept English Two 11 28
  • centos 配置sudo记录日志
  • Android图文混排实现方式详解
  • crossdomain.xml解决跨域问题
  • git克隆远程项目并创建本地对应分支
  • compile FFMPEG under windows
  • gulp 和 Browsersync 的联合使用
  • 大数据计算框架与平台
  • 甲骨文推Oracle Exadata Cloud Machine 专有云产品线进一步完善
  • 全面解析光纤光缆、网线和电缆的区别
  • Java保留两位小数的方法
  • 想精准营销?神策分析无缝集成推送平台
  • 苹果花2亿美元买了家“暗数据”人工智能初创公司
  • MOSS中的计时器作业
  • JS 中的深拷贝与浅拷贝
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • flask接收请求并推入栈
  • github从入门到放弃(1)
  • 分享几个不错的工具
  • 基于axios的vue插件,让http请求更简单
  • 日剧·日综资源集合(建议收藏)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用 Docker 部署 Spring Boot项目
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 推荐一个React的管理后台框架
  • 温故知新之javascript面向对象
  • 异常机制详解
  • ​iOS安全加固方法及实现
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)创业的注意事项
  • .NET Core 中的路径问题
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 中创建支持集合初始化器的类型
  • .net的socket示例
  • .NET建议使用的大小写命名原则
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @EnableAsync和@Async开始异步任务支持
  • @Valid和@NotNull字段校验使用
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [bzoj 3534][Sdoi2014] 重建
  • [C/C++] C/C++中数字与字符串之间的转换
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [CISCN2019 华东北赛区]Web2
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [gdc19]《战神4》中的全局光照技术
  • [js]- 两个对象的合并(Object.assign)