对于图中的每一个点假设点击Xi * m + j 然后每个点都有那么对于每一个点可以列举出一个方程式,n*m个点解n*m个未知数。利用高斯消元就可以解决。

问题就在这个题目可能不止有一个特,所以我们需要求解的时特解。然后那一个求解的我看不懂。

#include <bits/stdc++.h>
using namespace std ; const int maxn = * ;
int n, m, cnt;
int id[][], data[][], a[maxn][maxn], x[maxn]; int gcd(int a, int b){
return b?gcd(b, a%b) : a;
} int lcm(int a, int b){
return a / gcd(a, b) * b;
} void init(){
memset(x, , sizeof(x));
memset(a, , sizeof(a));
for(int i = ; i <= n; i ++){
for(int j = ; j <= m; j ++){
a[id[i][j]][cnt] = ( - data[i][j])%;
a[id[i][j]][id[i][j]] = ;
if( i > ) a[id[i][j]][id[i - ][j]] = ;
if( j > ) a[id[i][j]][id[i][j - ]] = ;
if( i < n) a[id[i][j]][id[i + ][j]] = ;
if( j < m) a[id[i][j]][id[i][j + ]] = ;
}
}
} void gaussi(){
for(int i = ; i < cnt; i ++){
int top = i;
for(int j = i + ; j < cnt; j ++)
top = abs(a[j][i]) > abs(a[top][i]) ? j : top;
if(a[top][i]){
for(int j = i; j <= cnt; j ++)
swap(a[top][j], a[i][j]);
for(int j = i + ; j < cnt; j ++)
if(a[j][i]){
int d = lcm(a[j][i], a[i][i]);
int x1 = d/a[j][i], x2 = d/a[i][i];
for(int k = i; k <= cnt; k ++)
a[j][k] = ((a[j][k] * x1 - a[i][k] * x2)% + ) % ;
}
}
}
int ans = ;
for(int i = cnt - ; i > ; i --){
x[i] = a[i][cnt];
for(int j = i + ; j < cnt; j ++)
x[i] = ((x[i] - a[i][j] * x[j])% + )%;
x[i] = a[i][i] * x[i] % ;
ans += x[i];
}
printf("%d\n", ans);
for(int i = ; i < cnt; i ++){
while(x[i]){
printf("%d %d\n", (i - )/m + , (i - )%m + );
x[i] --;
}
} } int main () {
int T ;scanf("%d",&T);
while(T -- ){
cnt = ;
scanf("%d%d",&n,&m);
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
scanf("%d",&data[i][j]), id[i][j] = cnt++;
init();
gaussi();
}
return ;
}

Gambler Bo (高斯消元求特解)的更多相关文章

  1. hdu 5755 2016 Multi-University Training Contest 3 Gambler Bo 高斯消元模3同余方程

    http://acm.hdu.edu.cn/showproblem.php?pid=5755 题意:一个N*M的矩阵,改变一个格子,本身+2,四周+1.同时mod 3;问操作多少次,矩阵变为全0.输出 ...

  2. hdu 5755 Gambler Bo 高斯消元

    题目链接 给n*m的方格, 每个格子有值{0, 1, 2}. 然后可以对格子进行操作, 如果选择了一个格子, 那么这个格子的值+2, 这个格子上下左右的格子+1, 并且模3. 问你将所有格子变成0的操 ...

  3. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  4. HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)

    网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...

  5. 【BZOJ2137】submultiple 高斯消元求伯努利数

    [BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...

  6. SPOJ HIGH(生成树计数,高斯消元求行列式)

    HIGH - Highways no tags  In some countries building highways takes a lot of time... Maybe that's bec ...

  7. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

  8. 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基

    题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...

  9. 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基

    题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...

随机推荐

  1. Interceptor的基本介绍和使用

    简介 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Act ...

  2. 继承数组的slice方法

    <script> var arr=[1,2,3,4,5]; console.log(Array.prototype.slice.call(arr,1)); </script> ...

  3. 洛谷P4052 [JSOI2007]文本生成器 AC自动机+dp

    正解:AC自动机+dp 解题报告: 传送门! 感觉AC自动机套dp的题还挺套路的,,, 一般就先跑遍AC自动机,然后就用dp dp的状态一般都是f[i][j]:有i个字符,是ac自动机上的第j个节点, ...

  4. BZOJ1280 Emmy卖猪pigs 网络流

    正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...

  5. 程序------>算法

    一.算法: 1.算法的定义:   算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有序序列,并且每条指令表示一个或多个操作.即算法是描述解决问题的方法.(对于给定的问题是可以有多种 算法进行解 ...

  6. Linux I/O 调度器

    每个块设备或者块设备的分区,都对应有自身的请求队列,  而每个请求队列都可以选择一个I/O调度器来协调所递交的.I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动, ...

  7. EC2(elastic compute cloud,弹性计算云,又称EC2实例)

    (一)定义:EC2和实例EC2(elastic compute cloud,弹性计算云),即云中的虚拟服务器. 是用于在云中创建和运行虚拟机的 Amazon Web 服务.简言之,EC2就是一部具有无 ...

  8. 误删除innodb ibdata数据文件 文件句柄 文件描述符 proc fd

    误删除innodb ibdata数据文件  文件句柄  文件描述符  proc  fd http://www.cnblogs.com/gomysql/p/3702216.html 提示:如果不小心通过 ...

  9. 循环打印视图(学习WHILE循环)

    ) --视图名 --总视图数 --循环次数 SELECT @RowCount = COUNT(NAME) FROM sysobjects WHERE xtype = 'v' WHILE @i < ...

  10. double类型相减有小数误差

    如 :19.9-9.9=9.9999999999999,而不是10double相减会转换成二进制,因double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差 //两个Do ...