解题报告+优化——试题 基础练习 矩形面积交——16行代码AC
勵(lì)志用少的代碼做高效的表達(dá)。
心路歷程:
第一階段:
最初想獨(dú)立AC出這題來著,但考慮來考慮去,總覺得沒想到點(diǎn)子上,缺點(diǎn)什么似的。于是搜網(wǎng),果不其然,是一種全新的算法“線段交”。當(dāng)然這是簡化版的。 下面說一下判斷線段交的方法;
線段交:
先判斷兩個(gè)矩形是否相交,如果不相交直接輸出0。反之,則輸出4個(gè)橫坐標(biāo)中中間兩個(gè)橫坐標(biāo)值之差, 4個(gè)縱坐標(biāo)中中間兩個(gè)縱坐標(biāo)值之差。(好有道理啊有木有)
好大一坨知識(shí)!學(xué)習(xí)了!
第二階段:
明確思路后,對(duì)題的重心就從解出變成了優(yōu)化。 最開始定義了八個(gè)變量,分別表示(x1,y1)、(x2,y2)、(xi,yi)、(xj,yj),但后來發(fā)現(xiàn)這樣判斷大小太麻煩,索性將所有值存入數(shù)組,用algorithm中sort對(duì)數(shù)組進(jìn)行排序操作,十分方便、整潔。
傳送門→懶癌的福音——algorithm頭文件函數(shù)全集。
注意點(diǎn):
1、別忘了計(jì)算范圍是實(shí)數(shù),最開始搞成了整數(shù),看測試用例時(shí)才發(fā)現(xiàn)。
2、輸入時(shí)第一個(gè)坐標(biāo)可能是矩形四個(gè)點(diǎn)中任意一點(diǎn),第二個(gè)坐標(biāo)是其對(duì)角線。也就是說,需要排序或判斷后,將小的值放在前面,再去運(yùn)算。
3、第九行代碼的意思是:若矩形1中x坐標(biāo)最小值大于等于矩形2中x坐標(biāo)最大值 或 矩形1中x坐標(biāo)最大值小于等于矩形2中x坐標(biāo)最小值…
代碼:
#include<bits/stdc++.h> using namespace std; double x[4], y[4]; int main() {for(int i = 0; i < 4; i += 2)cin >> x[i] >> y[i] >> x[i+1] >> y[i+ 1];sort(x, x+2); sort(x+2, x+4);sort(y, y+2); sort(y+2, y+4);if(x[0] >= x[3] || x[1] <= x[2] || y[0] >= y[3] || y[1] <= y[2]){printf("0.00\n");}else{sort(x, x+4); sort(y, y+4);printf("%.2lf\n", (x[2] - x[1]) * (y[2] - y[1]) );}return 0; }日拱一卒,功不唐捐。
總結(jié)
以上是生活随笔為你收集整理的解题报告+优化——试题 基础练习 矩形面积交——16行代码AC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一看就会——蓝桥杯 试题 基础练习 完美
- 下一篇: 解题报告——蓝桥 试题 基础练习 矩阵乘