HDU 5755 Gambler Bo
可以设n*m个未知量,建立n*m个方程。位置i,j可以建立方程 (2*x[i*m+j]+x[(i-1)*m+j]+x[(i+1)*m+j]+x[i*m+j-1]+x[i*m+j+1])%3=3-b[i][j]; 套了个高斯消元的板子过了。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
inline int read()
{
char c = getchar(); while(!isdigit(c)) c = getchar();
int x = ;
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} const int mod = ;
int exgcd(int a,int b,int &x,int &y){
if(!b){x = ; y = ; return a;}
else{
int r = exgcd(b,a%b,y,x);
y -= x * (a/b);
return r;
}
}
int lcm(int a,int b){
int x = , y =;
return a / exgcd(a,b,x,y) * b;
}
const int MAXN=; int A[MAXN][MAXN],free_x[MAXN],x[MAXN];
void Gauss(int n,int m){
int r,c;
for(r=,c=;r<n && c<m;c++){
int maxr = r;
for(int i=r+;i<n;i++) if(abs(A[i][c]) > abs(A[maxr][c])) maxr = i;
if(maxr != r) for(int i=c;i<=m;i++) swap(A[r][i],A[maxr][i]);
if(!A[r][c]) continue;
for(int i=r+;i<n;i++) if(A[i][c]){
int d = lcm(A[i][c],A[r][c]);
int t1 = d / A[i][c], t2 = d / A[r][c];
for(int j=c;j<=m;j++)
A[i][j] = ((A[i][j] * t1 - A[r][j] * t2) % mod + mod) % mod;
}
r++;
}
for(int i=r;i<n;i++) if(A[i][m]) return ;
for(int i=r-;i>=;i--){
x[i] = A[i][m];
for(int j=i+;j<m;j++){
x[i] = ((x[i] - A[i][j] * x[j]) % mod + mod) % mod;
}
int x1 = ,y1 = ;
int d = exgcd(A[i][i],mod,x1,y1);
x1 = ((x1 % mod) + mod) % mod;
x[i] = x[i] * x1 % mod;
}
}
void Gauss_init(){
memset(A,,sizeof A); memset(free_x,,sizeof free_x); memset(x,,sizeof x);
}
int T,n,m;
int b[MAXN][MAXN]; bool check(int a,int b)
{
if(a>=&&a<n&&b>=&&b<m) return ;
return ;
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) for(int j=;j<m;j++) scanf("%d",&b[i][j]);
Gauss_init();
for(int i=;i<n;i++) for(int j=;j<m;j++)
{
A[i*m+j][i*m+j]=;
if(check(i-,j)) A[i*m+j][(i-)*m+j]=;
if(check(i+,j)) A[i*m+j][(i+)*m+j]=;
if(check(i,j-)) A[i*m+j][i*m+j-]=;
if(check(i,j+)) A[i*m+j][i*m+j+]=;
A[i*m+j][n*m]=(-b[i][j])%;
}
Gauss(n*m,n*m);
int ans=; for(int i=;i<n*m;i++) ans=ans+x[i]; printf("%d\n",ans);
for(int i=;i<n*m;i++) while(x[i]) { printf("%d %d\n",i/m+,i%m+); x[i]--; }
}
return ;
}
HDU 5755 Gambler Bo的更多相关文章
- HDU 5755 Gambler Bo(高斯消元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...
- hdu 5755 Gambler Bo (高斯消元法解同余方程组)
http://acm.hdu.edu.cn/showproblem.php?pid=5755 题意: n*m矩阵,每个格有数字0/1/2 每选择一个格子,这个格子+2,4方向相邻格子+1 如何选择格子 ...
- hdu 5755 Gambler Bo 高斯消元
题目链接 给n*m的方格, 每个格子有值{0, 1, 2}. 然后可以对格子进行操作, 如果选择了一个格子, 那么这个格子的值+2, 这个格子上下左右的格子+1, 并且模3. 问你将所有格子变成0的操 ...
- hdu 5755(Gauss 消元) &poj 2947
Gambler Bo Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tota ...
- 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 (开关问题,%3意义下的高斯消元)
pro:给定N*M的矩阵,每次操作一个位置,它会增加2,周围4个位置会增加1.给定初始状态,求一种方案,使得最后的数都为0:(%3意义下. sol:(N*M)^3的复杂度的居然过了. ...
- HDU 5752 Sqrt Bo (数论)
Sqrt Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5752 Description Let's define the function f ...
- HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- HDU 5762 Teacher Bo (暴力)
Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
随机推荐
- ssh配置导致Ansible并发失败
Ansible并发失败原因, fork=100. 执行playbook时候没有并发 vim /usr/lib/python2.7/site-packages/ansible/runner/conne ...
- 我的JAvA第三天
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- JAVA 并发编程关键点
上下文切换 死锁 volatile synchronized 原子操作 happens-before as-if serial 锁的内存 final 线程:daemon start suspend r ...
- BeautifulSoup抓取列表页锚文本
素闻BeautifulSoup提取效率低,艾玛,第一印象果然是很要命的,反正比Re 和 Lxml 是要慢的,不过就无奈Re的正则折腾来折腾去,没写出来,Lxml 的 Xpath 又用得不好. 不过就这 ...
- Google Dremel 原理 - 如何能3秒分析1PB
简介 Dremel 是Google 的“交互式”数据分析系统.可以组建成规模上千的集群,处理PB级别的数据.MapReduce处理一个数据,需要分钟级的时间.作为MapReduce的发起人,Googl ...
- ACdream 1064 完美数
数位dp. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #incl ...
- L3-001. 凑零钱
L3-001. 凑零钱 题目链接:https://www.patest.cn/contests/gplt/L3-001 动态规划 这道题一看就知道应该用背包思想来做,不过想了好久没什么思路(dp实在是 ...
- Chapter 2 Open Book——26
"Oh." He let it drop. I looked away awkwardly. 哦,他让它走了.我笨拙的看向别处. "哦."他不再纠缠于这个问题. ...
- MVC写在Model文件夹下,登录注册等页面定义的变量规则,不会被更新实体模型删除
一下图为我的model文件夹