ccf認證 201812 3 CIDR合併(模擬)

2021-09-26 21:13:06 字數 2801 閱讀 3883

題目:

思路:先定義乙個結構體用於儲存ip字首,然後按照題以模擬即可,有乙個問題就是n最大是1e5,vector的erase是o(n)的,所以合併操作複雜度是o(nn),可能會超時,我的**中第一步合併是

o(n)的,但是第二步是o(nn)的,可以改用list。

**:用vector的**(100分)

#include

using

namespace std;

const

int maxn =

1e5+5;

struct node

else

i--;if

(!flag)ip[cnt++

]= t;

else len = t;}}

if(!len)len = cnt *8;

cnt =7;

for(

int i =

0; i <

4; i++

) cnt +=8

;}}node()

bool

operator

<

(const node b)

const};

node a[maxn]

;vector ans;

bool vis[maxn]

;bool

judge

(node b , node c)

}return

true;}

bool

judge1

(node b , node c)

int len = b.len -1;

if(b.ip4[len]

!= c.ip4[len]

)return

true

;else

return

false;}

intmain()

sort

(a , a + n)

;for

(int i =

0; i < n ;

)else

break;}

}for

(int i =

0; i < n ; i++

)for

(int i =

0; i < ans.

size()

-1; i++

)else

break;}

}for

(int i =

0; i < ans.

size()

; i++

)return0;

}

用list的**(100分)

#include

using

namespace std;

const

int maxn =

1e5+5;

struct node

else

i--;if

(!flag)ip[cnt++

]= t;

else len = t;}}

if(!len)len = cnt *8;

cnt =7;

for(

int i =

0; i <

4; i++

) cnt +=8

;}}node()

bool

operator

<

(const node b)

const};

node a[maxn]

;list ans;

bool vis[maxn]

;bool

judge

(node b , node c)

}return

true;}

bool

judge1

(node b , node c)

int len = b.len -1;

if(b.ip4[len]

!= c.ip4[len]

)return

true

;else

return

false;}

intmain()

sort

(a , a + n)

;for

(int i =

0; i < n ;

)else

break;}

}for

(int i =

0; i < n ; i++

)for

(auto t = ans.

begin()

; t != ans.

end(

); t++

)else

break;}

}for

(auto t = ans.

begin()

; t != ans.

end(

); t++

)return0;

}

CCF認證 送貨

問題描述 為了增加公司收入,f公司新開設了物流業務。由於f公司在業界的良好口碑,物流業務一開通即受到了消費者的歡迎,物流業務馬上遍及了城市的每條街道。然而,f公司現在只安排了小明乙個人負責所有街道的服務。任務雖然繁重,但是小明有足夠的信心,他拿到了城市的地圖,準備研究最好的方案。城市中有n個交叉路口...

CCF認證 2017 12 遊戲

問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k的倍數或其末位數 即...

ccf認證 201712 2 遊戲

題目 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k的倍數或其末位...