Gambler Bo (高斯消元求特解)
对于图中的每一个点假设点击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 (高斯消元求特解)的更多相关文章
- 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.输出 ...
- hdu 5755 Gambler Bo 高斯消元
题目链接 给n*m的方格, 每个格子有值{0, 1, 2}. 然后可以对格子进行操作, 如果选择了一个格子, 那么这个格子的值+2, 这个格子上下左右的格子+1, 并且模3. 问你将所有格子变成0的操 ...
- HDU4870_Rating_双号从零单排_高斯消元求期望
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...
- HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)
网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...
- 【BZOJ2137】submultiple 高斯消元求伯努利数
[BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...
- SPOJ HIGH(生成树计数,高斯消元求行列式)
HIGH - Highways no tags In some countries building highways takes a lot of time... Maybe that's bec ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基
题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...
- 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基
题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...
随机推荐
- synchronized使用
在一个方法内部使用如下代码: public void m5() { synchronized (Test1.class) { System.out.println("m5"); t ...
- 使用脚本与orm模型交互对数据库操作
场景:如不想启动服务在框架中查看数据库数据,同时使用ORM框架对数据库操作带来的好处 import os import sys #将脚本所在的工程添加到环境变量 sys.path.append('.. ...
- xca自签发证书解决chrome浏览器证书不可信问题记录
xca打开的界面 依次File, New DataBase,选择xdb文件保存路径,再输入密码 切换到Certificates页面,点击New Certificate 出现如下界面 因为要创建根证书, ...
- linux 系统中 /etc/passwd 和 /etc/shadow文件详解
链接地址:http://blog.csdn.net/yaofeino1/article/details/54616440
- 重写toString()
重写Object的toString()之前,得到的结果是 类型 @ 内存地址 demo: package cn.sasa.demo1; public class Test { public stat ...
- byte数组存储到mysql
public int AddVeinMessage(byte[] data)//插入数据库 { using (BCSSqlConnection = new MySqlConnection(strCon ...
- project proposal写作框架
主要有八个因素: 背景(Your Background):对于proposal有意义的要点,如国家职业证书.技能.经验.能力和实习经历等. 大纲(Outline Proposal):描述你明确的感兴趣 ...
- NginxI/O模型理论基础
I/O模型介绍 同步IO 关注的是消息通信机制 调用者需要等待被调用者先执行完毕才能往下继续执行 被调用者在执行完自己的任务后并不会同之调用者执行结果需要调用者自己去获取被调用者的执行状态 异步 ...
- SUDO安全委派和安全模块
sudo更换身份 su 切换身份 使用su 切换身份必须首先直到被切换成用户的密码 如: su root 就必须要知道root的密码 这种机制安全性不高,容易泄露管理员密码 1. sudo ...
- SOA架构大概思路
1.创建父工程(pom)管理jar包版本 2.创建子工程common工程(jar)管理通用工具类.通用pojo 3.创建服务层工程(聚合工程(pom)) 3.1.创建模块(dao.pojo.inter ...