HDU 5755(高斯消元)

2022-05-24 15:09:08 字數 2219 閱讀 1113

2016-07-27 14:23:49

【傳送門】

題意:給出 n*m 的矩陣,每個元素為 0 或 1 或 2,每次操作可以選擇乙個元素給他加2,且其上下左右的格仔裡的數加1,所有操作都在模3域內操作。

問乙個可行的操作方案,使得方案總數不超過 2 * n * m 。 1 <= n , m <= 30

思路:這題雖然可以暴力建出 900 * 900 的矩陣進行 900^3 的高斯消元,也能過。但是有更好的方法。

首先設第一行每列的元素被操作多少次,設為 x1,x2 ... xm ,這樣一來,第二行每列元素的操作次數也能確定,可以用 x1~xm 去表示,以此類推,第三行、第四行 ... 第 n 行 所有元素的操作次數都能被確定。

我們發現第 i + 1 行操作完後,第 i 行就能全部變為 0,且不受後面的操作影響。唯一不能保證全零的是第 n 行,所以第 n 行的 m 個元素都要為 0,我們已經知道了他們的操作次數(用 x1~xn表示)。

所以我們可以建立 m 條方程,每個方程 m 個變數進行高斯消元,解出解後代回去得到每個元素應該被操作的次數(一定 <= 2)。複雜度 o(m^3)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include 11 #include

12 #include 13 #include 14

using

namespace

std;

1516

#define getmid(l,r) ((l) + ((r) - (l)) / 2)

17#define mp(a,b) make_pair(a,b)

18#define pb(a) push_back(a)

1920 typedef long

long

ll;21 typedef unsigned int

ui;22 typedef pairpii;

23const

double eps = 1e-8;24

const

int inf = (1

<< 30) - 1;25

const

int maxn = 910;26

27int

t,n,m,top;

28int a[50][50][50],b[50][50][50],g[50][50],tg[50][50

];29

int g[50][50],x[50],x[3000],y[3000

];30

int dir[4][2] = ,,,};

3132

void

gauss()

39if(r == -1)43

if(r != i) for(int j = col; j <= m + 1; ++j) swap(g[i][j],g[r][j]);

44for(int k = i + 1; k <= m; ++k)50}

51}52}

53int

pos;

54for(int i = m; i >= 1; --i)

60 x[pos] = g[i][m + 1

];61

if(g[i][pos] == 2) x[pos] ^= 3;62

}63}64

65int

main()

84for(int i = 2; i <= n; ++i)94}

95}96for(int i = 1; i <= m; ++i)

100 g[i][m + 1] = ((3 - g[i][m + 1]) % 3 + 3) % 3

;101

}102

gauss();

103int cnt = 0

;104

for(int i = 1; i <= n; ++i)

110while(ans--)

114}

115}

116 printf("

%d\n

",cnt);

117for(int i = 1; i <= cnt; ++i) printf("

%d %d\n

",x[i],y[i]);

118}

119return0;

120 }

HDU 5755 高斯消元

題意 給出乙個模3意義下的矩陣,每次選中乙個元素就可以使得自身 2,上下左右元素 1。求所有元素變成0的一種解。o nm 3 怎麼會不炸!怎麼會不炸!好吧就是不炸,可能在消元的時候0比較多吧 可以為什麼不用列舉自由元呢?不是很懂這個資料 直接按照上下左右自身的元素對自己的貢獻建立方程組暴力消元,遇到...

高斯消元 求解模線性方程 HDU5755

題目大意 給你乙個二維的模3意義下的矩陣。選擇乙個位置可以使得該位置 2,其他相鄰四個位置 1.讓你將其變成全0矩陣。在2nm 2nm2n m次操作內.n m 30 n,m leq 30 n,m 30 題目思路 洛谷p3164一樣的思路。其實異或線性方程就是模2意義的高斯消元嘛。本質一樣。那麼求解模...

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...