題意:先給定了兩個 n×n
n \times n
n×n 的 01
0101
矩陣 a
aa 和 b
bb,現在有兩種運算
×
\times
× : dn×
n=an
×n×b
n×
nd_ = a_ \times b_
dn×n=
an×n
×bn
×n 表示兩個矩陣相乘。即 dij
=(∑k
=1na
ik∗b
kj)%
2d_ij = (\sum_^a_*b_) \% 2
dij=(
∑k=1
nai
k∗b
kj)
%2 ⊙
⊙⊙ : dn×
n=an
×n⊙b
n×
nd_ = a_ ⊙ b_
dn×n=
an×n
⊙bn
×n 表示連個矩陣點乘。即 dij
=aij
∗bij
d_ij = a_ * b_
dij=a
ij∗
bij
現在要求 a×c
=b⊙c
a \times c = b\ ⊙\ c
a×c=b⊙
c ,求有多少 01
0101
矩陣 c
cc 滿足條件。
思路:
要滿足等式,即滿足
不知道為什麼,在typora裡寫好的公式,複製過來就是顯示不了,直接了
當 j
jj 確定乙個值時,此時對於 k
kk 從 1
11 到 n
nn ,可以列出 n
nn 個同餘方程組。高斯消元得到自由元個數 x
xx 後,矩陣 c
cc 中 第 j
jj 列中的可能組數即為 2
x2^x
2x中,每一列都算出來有多少組,最後累加即可。當有一組無解時,答案就直接記為 0
00 。
**:
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
210;
const ll mod =
998244353
;int a[maxn]
[maxn]
;//增廣矩陣
int x[maxn]
;//解集
int freex[maxn]
;//自由變元
ll qpow
(ll a, ll b)
return ans;
}int
gauss
(int equ,
int var)
int col =0;
//當前處理的列
int num =0;
//自由變元的序號
int row;
//當前處理的行
for(row =
0; row < equ && col < var; row++
, col++)if
(maxrow != row)
if(a[row]
[col]==0
)for
(int i = row +
1; i < equ; i++)}
}}for(
int i = row; i < equ; i++)if
(a[i]
[col]!=0
)return-1
;int temp = var - row;
//自由變元有var-row個
if(row < var)
//返回自由變元數
return temp;
return0;
}int a[maxn]
[maxn]
, b[maxn]
[maxn]
;int
main()
}for
(int i =
0; i < n; i++
)int r =
gauss
(n, n);if
(r ==-1
) ans *
=qpow(2
, r)
; ans %
= mod;
}printf
("%lld\n"
, ans)
;return0;
}
高併發 高可用
高併發 提高系統併發能力的方法主要有兩種 前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者 水平擴充套件。網際網路分層架構中,各層次水平擴充套件的實踐又有所不同 1 反向 層可以通過 dns輪詢...
高併發與高可用
事發事中 事後高併發 增加處理人手 事前 副本 隔離 配額 提前預案 探知 事發 監控 報警 事中 降級 回滾 應急預案,fail 系列 事後 覆盤 思考 技改 fail 系列 當出現下游呼叫失敗時,我們一般有幾種處理方式 failretry,即失敗重試,需要配合退避時間,否則馬上重試不一定會有效果...
高偏差和高方差
首先我來介紹一下高方差和高偏差的概念,可能很多人理解的不是很清楚。偏差 是指乙個模型的在不同訓練集上的平均效能和最優模型的差異。偏差可以用來衡量乙個模型的擬合能力。偏差越大,值平均效能越偏離最優模型。偏差衡量模型的 能力,物件是乙個在不同訓練集上模型,形容這個模型平均效能對最優模型的 能力。方差 v...