題目描述
小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個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...