第一題:
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 25 3
4 67 5
9 0
4 67 59 0
1 #include 2 #include 3 #include 4view codeusing
namespace
std;56
struct
point7;
10 point points[500001
];11
bool
cmp(point a,point b)12
1516
intmain()
1724
//按照y公升序,x降序排列
25 sort(points,points+n,cmp);
26point mark;
27 mark.x=points[0
].x;
28 mark.y=points[0
].y;
29 printf("
%d %d\n
",mark.x,mark.y);
30for(int i=0;i)
3138}39
40/*
int maxx = point[n-1].x;
41for(int i=n-2;i>=0;i--)
4248
} */
49return0;
50 }
給定乙個陣列序列, 需要求選出乙個區間, 使得該區間是所有區間中經過如下計算的值最大的乙個:
區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列 [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
36
1 #include 2 #include 3 #include 4view codeusing
namespace
std;
5const
int maxn = 5e5+10;6
inta[maxn];
7intn;8
9int
main()
1017
int max1 = 0;18
for(int i=1;i<=n;i++)
1928
else
break;29
}30for(int j=i+1;j<=n;j++)
3136
else
break;37
}38 max1 = max(max1,sum*min1);39}
40 cout
42return0;
43 }
演算法題 2018今日頭條程式設計題二
使用dp i,j 表示區間 i,j 能得到計算值的最大值 k表示區間 i,j 的最小值min的下標索引 則序列結構可表示如下 i,k 1 min k 1,j i,j 所有子區間分為兩種情況 包含min 不包含min 在所有包含min的子區間 m,n 中,計算值 mi n su m m,n mi n ...
演算法題 2018今日頭條程式設計題一
維持乙個當前邊界點的陣列,按x從小到達排序,由於是邊界點,故其y對應是從大到小排序的。對於乙個新加入的點,分別按x和y座標值二分查詢其在邊界點陣列中的位置 iter x iter y include include include include include include using name...
今日頭條 今日頭條三面面經
一面 1 演算法題,程式設計實現nsum 2 實現元素的居中並且寬高比為3 4 3 實現繼承 4 給了一段 給出輸出結果,這個是和非同步相關 5 http的狀態碼有哪些 6 cookie和session的區別,以及如何生成session 7 給 寫輸出和原型鏈相關 8 變數宣告提公升 三面 1 介紹...