小y最近在研究乙個奇怪的16位ip系統
為了方便表示,我們可以將這個系統中的ip位址表示成16位二進位製非負整數(既小於216
的非負整數),子網掩碼表示成(2
x−1)
,x可能的取值是1到16(注意,和一般的子網掩碼是不同的)。
現在小y將隨機生成一些ip位址,對於每乙個ip位址小y將做如下操作:
列舉每乙個可能的子網掩碼,對於任一子網掩碼(設為x),我們將得到網路位址(設為z)z = (ip位址 and x)。(and是按位與操作)如果對於當前的ip位址,z沒有出現過,那麼小y將得到v[z]的愉悅值,否則小y得到0點愉悅值。這個ip位址可以給小y帶來的愉悅值是這些愉悅值的和。
例如,當ip位址為5時:
如果子網掩碼為1, 則得到v[5 & 1] = v[1]點愉悅值
如果子網掩碼為3, 因為5 & 3 = 1, 這個位址已經出現過了,不會得到愉悅值
如果子網掩碼為7,則得到v[5 & 7] = v[5]點愉悅值
對於其他可能的子網掩碼,z都是5,因此都不會得到愉悅值
因此,ip位址為5時,小y將得到v[1] + v[5]點愉悅值
小y並不知道v陣列,但對於每個隨機生成出來的ip位址,小y都會將他得到的愉悅值告訴你,現在小y希望你還原乙個可能的v陣列
記ip對對應的愉悅值為:
有:其實題中的h[ip]算是干擾項了。因為你會發現。任意的h陣列。v都有可行解
1式的資訊隱含在ip中。
我們把1式中的v[
z]看作方程未知量 , xz
為係數呢麼對於ip從
0 到 216
−1每個ip都對應乙個方程
並且是乙個階梯形。因為x
ip必然為1,並且有xk
=0,k
>ip
所以我們任意指定h陣列都有解,當然 h[0]=0;
既然都有解。只要題中沒有給出的h[ip] 。 我們就認為是 0
也就是說。我們已經擁有了乙個合法的方程組了。
因為方程組是合法的.
也就是說。這樣指定h陣列必然不會出現矛盾。
那麼我們認為所有h是以知的。前後沒有矛盾的。
所以將所有h看作已知條件推導有:雖然有些懷疑 。但他確實是對的。因為方程必有解。不管怎樣。
都是從合法的方程推導來的
下面是c++**
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int maxn=(1
<<16)+10;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll h[maxn];
ll v[maxn];
int main ()
v[0]=h[0];
v[1]=h[1];
for(int i=2,sz=1
<<16,a=2,b=4;iif(ielse
}for(int i=0,sz=1
<<16;iprintf("%lld ",v[i]);
printf("\n");
return
0;}
51Nod 1468 小Y的IP位址
acm模版 這個題我不會,請教的我 佐神燈 學姐,她說是神馬解方程組,高斯消元,這個我也能想到,但是奇了怪了,最後她的 怎麼成了這種構造方法 看 據說,明天早上她會把詳細題解放到討論區,好期待啊 o o 這個題讓我很納悶兒,我加上輸入輸出優化比不加還慢上十幾毫秒,平時像這種大量輸入輸出的題,加上我那...
51nod1468 小Y的IP位址
1468 小y的ip位址 基準時間限制 1 秒 空間限制 262144 kb 分值 80 難度 5級演算法題 小y最近在研究乙個奇怪的16位ip系統 為了方便表示,我們可以將這個系統中的ip位址表示成16位二進位製非負整數 既小於 2 16 的非負整數 子網掩碼表示成 2 x 1 x可能的取值是1到...
51nod 1778 小Q的集合
原題連線 題目繞了一點。並沒有直接給出數字形式。而且這個題有好像有很多方法。我也yy了乙個 不過還是題解多效率高 題目中是給定了乙個集合 s 並且有 s n 要說明的是。這個集合是沒有重複元素的集合。這一點很重要 其實不特別說明。一般集合也都沒有重複元素。集合s的子集數量等價於 從 s 中取元素的取...