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 < ...
随机推荐
- file 选取文件/文件夹
一般网页上传文件大家都会用到这个标签 <input type="file" id="file_input"/> 我们可以通过这个标签选取文件,使用j ...
- nodejs 学习三 异步和同步
同步函数 for (let i = 0; i < 10; i ++) { setTimeout(() => { console.log(`${i} ______ ${new Date}`) ...
- SQL Server2008及以上 表分区操作详解
SQL Server 表分区之水平表分区 转自:https://www.cnblogs.com/Brambling/p/6766482.html 什么是表分区? 表分区分为水平表分区和垂直表分区,水 ...
- OC照片选择器MJPhotoBrowser
图片选择器,看cocoachina发现一个有趣的框架,很好用,分享一下,其实做出该功能我之前写过一篇博客,使用转场动画写的,就是图片的手势缩放没写,有兴趣可以看看 效果图: github地址:http ...
- Linux下高并发socket最大连接数各种限制的调优
1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...
- keepalived基础原理
keepalived介绍 设置初衷是为了高可用ipvs 通过脚本可以实现高可用nginx或者haproxy调度器, 基于vrrp协议完成一个固定的IP可以在集群中不同的节点进行流动.为ipvs集群的各 ...
- sed 操作命令
sed介绍 grep 只能过滤文件内容,sed既能过滤文件内容同时还能对文件内容进行修改. sed 算是一种编程语言,它有自己的固定语法. sed是一种行编辑器,sed会在内存中开辟一块独立的空间( ...
- drf频率组件
1.简介 控制访问频率的组件 2.使用 手写一个自定义频率组件 import time #频率限制 #自定义频率组件,return True则可以访问,return False则不能访问 class ...
- Android使用SpannableString设置多样式文本
Android将一行文本设置为多种样式时,可以使用 SpannableString 来实现 private void setTips(){ String big = "大字深色"; ...
- 远程访问对象java实现
服务端: 定义远程接口: package com.my.rmi; import java.rmi.Remote; import java.rmi.RemoteException; public int ...