公元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輸出 #1011 1
110 1
101 0
111 1
010 1
4輸入 #2earth
?y7m#
earth
5 7輸出 #201100 1
11000 1
10100 0
11100 1
00011 1
00000 0
11111 0
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,消元時異或,即可求出。
#includeusingnamespace
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...