牛客練習賽 26

2021-08-27 14:18:06 字數 3317 閱讀 4277

題目描述

小a的平面上有n個x型不明物體,但是他不確定他們的位置。現在請你來確定他們的位置,使得劃分形成的平面盡量多

輸入描述:

乙個整數n,如題所示

輸出描述:

乙個整數,表示最多把平面分成多少份

示例1輸入2輸出

平面分割問題,直線劃分平面,有個公式就是

cn 0+cn 1+cn 2

推導大致是這樣的:詳見傳送門

當有n-1條直線時,平面最多被分成了f(n-1)個區域。則第n條直線要是切成的區域數最多,就必須與每條直線相交且不能有同一交點。這樣就會得到n-1個交點。這些交點將第n條直線分為2條射線和n-2條線斷。而每條射線和線斷將以有的區域一分為二。這樣就多出了2+(n-2)個區域。

f(n)=f(n-1)+n

=f(n-2)+(n-1)+n

=……=f(1)+1+2+……+n

=n(n+1)/2+1

#includeint main()

b

題目描述

小a有個烟花,每個烟花代表著互不相同的顏色,對於第個烟花,它有的概率點燃,現在小a要去點燃它們,他想知道產生顏色的期望個數 及 產生恰好產生種顏色的概率

輸入描述:

第一行兩個整數

接下來一行個數,第個數表示第個烟花被點燃的概率

輸出描述:

輸出有兩行

第一行表示產生不同顏色的期望個數

第二行表示產生恰好種顏色的概率

以換行符分割

每種顏色的個數是1。期望的線性性質

,積分 ans就等於xi*pi的積分了,等於概率之和

第二問,dp[i][j]表示當前有i個烟花恰好有j個烟花被點燃。

#include#includeusing namespace std;

double p[1000005],dp[100005][105];

int main()

printf("%0.4lf\n",ans);

dp[0][0]=1;

for (int i=1; i<=n; i++)

} printf("%0.4lf\n",dp[n][k]);

}

如果題目卡空間的話,就需要用到滾動陣列優化,放標程了

#include#includeusing namespace std;

const int maxn = 100001;

int n, k;

double p[maxn], f[2][maxn];

int main()

printf("%.4lf", f[o][k]);

return 0;

}

題目描述

小a的國家裡有n個城市,其中第i和第i - 1個城市之間有無向道路連線,特殊的,第1個城市僅與第2個城市相連

為了減輕道路維護負擔,城市規劃局局長mxt給出了m個要求,他想讓小a斷開一些道路,使得任意1 ≤ i ≤ m ,城市xi不能到達城市yi

同時最小化斷開道路的數量。

輸入描述:

第一行兩個整數n, m,分別表示城市的數量和請求的數量

接下來m行,每行兩個整數x,y,表示需要使得x不能到達y

輸出描述:

輸出乙個整數,表示最小斷開橋的數量

示例1輸入

4 21 3

2 4輸出1說明

可以斷開(2, 3)城市之間的道路

貪心考慮乙個很顯然的 o(mlog(m))的做法 首先對所有線段按照右端點排序,然後每次在右端點處切 但是m達到了 10^7級別

題目保證所有線段的值域為1-n ,我們可以對所有左端點,直接記錄出右端點最靠左的 位置 同樣每次切右端點,掃一遍即可 時間複雜度: o(m)

#includeconst int maxn = 1e6 + 10;

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? eof : *p1++)

#define min(a, b) (a < b ? a : b)

char buf[(1 << 22)], *p1 = buf, *p2 = buf;

inline int read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}int n, m;

int r[maxn];

int main()

int cur = n + 1, ans = 0;

for(int i = 1; i <= n; i++)

printf("%d", ans);

return 0;

}

題目描述

小a有n個數,他提出了乙個很有意思的問題:他想知道對於任意的x, y,能否將x與這n個數中的任意多個數異或任意多次後變為y

輸入描述:

第一行為乙個整數n,表示元素個數

第二行一行包含n個整數,分別代表序列中的元素

第三行為乙個整數q,表示詢問次數

接下來q行,每行兩個數x,y,含義如題所示

輸出描述:

輸出q行,若x可以變換為y,輸出「yes」,否則輸出「no」

示例1輸入

51 2 3 4 5

36 7

2 13 8

輸出yes

yesno

異或有乙個性質就是 x^y=z,然後 x^z=y;

找出這個集合能不能異或出y

那麼就是線性基經典操作了

#include#include#includeusing namespace std;

const int maxn = 32, b = 31;

inline int read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}int n;

int p[maxn];

void insert(int x)

x ^= p[i];}}

}int query(int x)

}if(x == 0) return 1;

else return 0;

}int main()

int q = read();

while(q--)

}

其他的題目日後再記錄嗚嗚嗚

烟花 牛客練習賽26

此題鏈結 上 include include include using namespace std int main f o 1 p 0 f o 0 1 p 0 for int i 2 i n i printf 4lf n 4lf sum,f o k 第一問高中知識便可搞定 第二問要用到滾動陣列和...

牛客練習賽26 A 平面

目錄 傳送門 這道題本質上就是問 n n 條直線能將一平面最多分成多少部分 直接上公式 n n 1 2 1 role presentation style position relative n n 1 2 1 n n 1 2 1 n2 n 2 2 n2 n 2 2推導過程 傳送門 根據題目要求,我...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...