acm題集:
第一題
居然沒做出來~~~p為給定的二維平面整數點集。定義 p 中某點x,如果x滿足 p 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其為「最大的」。求出所有「最大的」點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內)
如下圖:實心點為滿足條件的點的集合。請實現**找到集合 p 中的所有 」最大「 點的集合並輸出。
輸入描述:
第一行輸入點集的個數 n, 接下來 n 行,每行兩個數字代表點的 x 軸和 y 軸。
對於 50%的資料, 1 <= n <= 10000;
對於 100%的資料, 1 <= n <= 500000;
輸出描述:
輸出「最大的」 點集合, 按照 x 軸從小到大的方式輸出,每行兩個數字分別代表點的 x 軸和 y軸。
輸入例子1:
51 2
5 34 6
7 59 0
輸出例子1:
4 67 5
9 0
按x軸從做到右排序, 當乙個點為最大點的時候, 它右邊的所有點的y值都比它小,
也就是它右邊的所有點的y值的最大值比它小,然後倒序列舉一下就可以了
第二題#include
#define ll long long
#define fo(i,j,n) for(register int i=j; i<=n; ++i)
using
namespace std;
const
int n=
5e5+5;
int n;
struct node
else
if(x==p.x)
}return0;
}}p[n]
,ans[n]
;int
main()
sort
(p+1
,p+1
+n);
int maxy =-1
;int o=0;
for(
int i=n; i>=
1; i--)}
sort
(ans+
1, ans+
1+o);fo
(i,1
,o)return0;
}
在某場網路賽見過這道題~[程式設計題]程式設計題2
時間限制:c/c++ 3秒,其他語言6秒
空間限制:c/c++ 128m,其他語言256m
給定乙個陣列序列, 需要求選出乙個區間, 使得該區間是所有區間中經過如下計算的值最大的乙個:
區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列 [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值:
[6] = 6 * 6 = 36;
[2] = 2 * 2 = 4;
[1] = 1 * 1 = 1;
[6,2] = 2 * 8 = 16;
[2,1] = 1 * 3 = 3;
[6, 2, 1] = 1 * 9 = 9;
從上述計算可見選定區間 [6] ,計算值為 36, 則程式輸出為 36。
區間內的所有數字都在[0, 100]的範圍內;
輸入描述:
第一行輸入陣列序列長度n,第二行輸入陣列序列。
對於 50%的資料, 1 <= n <= 10000;
對於 100%的資料, 1 <= n <= 500000;
輸出描述:
輸出陣列經過計算後的最大值。
輸入例子1:
36 2 1
輸出例子1:
36
求區間和乘區間最小值的最大值
使用單調遞增棧求出以某個點為最小值的左右區間的邊界
單調棧的作用:
有限區間:有頭有尾的閉區間
求過去到當前有限區間的最大值:使用單調遞減棧(棧尾)
求過去到當前有限區間的最小值:使用單調遞增棧(棧尾)
#include
#define ll long long
#define fo(i,j,n) for(register int i=j; i<=n; ++i)
using
namespace std;
const
int n=
5e5+5;
ll n,a[n]
,sum[n]
,st[n]
,l[n]
,r[n]
;void
solve()
top =0;
for(
int i=n; i>=
1; i--
) ll mx =0;
fo(i,
1,n)
cout<}int
main()
題解 2018校招真題(位元組跳動 附加題)
二階魔方又叫小魔方,是2 2 2的立方形結構。每一面都有4個塊,共有24個塊。每次操作可以將任意一面逆時針或者順時針旋轉90 如將上面逆時針旋轉90 操作如下。nero在小魔方上做了一些改動,用數字替換每個塊上面的顏色,稱之為數字魔方。魔方上每一面的優美度就是這個面上4個數字的乘積,而魔方的總優美度...
位元組跳動測試開發4輪面試 位元組跳動大資料開發面試題
1.自我介紹 2.分別介紹下hadoop的幾個組成框架?3.hdfs如何進行寫操作的?4.詳細介紹下mapreduce的工作機制?我重點回答了切片原理和shuffle機制 5.mapreduce有哪些優化方法?6.redis熟不熟,介紹下它有幾種資料型別?我回答了8種,面試官說只有5種,後來在網上搜...
位元組跳動2019校招前端筆試
題目描述 開心消消樂 給定乙個一維的正整數陣列,逐次選擇其中乙個數做消除,消除所獲得的分數為當前數字和左右相鄰數字的乘積 當左邊或者右邊沒有數字可以認為是1 e.g.輸入陣列 3,1,5,8 step1 消除1 獲得分數 15 3x1x5,陣列變為 3,5,8 step2 消除5,獲得分數 120 ...