hdu 5755 Gambler Bo 高斯消元
给n*m的方格, 每个格子有值{0, 1, 2}。 然后可以对格子进行操作, 如果选择了一个格子, 那么这个格子的值+2, 这个格子上下左右的格子+1, 并且模3。
问你将所有格子变成0的操作方法。
其实就是一个模3的方程组, 高斯消元就可以了。 不知道为什么昨天比赛就是想不到......
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <complex>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef complex <double> cmx;
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = ;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
int a[][];
int n, b[], x[], m;
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;
}
ll inv(ll a, ll m)
{
if(a == )
return ;
return inv(m%a, m)*(m-m/a)%m;
}
int gauss(int equ, int var)
{
int max_r, col, k;
for(k = , col = ; k < equ && col < var; k++, col++) {
max_r = k;
for(int i = k + ; i < equ; i ++) {
if(abs(a[i][col]) > abs(a[max_r][col]))
max_r = i;
}
if(a[max_r][col] == ) {
k--;
continue;
}
if(max_r != k) {
for(int j = col; j < var+; j++) {
swap(a[k][j], a[max_r][j]);
}
}
for(int i = k + ; i < equ; i++) {
if(a[i][col]) {
int LCM = lcm(abs(a[i][col]), abs(a[k][col]));
int ta = LCM/abs(a[i][col]);
int tb = LCM/abs(a[k][col]);
if(a[i][col] * a[k][col] < )
tb = -tb;
for(int j = col; j < var+; j++) {
a[i][j] = ((a[i][j]*ta - a[k][j]*tb)%mod+mod)%mod;
}
}
}
for(int i = var-; i >= ; i--) {
int tmp = a[i][var];
for(int j = i+; j < var; j++) {
if(a[i][j]) {
tmp -= a[i][j]*x[j];
tmp = (tmp%mod+mod)%mod;
}
}
x[i] = a[i][i]*tmp%mod;
}
}
}
int check(int x)
{
return x >= && x < n*m;
}
int main()
{
int t;
cin>>t;
while(t--) {
scanf("%d%d", &n, &m);
for(int i = ; i < n*m; i++) {
scanf("%d", &b[i]);
}
mem(x);
mem(a);
for(int i = ; i < n*m; i++) {
int u = i-m, d = i+m;
int l = i-, r = i+;
if(check(u)) {
a[i][u] = ;
}
if(check(d)) {
a[i][d] = ;
}
if(check(l)&&i%m!=) {
a[i][l] = ;
}
if(check(r)&&(i+)%m!=) {
a[i][r] = ;
}
a[i][i] = ;
a[i][n*m] = (-b[i])%;
}
n *= m;
gauss(n, n);
int cnt = ;
for(int i = ; i < n; i++) {
if(x[i])
cnt += x[i];
}
printf("%d\n", cnt);
for(int i = ; i < n; i++) {
while(x[i]) {
printf("%d %d\n", i/m+, i%m+);
x[i]--;
}
}
}
return ;
}
hdu 5755 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.输出 ...
- Gambler Bo (高斯消元求特解)
对于图中的每一个点假设点击Xi * m + j 然后每个点都有那么对于每一个点可以列举出一个方程式,n*m个点解n*m个未知数.利用高斯消元就可以解决. 问题就在这个题目可能不止有一个特,所以我们需要 ...
- HDU 5755 Gambler Bo(高斯消元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...
- HDU 4870 Rating(高斯消元 )
HDU 4870 Rating 这是前几天多校的题目,高了好久突然听旁边的大神推出来说是可以用高斯消元,一直喊着赶快敲模板,对于从来没有接触过高斯消元的我来说根本就是一头雾水,无赖之下这几天做DP ...
- HDU 3949 XOR(高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排 ...
- [hdu 3949]线性基+高斯消元
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...
- HDU 3949 XOR(高斯消元搞基)
HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第 ...
- HDU 3364 Lanterns (高斯消元)
题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...
- [ACM] hdu 4418 Time travel (高斯消元求期望)
Time travel Problem Description Agent K is one of the greatest agents in a secret organization calle ...
随机推荐
- Oprofile安装与使用探索
本文分别尝试了oprofile在x86平台和龙芯平台上的安装 一:oprofile的安装与配置(intel+ubuntu12.04) I. Oprofile 安装 Oprofile 包含在 Linux ...
- Mysql查询高速缓存区
为了提高查询速度,Mysql会维护一个内存区域(官方文档指出,大小至少41984B)对查询结果进行缓存,当查询时发现缓存区里有数据则直接返回结果而不用去执行sql语句. 查询命中的条件 每个缓存查询至 ...
- AngularJS如何给动态添加的DOM中绑定事件
正常情况(即非动态插入 DOM 对象)下,ng-click 这样的指令之所以有效(即点击之后能调用注册在可见作用域里的方法),是因为 angular 在 compiling phase(编译阶段)将宿 ...
- js 函数(function)
<Javascript高级程序设计第三版> 3.7 函数 1. ECMAScript中的函数在定义时,不必指定是否返回值. 2. 位于return语句之后的任何code都永远不会执行.(之 ...
- ThinkPHP框架二
ThinkPHP笔记二 1.1 TP框架的配置文件 在TP框架中,所有的配置文件都是自动加载的,加载的顺序:惯例配置<应用配置<调试配置<模块配置<动态配置 1. 惯例配置(T ...
- Fiddler 域名过滤
原来一直没意识到Fiddler过滤,导致每次抓包都要自己判断.搜索好多东西,真是呵呵! 过滤设置很简单,看懂一张图就解决问题了. 箭头 那两处设置下,圆圈处保存再进行抓包即可
- Android 样式
先在Value文件夹下建一个Common.xml的文件. <style name="CodeFont" parent="@android:style/TextApp ...
- UI组件
1.自定义View 2.布局管理器-----ViewGroup 3.textview及其子类 4.imageview及其子类 5.adapterview及其子类----ViewGroup 6.prog ...
- 要熟悉QT的所有类和元类系统,当然还有qmake
http://doc.qt.io/qt-5/classes.html http://doc.qt.io/qt-5/gettingstarted.html http://doc.qt.io/qt-5/q ...
- Chapter 13. Miscellaneous PerlTk Methods PerlTk 方法杂项:
Chapter 13. Miscellaneous PerlTk Methods PerlTk 方法杂项: 到目前为止,这本书的大部分章节 集中在特定的几个部件, 这个章节覆盖了方法和子程序 可以被任 ...