P2447 SDOI2010 外星千足蟲

2022-05-08 02:30:07 字數 2838 閱讀 4913

公元2023年6月4日,在經歷了17年零3個月的漫長旅行後,「格納格魯一號」載人火箭返回艙終於安全著陸。此枚火箭由美國國家航空航天局(nasa)研製發射,行經火星、金星、土衛

六、木衛

二、穀神星、「張衡星」等23顆太陽系星球,並最終在小行星「傑森星」探尋到了地外生命。太空飛行員在「傑森星」地表岩層下45.70公尺位置發現一批珍貴的活體生命樣本,並將其帶回檢測。在帶回的活體樣本中,最吸引人的當屬這些來自外星的千足蟲了。這些蟲子身軀纖長,身體分為若干節。受到觸碰時,會將身體捲曲成圓環形,間隔一段時間後才會復原活動。

有趣的還不止如此。研究人員發現,這些蟲子的足並不像地球千足蟲成對出現、總共偶數條——它們每節身體下方都有著不定數量的足,但足的總數一定是奇數條!雖然從外觀難以區分二者,但通過統計足的數目,科學家們就能根據奇偶性判斷出千足蟲所屬的星球。

作為j國派去nasa的秘密間諜,你希望參加這次研究活動以掌握進一步的情報,而nasa選拔的研究人員都是最優秀的科學家。於是nasa局長charles bolden出了一道難題來檢測你的實力:

現在你面前擺有1…n編號的n只千足蟲,你的任務是鑑定每只蟲子所屬的星球,但不允許親自去數它們的足。charles每次會在這n只千足蟲中選定若干只放入「昆蟲點足機」(the insect feet counter, ifc)中,「點足機」會自動統計出其內所有昆蟲足數之和。charles會將這個和數mod 2的結果反饋給你,同時告訴你一開始放入機器中的是哪幾隻蟲子。他的這種統計操作總共進行m次,而你應當盡早得出鑑定結果。

假如在第k次統計結束後,現有資料就足以確定每只蟲子的身份,你就還應將這個k反饋給charles,此時若k<m,則表明那後m-k次統計並非必須的。

如果根據所有m次統計資料還是無法確定每只蟲子身份,你也要跟charles講明:就目前資料會存在多個解。

輸入檔案insect.in第一行是兩個正整數n, m。

接下來m行,按順序給出charles這m次使用「點足機」的統計結果。每行包含乙個「01」串和乙個數字,用乙個空格隔開。「01」串按位依次表示每只蟲子是否被放入機器:如果第i個字元是「0」則代表編號為i的蟲子未被放入,「1」則代表已被放入。後面跟的數字是統計的昆蟲足數mod 2的結果。

由於nasa的實驗機器精確無誤,保證前後資料不會自相矛盾。即給定資料一定有解。

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

所有輸出均不含引號,輸出時請注意大小寫。

輸入 #1

3 5

011 1

110 1

101 0

111 1

010 1

輸出 #1

4

earth

?y7m#

earth

輸入 #2

5 7

01100 1

11000 1

10100 0

11100 1

00011 1

00000 0

11111 0

輸出 #2

cannot determine
對於每乙個測試點,如果你的輸出檔案與答案檔案完全相同,該測試點得滿分;

否則,對於存在唯一解的測試點,如果你正確回答所有千足蟲的身份,將得到50%的分數;

其他情況,該測試點得零分。

【資料規模和約定】

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

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

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

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

對於每只蟲的足數我們只需要判斷是奇數還是偶數。所有對結果%2沒有影響。高斯求解的答案便可以直接判斷是1還是0。但時間複雜度為o(n^3),

對於最後的資料會tle,所有我們從消元進行優化。先從樣例入手:

0x1+1x2+1x3=1;

1x1+1x2+0x3=1;

1x1+0x2+1x3=0;

1x1+1x2+1x3=1;

0x1+1x2+0x3=1;

所有係數非0即1,對於每一位的係數,我們需要將

0,0->0;1,0->1;

0,1->1;(仔細想想,若x=0,則變為1時無影響,若為x=1,則變為1與-1影響相同)1,1->0;

這不就是異或的運算規則嗎,但對於這一位的係數已經是0,則加減無意義,所有要特判。

所以我們將所有係數存入bitset,消元時異或,即可求出。

#includeusing

namespace

std;

bitset

<1005> s[2007

];inline

intread()

intmain()

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

ans=max(ans,now);

if(now!=i) swap(s[i],s[now]);

for(int j=1;j<=m;j++)

}printf(

"%d\n

",ans);

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

if(s[i][n+1]) cout<

?y7m#

"<

else cout<

earth

"<

return0;

}

Luogu2447 SDOI2010 外星千足蟲

題目藍鏈 有 n 個未知數 x 1,x 2,cdots,x n 給出 m 條訊息,每條訊息選出一些未知數並告訴你他們的和的奇偶性。你的目標是判斷每個未知數的奇偶性 如果前 k 條訊息就可以確定所有未知數的奇偶性,輸出 k 以及所有未知數的奇偶性,否則輸出這是不可能的 n leq 1000,m leq...

SDOI2010 外星千足蟲

洛谷 p2447 傳送門 高斯消元解異或方程組。題目還是挺裸的,大概看一看就知道怎麼寫了吧。解異或方程組跟解正常的方程組差不多,我發現我喜歡上那種消成對角線的方法了。這道題資料範圍1000 2000,用bitset優化一下就能過了。1 include2 include3 include4 inclu...

SDOI2010 外星千足蟲

公元2089年6月4日,在經歷了17年零3個月的漫長旅行後,格納格魯一號 載人火箭返回艙終於安全著陸。此枚火箭由美國國家航空航天局 nasa 研製發射,行經火星 金星 土衛 六 木衛 二 穀神星 張衡星 等23顆太陽系星球,並最終在小行星 傑森星 探尋到了地外生命。太空飛行員在 傑森星 地表岩層下4...