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

数学 --- 高斯消元 POJ 1830

开关问题 

Problem's Link: http://poj.org/problem?id=1830


 

Mean: 


analyse:

增广矩阵: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。

Time complexity: O(n)

 

Source code: 

 

/*
* 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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 备份物理服务器以及vCenter Server上的配置信息
  • [转]windows性能计时器
  • jquery实战---标签页效果
  • 前言
  • 在Android Studio中使用shareSDK进行社会化分享(图文教程)
  • 如何在LightSwitch中创建多栏自动完成的下拉框
  • erLang语言特性及游戏应用的可行性分析
  • MongoDB远程主从部署下的全量数据同步及故障恢复策略
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • Windows2003发布MVC4网站
  • 面试中如何介绍自己做过的运维项目
  • [nowCoder] 两个不等长数组求第K大数
  • Flex Cairngorm详解
  • 宽带接入
  • MongoDBTool - 测试版【GUI美化完毕】 源代码发布 --MongoDB爱好者,Winform爱好者 请进...
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【391天】每日项目总结系列128(2018.03.03)
  • dva中组件的懒加载
  • flutter的key在widget list的作用以及必要性
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 多线程编程之:notify 和 wait 用法
  • js对象的深浅拷贝
  • nodejs实现webservice问题总结
  • python3 使用 asyncio 代替线程
  • React Native移动开发实战-3-实现页面间的数据传递
  • React中的“虫洞”——Context
  • web标准化(下)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 从零开始的无人驾驶 1
  • 对超线程几个不同角度的解释
  • 实习面试笔记
  • ​2021半年盘点,不想你错过的重磅新书
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (02)vite环境变量配置
  • (12)目标检测_SSD基于pytorch搭建代码
  • (42)STM32——LCD显示屏实验笔记
  • (52)只出现一次的数字III
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三) diretfbrc详解
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)kafka实战——kafka源码编译启动
  • (转)iOS字体
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 发送邮件
  • .Net 中Partitioner static与dynamic的性能对比