第七屆藍橋杯Java/A組 第五題
題目:
廣場舞 LQ市的市民廣場是一個多邊形,廣場上鋪滿了大理石的地板磚。 地板磚鋪得方方正正,就像座標軸紙一樣。 以某四塊磚相接的點為原點,地板磚的兩條邊為兩個正方向,一塊磚的邊長為橫縱座標的單位長度,則所有橫縱座標都為整數的點都是四塊磚的交點(如果在廣場內)。 廣場的磚單調無趣,卻給跳廣場舞的市民們提供了絕佳的參照物。每天傍晚,都會有大批市民前來跳舞。 舞者每次都會選一塊完整的磚來跳舞,兩個人不會選擇同一塊磚,如果一塊磚在廣場邊上導致缺角或者邊不完整,則沒人會選這塊磚。 (廣場形狀的例子參考【圖1.png】) 現在,告訴你廣場的形狀,請幫LQ市的市長計算一下,同一時刻最多有多少市民可以在廣場跳舞。
【輸入格式】 輸入的第一行包含一個整數n,表示廣場是n邊形的(因此有n個頂點)。 接下來n行,每行兩個整數,依次表示n邊形每個頂點的座標(也就是說廣場邊緣拐彎的地方都在磚的頂角上。資料保證廣場是一個簡單多邊形。 【輸出格式】 輸出一個整數,表示最多有多少市民可以在廣場跳舞。 【樣例輸入】 5 3 3 6 4 4 1 1 -1 0 4 【樣例輸出】 7 【樣例說明】 廣場如圖1.png所示,一共有7塊完整的地板磚,因此最多能有7位市民一起跳舞。 【資料規模與約定】 對於30%的資料,n不超過100,橫縱座標的絕對值均不超過100。 對於50%的資料,n不超過1000,橫縱座標的絕對值均不超過1000。 對於100%的資料,n不超過1000,橫縱座標的絕對值均不超過100000000(一億)。 資源約定: 峰值記憶體消耗 < 256M CPU消耗 < 1000ms 請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。 所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。 注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。 注意:主類的名字必須是:Main,否則按無效程式碼處理。
思路:
1.找到圖形整體所在的X區間
2.將影象的頂點存在一個set集合中,由於不懂如何在set中存二元座標,所以定義了內部類point 含有兩個屬性x,y 。
3. 由頂點座標依次遍歷每一條邊,找到每一條線段,在X區間的每一個x值對應的y值, 並將其存在map 中
4. 然後通過y值上下的減法,得到每個x值有效的座標點的數量
5.通過座標點的數量求小矩形的面積: 兩個相鄰的x值組成的座標塊數量= min(兩個有效座標的的數量)-1;
6.加和得出result
程式碼如下:
package come_on; import java.util.*; public class Fifth { static intx_start; static int x_end; static class point{ float x; float y; public point(float x, float y){ this.x=x; this.y=y; } } public static void main(String args[]){ ArrayList<point> list = new ArrayList<>(); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.nextLine(); for(int i=0;i<n;i++){ point points = new point(scanner.nextInt(),scanner.nextInt()); scanner.nextLine(); list.add(points); } Set<point> set = new HashSet<>(); x_start = (int)list.get(0).x; x_end= (int)list.get(0).x; for(int i=0;i<5;i++){ float x1 = list.get(i).x; float y1 = list.get(i).y; float x2,y2; if(x_start>=(int)x1) x_start= (int)x1; if(x_end<=(int)x1) x_end= (int)x1; if(i!=list.size()-1){ x2 = list.get(i+1).x; y2 = list.get(i+1).y; } else { x2 = list.get(0).x; y2 = list.get(0).y; } for(float x0=Math.min(x1,x2);x0<Math.max(x1,x2);x0++){ float y0 =(y1-y2)/(x1-x2)*(x0-x1)+y1; point point_x = new point(x0,y0); set.add(point_x); } } Map<Integer,Integer> map = new TreeMap<>(); map.put(x_start,0); map.put(x_end,0); for(point p:set){ float x0 = p.x; float y0 =p.y; for(point p0:set){ float x00 =p0.x; float y00 =p0.y; if(x00==x0&&y0>y00){ map.put((int)x0,(int)((int)y0-y00)+1); } } } int result =0; for(int i =x_start;i<x_end-1;i++){ if(map.get(i)!=null&&map.get(i+1)!=null){ int q = Math.min(map.get(i),map.get(i+1))-1; if(q>=0) result+=q; } } System.out.println(result); } }
這道題沒有檢視答案,做了大概有四個小時,感覺自己的不足還很多,繼續加油。
同樣還有個問題沒有搞懂(百度也沒有查到),希望大神指點一二:
set集合用迭代器輸出自定義物件point的時候,打印出來的是地址,但是用for迴圈輸出的時候就沒有這個問題,不知道是為什麼。
以及還有什麼更好的想法或者思路歡迎交流討論。
相關推薦
第七屆藍橋杯Java/A組 第五題
題目:廣場舞 LQ市的市民廣場是一個多邊形,廣場上鋪滿了大理石的地板磚。 地板磚鋪得方方正正,就像座標軸紙一樣。 以某四塊磚相接的點為原點,地板磚的兩條邊為兩個正方向,一塊磚的邊長為橫縱座標的單位長度,則所有橫縱座標都為整數的點都是四塊磚的交點(如果在廣場內)。 廣場的
第七屆藍橋杯JAVA B組省賽-四平方和試題
四平方和 四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為4個數的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 +
藍橋杯-第七屆藍橋杯java B組決賽
一、憤怒小鳥 X星球憤怒的小鳥喜歡撞火車! 一根平直的鐵軌上兩火車間相距 1000 米 兩火車 (不妨稱A和B) 以時速 10米/秒 相對行駛。 憤怒的小鳥從A車出發,時速50米/秒,撞向B車, 然後返回去撞A車,再返回去撞B車,如此往復.... 兩火車在相距1米處停車。
第七屆藍橋杯Java C組決賽試題
1.平方末尾能夠表示為某個整數的平方的數字稱為“平方數”比如,25,64雖然無法立即說出某個數是平方數,但經常可以斷定某個數不是平方數。因為平方數的末位只可能是:[0, 1, 4, 5, 6, 9] 這6個數字中的某個。所以,4325435332必然不是平方數。如果給你一個2
第八屆藍橋杯Java A組決賽試題
1.標題:圖書排列將編號為1~10的10本書排放在書架上,要求編號相鄰的書不能放在相鄰的位置。請計算一共有多少種不同的排列方案。注意,需要提交的是一個整數,不要填寫任何多餘的內容。答案:479306思路:全排或者DFSimport java.util.*; public cl
第七屆藍橋杯Java B組決賽試題
1.憤怒小鳥X星球憤怒的小鳥喜歡撞火車!一根平直的鐵軌上兩火車間相距 1000 米兩火車 (不妨稱A和B) 以時速 10米/秒 相對行駛。憤怒的小鳥從A車出發,時速50米/秒,撞向B車,然後返回去撞A車,再返回去撞B車,如此往復....兩火車在相距1米處停車。問:這期間憤怒的
第七屆藍橋杯java B組試題之分小組小題
9名運動員參加比賽,需要分3組進行預賽。 有哪些分組的方案呢? 我們標記運動員為 A,B,C,… I 下面的程式列出了所有的分組方法。 該程式的正常輸出為: ABC DEF GHI ABC DEG FHI ABC DEH FGI ABC DEI
第六屆藍橋杯java b組第三題
watermark alt args 暴力破解 out col HR sdn oid 第三題 三羊獻瑞 觀察下面的加法算式: 其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。 請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多余內容。 答案這個題目
第六屆藍橋杯java b組第8題
CP stat exti 要求 得到 嚴格 else scan 內容 樂羊羊飲料廠正在舉辦一次促銷優惠活動。樂羊羊C型飲料,憑3個瓶蓋可以再換一瓶C型飲料,並且可以一直循環下去,但不允許賒賬。 請你計算一下,如果小明不浪費瓶蓋,盡量地參加活動,那麽,對於他初始買入的n瓶飲料
2015 第六屆 藍橋杯 Java C組 第8題 矩陣排列
矩陣排列輸入w m n ,w為寬度如寬度為6 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 16 17 18 24 23 22 21 20 19.........
2016第七屆藍橋杯C++B組第八題:四平方和
題目: 四平方和 四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為4個數的平方和。 比如: 5 = 0^2 + 0^2
算法筆記_212:第七屆藍橋杯軟件類決賽真題(Java語言B組)
技術 emp 字符串表 求解 如果 過去 系統 多少 ann 目錄 1 憤怒小鳥 2 反幻方 3 打靶 4 路徑之謎 5 堿基 6 圓圈舞 前言:以下代碼僅供參考,若有錯誤歡迎指正哦~ 1 憤怒小鳥 憤怒小鳥 X星球憤怒的小鳥喜歡撞火車! 一根平直的鐵
第七屆藍橋杯Java語言B組真題(省賽)
今天參加藍橋JAVA語言B組的競賽剛剛結束,把真題和大家分享一下。 1.煤球數目 (結果填空) 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形), 第三層6個(排列成三角形), 第四層10個(排列成三角形), .... 如果一共有100
第七屆藍橋杯大學生C組java決賽題目 密文搜尋
標題:密文搜尋福爾摩斯從X星收到一份資料,全部是小寫字母組成。他的助手提供了另一份資料:許多長度為8的密碼列表。福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。請你編寫一個程式,從第一份資料中搜
第六屆藍橋杯java b組第一題
都是 text nbsp post ppa hbm 藍橋杯 文字 fill 第一題 三角形面積 圖中的所有小方格面積都是1。 那麽,圖中的三角形面積應該是多少呢? 請填寫三角形的面積。不要填寫任何多余內容或說明性文字。 填空答案 28 沒什麽好說的 第一題很水 估計
第七屆藍橋杯 Java 煤球數目問題
煤球數目 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形), 第三層6個(排列成三角形), 第四層10個(排列成三角形), … 如果一共有100層,共有多少個煤球? 請填表示煤球總數目的數字。 注意:你提交的應該是一個整數,不要填寫
第八屆藍橋杯JAVA B組【省賽】
一.標題: 購物單小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。小明也有個怪癖,不到萬不得已,從不刷卡,直接現金搞定。現在小明很心煩
第八屆藍橋杯 java B組 日期問題
標題:日期問題 小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有采用年/月/日的,有采用月/日/年的, 還有采用日/月/年的。更加麻煩的是,年份也都
2015第六屆藍橋杯C++B組第七題:牌型種數
題目: 牌型種數 小明被劫持到X賭城,被迫與其他3人玩牌。 一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。 這時,小明腦子裡突然冒出一個問題: 如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合
第七屆藍橋杯C++B組 四平方和
四平方和四平方和定理,又稱為拉格朗日定理:每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符號表示乘方的意思)對於一個