数学 --- 高斯消元 POJ 1830
2015-06-17 22:38
274 查看
开关问题
Problem's Link: http://poj.org/problem?id=1830
[b]Mean:[/b]略
[b]analyse:[/b]
增广矩阵:con[i][j]:若操作j,i的状态改变则con[i][j]=1,否则con[i][j]=0。
最后的增广矩阵应该是N*(N+1),最后一列:对比开光的始末状态,若相同则为0,若不同则为1;
最后的解共有三种:
1.无解,既出现了一行中前面N个数为0,第N+1的值非0;
2.没有第1种情况出现,存在X行数值全为0,则解的个数为2^X;
3,没有1,2 两种情况出现,唯一解,输出1。
[b]Time complexity: O(n)[/b]
[b]Source code: [/b]
/* * this code is made by crazyacking * Verdict: Accepted * Submission Date: 2015-06-17-22.36 * Time: 0MS * Memory: 137KB */ #include <queue> #include <cstdio> #include <set> #include <string> #include <stack> #include <cmath> #include <climits> #include <map> #include <cstdlib> #include <iostream> #include <vector> #include <algorithm> #include <cstring> #define LL long long #define ULL unsigned long long using namespace std; const int p=30; int con[p][p]; int N; int beg[p],fin[p]; int function() { int i,j,k,t,row,col,temp,count=0; for(row=col=1; row<=N&&col<=N; row++,col++) { if(con[row][col]==0) { for(i=row+1; i<=N; i++) { if(con[i][col]!=0) { for(j=1; j<=N+1; j++) { swap(con[row][j],con[i][j]); } break; } } } if(con[row][col]==0) { row--; continue; } for(k=1; k<=N; k++) { if(con[k][col]!=0&&k!=row) { temp=-(con[k][col]/con[row][col]); for(t=col; t<=N+1; t++) { con[k][t]=(temp*con[row][t])+con[k][t]; } } } } for(k=row; k<N+1; k++) if(con[k][N+1]!=0) { return 0; } if(row==N+1) { return 1; } else { return 1<<(N-row+1); } } int main() { int T,i,j,x,y; scanf("%d",&T); while(T--) { scanf("%d",&N); for(i=1; i<=N; i++) { scanf("%d",&beg[i]); } for(i=1; i<=N; i++) { scanf("%d",&fin[i]); } scanf("%d%d",&x,&y); memset(con,0,sizeof(con)); while(x!=0&&y!=0) { con[y][x]=1; scanf("%d%d",&x,&y); } for(i=1; i<=N; i++) { con[i][i]=1; } for(i=1; i<=N; i++) { if(beg[i]==fin[i]) { con[i][N+1]=0; } else { con[i][N+1]=1; } } int pp = function(); if(pp) { printf("%d\n",pp); } else { printf("Oh,it's impossible~!!\n"); } } }
View Code
相关文章推荐
- java transient简介
- 黑马day04 定时刷新&是否缓冲
- Mysql Field * doesn't have a default value解决方法
- 【C#】教你纯手工用C#实现SSH协议作为GIT服务端
- nyoj27-水池数目 (求连通块数目)【dfs】
- 数据库连接池配置
- Dom4j解释和生成XML文件
- 欢迎使用CSDN-markdown编辑器
- 保护企业免受网络攻击的7个步骤
- setContentView为什么不能直接获取控件的属性
- leetcode:Unique Binary Search Trees
- Excel图表编程应用大全(2):图表编程基础
- hihoCoder #1181: 欧拉路·二 (输出路径)
- PHP接收GET和POST请求
- 每天一个linux命令(42):kill命令
- centos常用命令
- chapter13test3
- artTemplate 前端js模版引擎
- 7个步骤让PC网站自动适配手机网页
- VC2010 遇到不适当的参数