51nod 1468 小Y的IP位址

2021-08-03 07:47:39 字數 1673 閱讀 4943

小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 中取元素的取...