高斯消元 zoj 3645 poj 1222/XOR消元
double a[maxn][maxn] , x[maxn] ; //a[i][j] 系数矩阵 , a[i][n+1] = y[i] , x解 int n ; //n个方程 void guass(){int i , j , k ;double sum , rate ;for(k = 1 ; k < n ; k++){for(i = j = k ; i <= n ; i++) j = fabs(a[i][k]) > fabs(a[j][k]) ? i : j ;for(i = k ; i <= n+1 ; i++) swap(a[j][i] , a[k][i]) ;for(i = k+1 ; i <= n ; i++)for(rate = a[i][k]/a[k][k] , j = k ; j <= n+1 ; j++)a[i][j] -= a[k][j]*rate ;}for(i = n ; i >= 1 ; i--){for(sum = 0 , j = i+1 ; j <= n ; sum += a[i][j]*x[j],j++) ;x[i] = (a[i][n+1] - sum)/a[i][i] ;} }double Fix(double x){ // 将 -0.000 变成 0.00 ,结果输出Fix(x[])if(fabs(x) < 1e-4) return 0 ;return x ; }
另一个版本的高斯消元
double a[Max_N][Max_N], x[Max_N],b[Max_N][Max_N]; // 系数矩阵,double型 void guass(int n){int i,j,k;// 这里 i表示行,j表示列,k表示某行的某列(确定一个元素)for(i=0; i<n; i++)for(j=0; j<n; j++)b[i][j]=a[i][j];for(i=0; i<n; i++)b[i][n] = x[i];for(j=0; j<n; j++){for(k=i=j; i<n; i++) k = fabs(b[i][j]) > fabs(b[k][j]) ? i : k ;for(i=0; i<=n; i++) swap(b[j][i],b[k][i]);//把正在处理的那一行的对角线上的系数变成1,同一行除b[j][j],该位置的系数不处理for(i=j+1 ; i<=n; i++) b[j][i] /= b[j][j];for(i=0; i<n; i++){if(i != j)for(k=j+1; k<=n; k++) b[i][k] -= b[i][j]*b[j][k]; // 做行变换,被消的同一列系数不处理 }} }
zoj 3645 BiliBili
题目来源: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4835
题目意思很明显
给你一个方程组 让你求(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11)
但是方程组的形式是一个二次方程组
(ai1-x1)^2 + (ai2-x2)^2 +(ai3-x1)^2 + (ai4-x2)^2 +(ai5-x1)^2 + (ai6-x2)^2 +(ai7-x1)^2 + (ai8-x2)^2 + (ai9-x2)^2 +(ai10-x1)^2 + (ai11-x2)^2 = dis ^2
于是我们可以发现 用两个方程相减就可以得到一个一次方程组。 这样操作11次得到一个新的方程组,然后用高斯消元法求解即可。
代码如下:
using namespace std ; const double pi= acos(-1); #define arc(x) (x / 180 * pi) typedef long long LL ; const double EPS = 1e-8; const int Max_N = 15; double a[Max_N][Max_N], d[Max_N],b[Max_N][Max_N]; // 系数矩阵,double型 int n; // 方程的个数 void guass(){int i,j,k;for(j=0; j<n; j++){for(k=i=j; i<n; i++) k = fabs(b[i][j]) > fabs(b[k][j]) ? i : k ;for(i=0; i<=n; i++) swap(b[j][i],b[k][i]);for(i=j+1 ; i<=n; i++) b[j][i] /= b[j][j];for(i=0; i<n; i++){if(i != j)for(k=j+1; k<=n; k++) b[i][k] -= b[i][j]*b[j][k];}} } int main(){int t;scanf("%d",&t);while(t--){n=11;for(int i=0; i<=n; i++){for(int j=0; j<n; j++)scanf("%lf",&a[i][j]);scanf("%lf",&d[i]);}memset(b,0,sizeof(b));for(int i=1; i<=n; i++){for(int j=0; j<n; j++){b[i-1][j] = 2*(a[i][j] - a[i-1][j] );b[i-1][n] += a[i][j]*a[i][j] - a[i-1][j]*a[i-1][j];}}for(int i=0; i<n; i++) b[i][n] += d[i]*d[i] - d[i+1]*d[i+1];guass();for(int i=0; i<n-1; i++)printf("%.2lf ",b[i][n] + EPS); // 输出时注意这里的判断, 处理-0.0000printf("%.2lf\n",b[n-1][n] + EPS);}return 0; }
poj 1222 EXTENDED LIGHTS OUT
题目来源: http://poj.org/problem?id=1222
分析:转化为横坐标为灯(灯0,灯1,。。。,灯29),纵坐标为开关(开关0,开关1,。。。,开关29),记为矩阵A,矩阵A与灯的初始状态无关,A(i,j)=1表示开关j对灯i有影响。设矩阵X,X是30*1的矩阵,表示开关是否需要打开。X(i,0)=1表示开关i需要打开。矩阵X是待求的。设矩阵B 30*1,表示结果。B只与灯的初始状态有关,初始时灯i是开着的,则B(i,0)=1。解方程AX=B。
代码如下:
const int Max_N = 35; int a[Max_N][Max_N]; // 系数矩阵,double型,AX = Y int n; // 方程的个数 a[i][n]存储的是Y向量 void guass(){int i,j,k; // i表示行,j表示列for(i=0; i<n; i++){for(k=i; k<n; k++) //寻找不为零的 a[i][i],通过交换if(a[k][i]) break;for(j=0; j<=n; j++) swap(a[k][j], a[i][j]);for(j=0; j<n; j++)if(i != j && a[j][i]) // 如果a[j][i] == 0 ,则该行不需要变换for(k=0; k<=n; k++)a[j][k] ^= a[i][k];} } int main(){int t,u=1;scanf("%d",&t);while(t--){int i,j;n=30;memset(a,0,sizeof(a));for(i=0; i<n; i++)scanf("%d",&a[i][n]); // Y valuefor(i=0; i<n; i++){a[i][i]=1;if(i>5) a[i][i-6] = 1 ;// up a[i][j] 表示第i个灯被第j个开关影响if(i<24) a[i][i+6] =1 ; // downif(i%6) a[i][i-1] = 1 ; // leftif(i%6 != 5) a[i][i+1] = 1 ; //right }guass();printf("PUZZLE #%d\n",u++);for(i=0; i<n; i++){if(i%6 != 5)printf("%d ",a[i][n]);elseprintf("%d\n",a[i][n]);}}return 0; }
转载于:https://www.cnblogs.com/zn505119020/p/3682908.html
高斯消元 zoj 3645 poj 1222/XOR消元相关推荐
- POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)
POJ 1222 EXTENDED LIGHTS OUT 基本的开关灯问题.还保证唯一解. 我们把每一个灯泡当成一个状态xi,总共有30个,而且每个灯与其他灯的关系也很明显.所以我们就可以列30方程3 ...
- 油田(zoj 1709, poj 1562)
油田(zoj 1709, poj 1562) [题目描述] GeoSurvComp 地质探测公司负责探测地下油田. 每次 GeoSurvComp 公 司都是在一块长方形的土地上来探测油田. 在探测时, ...
- 【设计模式】享元模式 实现 ( 实现流程 | 抽象享元类 | 具体享元类 | 享元工厂 | 用户调用 | 代码模板 )
文章目录 I . 享元模式 实现流程 II . 享元模式 抽象享元类 III . 享元模式 具体享元类 IV . 享元模式 享元工厂 V . 享元模式 用户调用 I . 享元模式 实现流程 1 . 定 ...
- 阵元间隔为半波长的均匀分布16元线阵
% %阵元间隔为半波长的均匀分布16元线阵,预成指向士arcsin((2i-1)/16)(i=l,2,-,16)的16个均匀加权常规波束,远场有5个互 % 不相关的目标源发射信号,每个源相对于基阵的方 ...
- 元宇宙行业深度研究报告:为什么元宇宙是下一代互联网?
目录 1.什么是元宇宙?为什么元宇宙是下一代互联网 1.1. 元宇宙:下一代沉浸式互联网 1.1.1.超越虚拟与现实的科幻畅想:元宇宙概念来源 1.1.2.新技术由点突破连接成面,移动互联网继承者的孕 ...
- 【文末福利】元宇宙真的是人间天堂吗?元宇宙时代的5大风险
为什么人类一直想要创造元宇宙? >>>> 数千年前,柏拉图曾经对游戏与神的关系缘起做过解释.他认为,神之所以创造人类,是因为这件事情可以娱神,人类在游戏的过程中,给神带来了欢乐 ...
- 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
从口袋里只剩两个1元硬币,到一年赚到20亿元,需要多长时间?深圳市脉山龙信息技术股份有限公司总裁汪书福身体力行之后的答案是:12年. 这不是天方夜谭.尽管他现在食有肉,出有车,挥杆高尔夫球场,高等学府 ...
- 快手2021年营收810亿元 经调整净亏损188亿元
快手科技近日发布截至2021年12月31日止年度业绩公告,财报显示,2021年快手总收入810.82亿元,同比增长37.9%:毛利340.29亿元,同比增长42.9%:年内亏损780.77亿元,同比减 ...
- 有些卖花生的人6.5元拿货,却卖6元,这是怎么回事?求解?
俗话说得好"无商不奸",商人就是在买卖之间赚钱,无利不起早,花生贩子6.5元拿货,看似卖6元赔本,其实收来的花生早已变了样.自古以来就是辛苦种地的农民始终不如倒卖的赚钱,我家乡在山 ...
最新文章
- cms基于nodejs_我如何使基于CMS的网站脱机工作
- Colab不好用,有人花两年开发了一个新notebook,支持实时协作还更快
- vue数组转Excel表格导出
- 亿级大表分库分表实战总结(万字干货,实战复盘)
- pyDash : Linux 性能监测工具
- python sql解析引擎_python SQLAlchemy 中的Engine详解
- c语言形考作业1答案,c语言程序设计形考任务二答案.doc
- 21-爬虫之scrapy框架selenium的使用08
- 计算机win7分盘,win7电脑如何分盘
- css预处理器sass使用教程(多图预警)
- 0 win10重装partition_教你在安装WIN10系统中所遇到问题处理方法
- qt 的mysql的库
- 【重要】ionic和Angular的安装步骤
- java 反射解读理解
- druid 多数据源_SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
- 三十岁还没做到管理层的人,后来都怎么样了?
- 项目管理概论网课作业(用于复习)
- linux 卸载jdk和安装
- 手握百万恶意IP,阿里云要跟黑客拼了 | 云栖大会
- 炫酷好玩好用的卫星全景地图
热门文章
- 【JAVA实例】代码生成器的原理讲解以及实际使用
- iOS版本更新与集成百度地图
- 【分享】免费建立自己的站点
- Java中注解(非注释^_^) --转载
- 微软的新一代web开发工具 - WebMatrix2
- PHP 中Cookie和Session的使用
- 解决VMware Tools installation cannot be started manually while Easy Install is in progress.
- 给Eclipse插件的View加上菜单和工具条
- Android* 4.1.1 (Jelly Bean) x86 模拟器系统映像
- 理解 Java 的 GC 与 幽灵引用