22行代码AC_试题 历届试题 油漆面积【解题报告】
勵志用更少的代碼做更高效的表達
X星球的一批考古機器人正在一片廢墟上考古。
該區域的地面堅硬如石、平整如鏡。
管理人員為方便,建立了標準的直角坐標系。
每個機器人都各有特長、身懷絕技。它們感興趣的內容也不相同。
經過各種測量,每個機器人都會報告一個或多個矩形區域,作為優先考古的區域。
矩形的表示格式為(x1,y1,x2,y2),代表矩形的兩個對角點坐標。
為了醒目,總部要求對所有機器人選中的矩形區域涂黃色油漆。
小明并不需要當油漆工,只是他需要計算一下,一共要耗費多少油漆。
其實這也不難,只要算出所有矩形覆蓋的區域一共有多大面積就可以了。
注意,各個矩形間可能重疊。
本題的輸入為若干矩形,要求輸出其覆蓋的總面積。
輸入格式:
第一行,一個整數n,表示有多少個矩形(1<=n<10000)
接下來的n行,每行有4個整數x1 y1 x2 y2,空格分開,表示矩形的兩個對角頂點坐標。
(0<= x1,y1,x2,y2 <=10000)
輸出格式:
一行一個整數,表示矩形覆蓋的總面積。
例如,
輸入:
3
1 5 10 10
3 1 20 20
2 7 15 17
程序應該輸出:
340
再例如,
輸入:
3
5 2 10 6
2 7 12 10
8 1 15 15
程序應該輸出:
128
思路分析
作為2017年A組的最后一題, 我是抱著視死如歸的心態去做的, 讀完題,第一反應是用暴力解, 但一算極限的時間規模, 1w*1w*1w(輸入1w個矩形,每個矩形的大小都是1w*1w),也不對啊?! 于是網搜。
網上的解法清一色全是暴力,每遍歷一個矩形,將其中所有點置1, 最后數點的個數即可。 我人都傻了 藍橋杯都不測極限數據的么
代碼展示
#include<iostream> using namespace std;bool vis[10005][10005];int main() {ios::sync_with_stdio(false);int sum = 0;int n; cin>>n;int x1, y1, x2, y2; while(n--) {cin>>x1>>y1>>x2>>y2;if(x1>x2) { int t=x1; x1=x2; x2=t; }if(y1>y2) { int t=y1; y1=y2; y2=t; }for(int i = x1; i<x2; i++)for(int j = y1; j<y2; j++) if(vis[i][j]==false) {sum++;vis[i][j] = true;} }cout << sum << endl; return 0; }總結
1 即使時間規模超限,如果沒有更好的解法也要寫上去, 說不定這道題就沒有極限數據-_-||
2 不僅要算時間規模, 也要算空間規模, 如本題如果開int型數組, 占用內存為400M,就會超出內存限制。
3 藍橋杯大題的試題難度大概與題號不成正相關, 所以考試時一定要全面瀏覽試題在開動, 而不是一道一道啃
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的22行代码AC_试题 历届试题 油漆面积【解题报告】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【解题报告+思路拓展】蓝桥杯 拉马车 2
- 下一篇: 【思维】最大降雨量(解题报告)