POJ 1830 开关问题 高斯消元
来源:互联网 发布:autocad2007软件下载 编辑:程序博客网 时间:2024/06/04 17:46
题目大意:给出灯的一些关系,求有多少种方法从始状态到终状态。
思路:其实根据灯的这些关系就可以列出一系列方程,然后用高斯消元就可以求出自由元的数量,答案就是2^自由元的数量。
CODE:
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX 50using namespace std;int cnt;int a[MAX][MAX];inline int Gauss(){int re = 0,now = 1;for(int j,i = 1; i <= cnt; ++i) {for(j = now; j <= cnt && !a[j][i]; ++j);if(j > cnt) {++re;continue;}for(int k = 1; k <= cnt + 1; ++k)swap(a[now][k],a[j][k]);for(j = now + 1; j <= cnt; ++j)if(a[j][i])for(int k = i; k <= cnt + 1; ++k)a[j][k] ^= a[now][k];++now;}for(int i = now; i <= cnt; ++i)if(a[i][cnt + 1])return -1;return 1 << re;}int main(){int T;for(cin >> T; T--;) {memset(a,0,sizeof(a));scanf("%d",&cnt);for(int i = 1; i <= cnt; ++i)scanf("%d",&a[i][cnt + 1]);for(int x,i = 1; i <= cnt; ++i) {scanf("%d",&x);a[i][cnt + 1] ^= x;}int x,y;while(scanf("%d%d",&x,&y),x + y)a[y][x] = 1;for(int i = 1; i <= cnt; ++i)a[i][i] = 1;int ans = Gauss();if(ans == -1)puts("Oh,it's impossible~!!");elseprintf("%d\n",ans);}return 0;}
0 0
- POJ 1830 开关问题 高斯消元
- poj 1830 开关问题 高斯消元
- poj 1830 开关问题 高斯消元
- POJ 1830 开关问题 (高斯消元)
- POJ 1830 开关问题 (高斯消元)
- poj 1830 开关问题(高斯消元)
- poj 1830 开关问题 高斯消元
- [高斯消元] poj 1830 开关问题
- POJ 1830 开关问题(高斯消元)
- poj 1830 开关问题 高斯消元
- 【高斯消元】【poj 1830】开关问题
- POJ 1830 开关问题 (高斯消元)
- POJ 1830 开关问题 高斯消元
- poj 1830 开关问题 (高斯消元)
- [POJ 1830] 开关问题 高斯消元
- poj 1830 开关问题高斯消元
- poj 1830 开关问题 (高斯消元)
- 【高斯消元】poj 1830 开关问题
- Makefile之变量赋值
- 1042. Shuffling Machine (20)
- Linux和Unix系统的关系和区别详细介绍
- jxls框架解析(一)报表导出快速入门
- 蓝桥杯 基础训练 数列排序
- POJ 1830 开关问题 高斯消元
- Birthday Cake
- Go基础
- ServletContextListener实现全局配置装载入内存
- Android4.0 Keyguard解锁屏机制
- 欧洲陷入三大危机
- pgsql数据库和PHP中日期、时间戳处理函数
- Machine Learning - IV. Linear Regression with Multiple Variables多变量线性规划 (Week 2)
- SpringMVC 错误分析:@Autowired Could not autowire field