这道题目和1830比较类似,1830是求解的个数,这道题目相当于求线性方程组的整数解。

题目主要内容:有9个钟,其中9个操作方法来扳动上面的指针,每个操作每次只能把指针移动90度,且每个操作是对一组钟进行操作(即执行每个操作之后有几个钟的状态被改变了90度而不是单独某个钟的状态改变了90度)。操作与其影响的钟的对应表如表一所示:

表一

题目要求的是给出这9个钟的初始状态(0表示指向12点,1表示指向3点,2表示指向6点,3表示指向6点)用操作1-9采用最少的移动次数操作这些钟,使它们都指向12点。

思路:根据操作与钟表的关系我们可以构造一个关系矩阵,如表二所示

行表示钟,列表示操作,例如,操作1,2,4被采用之后A都会受到影响,移动一步(即90度)。所以题目的意思就是求操作1-9都被操作了多少次,使得每个钟表从初始状态被调整到12点的那个状态,即每个钟表的状态变化=操作1操作次数+操作2操作次数+…+操作9*操作次数。

#include <iostream>
#include <math.h>
#include<fstream>
#include<cstdlib>
using namespace std;class Mat {public:Mat(int x, int y, double d[]) {rows = x;cols = y;if (x<y - 1)cout << "Not enough" << endl;int c = 0;for (int i = 0; i<x; i++) {for (int j = 0; j<y; j++) {data[i][j] = d[c];c++;}}}void print();int matcols();int matrows();void gauss();void change(int x);void result();void value();void threeDeterminant();
private:int rows;int cols;double data[200][200];};void Mat::print() {for (int i = 0; i<rows; i++) {for (int j = 0; j<cols; j++) {cout.width(4);cout << data[i][j] << " ";}cout << endl;}cout << endl;
}int Mat::matcols() {return cols;
}int Mat::matrows() {return rows;
}void Mat::gauss() {double m = 0;double flag = 0;for (int i = 0; i<rows; i++) {change(i);print();if (data[i][i] != 0) {for (int j = i + 1; j<rows; j++) {//m = 1;if (data[j][i] == 0)continue;m = fabs(1.0 * data[i][i] / data[j][i]);cout<<data[i][i];cout<<endl;cout<<data[j][i];cout<<endl;if ((data[j][i] > 0 && data[i][i] > 0) || (data[j][i] < 0 && data[i][i] < 0)) {flag = 1;}else{flag = -1;}for (int k = i; k<cols; k++) {data[j][k] = data[j][k] * m - flag*data[i][k];}print();}}}
}void Mat::change(int x) {double temp = 0;double max = fabs(data[x][x]);int loc = x;for (int i = x; i < rows; i++) {if (fabs(data[i][x]) > max) {max = fabs(data[i][x]);loc = i;}}if (x != loc) {for (int i = x; i < cols; i++) {temp = data[x][i];data[x][i] = data[loc][i];data[loc][i] = temp;}}
}void Mat:: value(){    double value = 1;      for (int i = 1; i < cols; i++) {value = data[i-1][i-1]*value;    }cout << value<< " "; cout<<endl;
}void Mat:: threeDeterminant()
{double value = 0;value = data[0][0]*data[1][1]*data[2][2]+ data[1][0]*data[2][1]*data[0][2]+ data[2][0]*data[0][1]*data[1][2]- data[2][0]*data[1][1]*data[0][2]- data[1][0]*data[0][1]*data[2][2]- data[0][0]*data[2][1]*data[1][2];cout<<"Determinant = "<< value<<endl;
}void Mat::result() {double ans[100] = {0};double sum = 0;for (int i = 1; i < cols; i++) {sum = data[cols - 1- i][cols -1 ];for (int j = 1; j < i; j++) {sum -= ans[cols - j] * data[rows - i][rows - j];}ans[cols - i] = sum / data[cols-1 - i][cols - 1 - i];}for (int i = 1; i < cols; i++) {cout << ans[i] << " ";}
}int main(int argc, char** argv) {double v[100000] = {};int n;int cc;  ifstream infile("1.txt",ios::in);int count =0;infile>>n;while(infile){infile>>cc;v[count] = cc;count++;}Mat a(n, n+1, v);a.print();
//  a.threeDeterminant();a.gauss();a.print();a.result();cout<<endl;a.value();return 0;
}

1.TXT 文件内容
9
1 1 0 1 0 0 0 0 0 12
1 1 1 0 1 0 0 0 0 12
0 1 1 0 0 1 0 0 0 12
1 0 0 1 1 0 1 0 0 12
1 0 1 0 1 0 1 0 1 12
0 0 0 1 0 0 1 1 0 12
0 0 0 0 1 0 1 1 1 12
0 0 0 0 0 1 0 1 1 12

ps: 求解线性方程组的方法有很多,Gauss方法也是手段之一。

ACM竞赛学习整理--Gauss求解POJ1166相关推荐

  1. ACM竞赛学习整理--矩阵运算

    ACM竞赛学习整理–矩阵运算 了解矩阵类 [任务] 实现矩阵的基本变换 [接口] 结构体:Matrix 成员变量: int n,m 矩阵大小 int a[][] 矩阵内容 重载运算符: +.-.x 成 ...

  2. ACM竞赛学习整理开篇之01背包问题

    ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...

  3. ACM竞赛学习整理--模拟算法举例POJ1068

    什么是模拟 仅仅使用较简单的算法和数据结构的题目. 模拟顾名思义,就是按照题目的要求,一步步写出代码. 常见的模拟方法 a.用数学量和图形描述问题 计算机处理的是数学量.若要用计算机解决实际问题,需要 ...

  4. ACM竞赛学习指南(算法工程师成长计划)

    算法工程师成长计划 近年来,算法行业异常火爆,算法工程师年薪一般20万-100 万.越来越多的人学习算法,甚至很多非专业的人也参加培训或者自学,想转到算法行业.尽管如此,算法工程师仍然面临100万的人 ...

  5. NOIP竞赛学习整理--动态规划算法举例P1264

    动态规划 什么是动态规划? 动态规划是解决多阶段决策最优化问题的一种思想方法.所谓"动态",指的是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起状态的转移, ...

  6. ACM竞赛学习记录------迷宫寻宝(BFS广度优先搜索)

    题目 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上.下.左.右) ...

  7. ACM如何入门,ACM竞赛需要学习哪些算法?

    #################成绩################## 大一:2017年4月份"玲珑杯"河南工业大学2017年ACM程序设计大赛暨河南高校邀请赛,获得银奖 20 ...

  8. 信息学竞赛学习资料整理

    信息学竞赛学习资料整理 一.总结 一句话总结:可以在网上获取各种免费视频资源,网上超多,也可以买书,也可以去刷题网站多做题 1.信息学竞赛书籍推荐? 信息学竞赛一本通 算法导论 组合数学 <CC ...

  9. 两年ACM竞赛的所有算法总结

    这是我经过两年ACM竞赛的所有算法总结,希望对你有帮助. 目录 最短路 Floyd Dijkstra SPFA 最小生成树 Kruskal Prim 动态规划 01背包 完全背包 多重背包 最长公共子 ...

最新文章

  1. centos7 如何安装部署k8s_如何在centos7上安装FreeIPA的客户端
  2. JS 动态显示 获取下拉框的多个值
  3. 里约奥运会的五项技术创新
  4. Linux 命令(49)—— export 命令(builtin)
  5. 开博第一篇,附上我开通博客的理由
  6. java怎么定义_java怎么定义方法
  7. AMD RX580刷BIOS提高ETH算力
  8. 45% 72% 100sRGB 色域
  9. 4.3.5 导频插入
  10. 饶了我的耳朵吧,音乐
  11. php网站登录界面验证码打不开,php网站无法显示验证码
  12. Springboot-Retry组件@Recover失效问题解决
  13. 2048php,Phaser实现2048
  14. 记录一下我的phpcms下载模板的下载列表页面不能够显示出列表页面
  15. 服务器sni协议,SNI协议分析
  16. 把阿里旺旺的图标放到你自己的网站上,直接点击按钮就可以让顾客联系到你
  17. QQ农场外挂开发实践
  18. android 聊天气泡背景图片,聊天气泡背景图片拉伸设置
  19. 【PC】如何导出windows锁屏壁纸
  20. BLAM的安装与使用

热门文章

  1. 二十万字C/C++、嵌入式软开面试题全集宝典十
  2. mysql 优化300例_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
  3. 云炬金融每日一题20210906
  4. [云炬学英语]每日一句2020.8.26
  5. python结合c语言能干啥_第9p,Python是什么?学了Python能干什么?
  6. Js提交表单的两种方法
  7. Delphi利用MSCOMM控件进行GPS数据采集
  8. Delphi中PCAHR的妙用
  9. 【CyberSecurityLearning 53】信息收集
  10. linux 内存显示括号内字母的含义