2018百度之星初賽B輪部分題題解

2021-08-22 18:17:47 字數 1740 閱讀 6148

由於昨天那場和牛客多校衝突了,就沒打a輪。聽說昨天題還很難。。。

而今天題目難度著實跨度太大,前三題都屬於簽到題,稍微想一想都能做出來。

但後面的題,怕是神仙題了。。。

弱弱的我用了1個半小時才a完3題,自然是滾粗複賽了。。。

下面看一下這幾道題

1001 degree (hdu6380)

剛開始看這道題,思路其實並不是特別明顯。看了一會發現,首先,找出原圖中度最大的點,對每個點dfs一次。每個點訪問一次,複雜度o(n)。每次dfs時,sum++(也就是未與度最大的點聯通的聯通塊數)(看看**就懂了)。

當有k次操作時,每次相當於對度最大點所在的聯通塊減下來乙個點,也就是度加1。

注意:答案最大為n-1,最後不要讓答案超過n-1

**:

#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxv = 2e5+10;

int d[maxv];

vectorg[maxv];

bool vis[maxv];

int cnt=0;

int sum=0;

void dfs(int x)

int main()

} vis[maxid]=true;

for(int i=0;i1004  p1m2(hdu6383)

這道題還是很套路的。看到題面中最小值最大化 -> 果斷二分。

二分每乙個可能的答案,檢查這個答案是否滿足要求。

具體檢查方法就是,看當前需要補得數和超過的數之間的關係,看**就能懂。

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

int n;

ll a[300010];

ll maxnum;

bool check(ll x)

} if(guo=bu)

return true;

}ll ans;

void b_search()

else

}}int main()

ans=0;

b_search();

printf("%i64d\n",ans);

} return 0;

}

1006   rect(hdu6385) 

其實這道題才是全場最水的題,關鍵點在於題目中有個重要條件,任意兩點不在同一行同一列。 

所以說,直接看每乙個點離4條邊哪個進選哪個就好了(不會相交,沒有必要證,可以自己畫畫)。

**:

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

int main()

printf("%i64d\n",sum);

} return 0;

}

最後的乙個多小時一直剛1002了,不過這道題過的人極少。。。

我寫了個暴力,幻想著萬一資料不強(不可能的),最後理所當然的t了。

今天其實打的還行吧,就是手(nao)慢(can)了點,明年再戰。。。 

百度之星2018初賽A輪

題目描述 題解 簽到題。排個序列舉小的兩條然後二分出第三條就好了。其實排序之後只要看連續的三條就行了。include define n 1005 using namespace std int n,s n ans int main printf d n ans return 0 題解 當時腦子抽了寫...

百度之星 初賽B

a 傳送門 點我 求聯通塊個數,對於簡單圖而言,就是c v e,其中c就是聯通塊個數,v是頂點數,e是邊數 include include include include using namespace std const int max n 2e5 10 int n,m,k vectorg max...

2018百度之星初賽1003

problem description 度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊...