1923 Sdoi2010 外星千足蟲

2022-04-06 17:13:42 字數 1699 閱讀 8273

time limit: 10 sec  memory limit: 64 mb

submit: 1312  solved: 841

[submit][status][discuss]

第一行是兩個正整數 n, m。 接下來 m行,按順序給出 charles 這m次使用「點足機」的統計結果。每行 包含乙個「01」串和乙個數字,用乙個空格隔開。「01」串按位依次表示每只蟲 子是否被放入機器:如果第 i 個字元是「0」則代表編號為 i 的蟲子未被放入,「1」 則代表已被放入。後面跟的數字是統計的昆蟲足數 mod 2 的結果。 由於 nasa的實驗機器精確無誤,保證前後資料不會自相矛盾。即給定資料 一定有解。

在給定資料存在唯一解時有 n+1行,第一行輸出乙個不 超過m的正整數k,表明在第k 次統計結束後就可以確定唯一解;接下來 n 行 依次回答每只千足蟲的身份,若是奇數條足則輸出「?y7m#」(火星文),偶數 條足輸出「earth」。如果輸入資料存在多解,輸出「cannot determine」。 所有輸出均不含引號,輸出時請注意大小寫。

3 5

011 1

110 1

101 0

111 1

010 1

4 earth

?y7m#

earth

對於 20%的資料,滿足 n=m≤20; 

對於 40%的資料,滿足 n=m≤500; 

對於 70%的資料,滿足 n≤500,m≤1,000; 

對於 100%的資料,滿足 n≤1,000,m≤2,000。 

用高斯消元解異或方程組。把矩陣變成上三角矩陣後,求解。

設第i個蟲子$x_i$,那麼如果是地球蟲$x_i=0$,外星蟲$x_i=1$。

$ a_1x_1 $^ $a_2x_2 $^... ^ $a_nx_n = b $

一共有m個方程。

1 #include2 #include3 #include4

using

namespace

std;

5const

int n = 2010;6

intn,m,ans;

7char

s[n];

8 bitseta[n];910

bool

gauss() 20}

21return

true;22

}23intmain ()

30if

(gauss()) 36}

37else puts("

cannot determine");

38return0;

39 }

bitset

1 #include2 #include3

4using

namespace

std;

5const

int n = 2010;6

inta[n][n],n,m,ans;

7char

s[n];89

bool

gauss() 20}

21return

true;22

}23intmain ()

30if

(gauss()) 36}

37else puts("

cannot determine");

38return0;

39 }

陣列

bzoj1923 Sdoi2010 外星千足蟲

luo2447 依然是異或方程組的高斯消元求解,第一問其實就是在高斯消元過程中訪問到的用作主元的方程組的下標最大值,因為異或方程組是直接找到為當前元的係數為 1 的異或方程作為主元進行消元過程的 第二問就是消元之後各個未知數的取值 普通的高斯消元會收穫tle,但是我們可以使用 bitset 可以優化...

BZOJ1923 SDOI2010 外星千足蟲

bzoj luogu 給你 m 個 n 元異或方程,方程是乙個乙個給的,問你給到第幾個的時候出解,或者是在得到 m 個方程後仍不能確定解。保證方程不會前後矛盾,即不會出現無解。我今天突然發現異或方程組的高斯消元和線性基就是乙個東西。這道題其實就是問你什麼時候你可以得到 n 個線性無關方程。所以你可以...

BZOJ 1923 Sdoi2010 外星千足蟲

bzoj 1923 sdoi2010 外星千足蟲 高斯消元 第一行是兩個正整數 n,m。接下來 m行,按順序給出 charles 這m次使用 點足機 的統計結果。每行 包含乙個 01 串和乙個數字,用乙個空格隔開。01 串按位依次表示每只蟲 子是否被放入機器 如果第 i 個字元是 0 則代表編號為 ...