由於昨天那場和牛客多校衝突了,就沒打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 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊...