多邊形構成問題(今日頭條筆試題)
問題描述:有一個由很多木棒構成的集合,每個木棒有對應的長度,請問能否用集合中的這些木棒以某個順序首尾相連構成一個面積大於 0 的簡單多邊形且所有木棒都要用上,簡單多邊形即不會自交的多邊形。
初始集合是空的,有兩種操作,要麼給集合新增一個長度為 L 的木棒,要麼刪去集合中已經有的某個木棒。每次操作結束後你都需要告知是否能用集合中的這些木棒構成一個簡單多邊形。
輸入描述:每組測試用例僅包含一組資料,每組資料第一行為一個正整數 n 表示操作的數量(1 ≤ n ≤ 50000) , 接下來有n行,每行第一個整數為操作型別 i (i ∈ {1,2}),第二個整數為一個長度 L(1 ≤ L ≤ 1,000,000,000)。如果 i=1 代表在集合內插入一個長度為 L 的木棒,如果 i=2 代表刪去在集合內的一根長度為 L 的木棒。輸入資料保證刪除時集合中必定存在長度為 L 的木棒,且任意操作後集合都是非空的。
輸出描述:對於每一次操作結束有一次輸出,如果集合內的木棒可以構成簡單多邊形,輸出 "Yes" ,否則輸出 "No"。
輸入例子:
5 1 1 1 1 1 1 2 1 1 2
輸出例子:
No No Yes No No
分析:問題的本質其實就是,給定n條邊,問能否構成n邊形,然而給定n條邊,問能否構成n邊形的條件是任意n-1條邊大於另一條邊。因此本題可以從此處著手。
Java程式碼如下,程式碼寫法比較通用,讀者可以很容易轉換為其他語言實現:
import java.util.*; public class Main { public static boolean panduan(int a[],int n){ //用來判斷能夠構成n邊形 boolean flag=true; //先假設可以構成n邊形,再去找不能構成的理由 if(n<3)return false; //如果少於三條邊,那麼肯定構不成 Arrays.sort(a,0,n); //將木棒按長度進行排序 int s=0; for(int j=0;j<n-1;j++) s=s+a[j]; if(s<=a[n-1])flag=false; //用最長的木棒和剩餘木棒長度和進行比較即可判斷 return flag; } public static void main(String[] args) { // TODO 自動生成的方法存根 Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nextInt(); //讀入n int a[]=new int[n]; //建立一個數組用來儲存每條邊 for(int i=0;i<n;i++) { int caozuo=scan.nextInt(); //運算元,只能是1或2 int L=scan.nextInt(); //邊長 if(caozuo==1)a[i]=L; //如果新增木棒,則正常放入 else { for(int j=i-1;j>=0;j--) //如果減少木棒,則將之前和L相等的一條木棒去掉 if(a[j]==L){a[j]=0;break;} } if(panduan(a,i+1))System.out.println("Yes"); else System.out.println("No"); } } } }
輸出結果為:
5
1 1
No
1 1
No
1 1
Yes
2 1
No
1 2
No
相關推薦
多邊形構成問題(今日頭條筆試題)
問題描述:有一個由很多木棒構成的集合,每個木棒有對應的長度,請問能否用集合中的這些木棒以某個順序首尾相連構成一個面積大於 0 的簡單多邊形且所有木棒都要用上,簡單多邊形即不會自交的多邊形。 初始集合是空的,有兩種操作,要麼給集合新增一個長度為 L 的木棒,要麼刪去集合中
2018春招-今日頭條筆試題-第三題(python)
font val gpo -s nbsp blog eva 字符 今日頭條 題目描述:2018春招-今日頭條筆試題5題(後附大佬答案-c++版) 解題思路: 本題的做法最重要的應該是如何拼出‘1234567890’,對於輸入表達試獲得對應的結果利用python內置函數eva
[Nowcoder] 大整數相乘(拼多多筆試題)
pac push_back coder 大數 str1 位數 問題 str 例子 有兩個用字符串表示的非常大的大整數,算出他們的乘積,也是用字符串表示。不能用系統自帶的大整數類型。 輸入描述: 空格分隔的兩個字符串,代表輸入的兩個大整數 輸出描述: 輸入的乘積,用字符串表
今日頭條筆試題--2018(3) 【 優先隊列 】
pre operator 程序 兩個 分別是 strong 條件 ide priority 時間限制:1秒 空間限制:81920K 產品經理(PM)有很多好的idea,而這些idea需要程序員實現。現在有N個PM,在某個時間會想出一個 idea,每個 ide
瞌睡 (網易筆試題)
題目描述 小易覺得高數課太無聊了,決定睡覺。不過他對課上的一些內容挺感興趣,所以希望你在老師講到有趣的部分的時候叫醒他一下。你知道了小易對一堂課每分鐘知識點的感興趣程度,並以分數量化,以及他在這堂課上每分鐘是否會睡著,你可以叫醒他一次,這會使得他在接下來的k分鐘內保持清醒
今日頭條筆試題,任務排程問題
產品經理(PM)有很多好的idea,而這些idea需要程式設計師實現。現在有N個PM,在某個時間會想出一個 idea,每個 idea 有提出時間、所需時間和優先等級。對於一個PM來說,最想實現的idea首先考慮優先等級高的,相同的情況下優先所需時間最小的,還相同的情況下選擇
20170330今日頭條筆試題
只有四個程式設計題 1 2 3 #include <iostream> using namespace std; int main() { string s; cin>>s;
C/C++程式題(騰訊筆試題)
//不用sizeof()求一個整型數的字長 /*#include <stdio.h> int main(){int a;a=-1;unsigned int x;x=(int)a; printf("%d\n",a);printf("%u\n",x);in
硬幣遊戲(阿里巴巴筆試題)
硬幣遊戲:連續扔硬幣,直到某一人獲勝。A獲勝條件是先正後反,B獲勝是出現連續兩次反面,問AB遊戲時A獲勝概率是()? A、 1/6 B、 1/4 C、1/3 D、1/2 E、2/3 F、3/4 **這是一個非常有意思的問題,因為如果是連續仍的,第一
每日一練——大數加減乘除運算實現(網易筆試題)
前幾天做網易筆試題時最後一道題是設計一個大數類,實現加減運算,因為做這道題時只有5分鐘,結果我剛把類寫出來,考試時間就結束了。其實在去年12月我寫過一個RSA的加解密程式,其中就用到了大數的加減乘除運算(當然這只是RSA用到的一小部分),沒有把最後一題寫上去實在太可惜了(&
今日頭條筆試題
#include <iostream> #include <vector> using namespace std; int main() { int n, x, num; while(cin >> n &
「每日一面」生產者消費者問題(今日頭條Android崗位面試題)
以前去面試今日頭條Android崗位,沒有問太多安卓技術問題,印象比較深的就是讓手寫一下生產者消費者的問題。當時只想到多執行緒,等待阻塞,但是準備不足,沒有寫出來。今天再覆盤理解分享一下。1. 生產者消費者問題? 生產者消費者問題(英語:Prod
今日頭條面試題(二)
重新排隊 XX幼兒園的孩子們準備遊戲,一共有n個孩子,孩子按照他們的號碼從1~n排成一排,可是有些調皮的孩子,他們想排在最前面,而他後面的孩子總會緊跟在他後面。經過Q次排隊(Q<100000),你能確定他們最後的順序嗎? 樣例有3個孩子,剛開始
2018年各大網際網路前端面試題五(今日頭條)
基礎行標籤都有哪些?特點?img標籤的用法請描述一下cookies,sessionStorage和localStorage的區別?一個div,高度是寬度的50%,讓該div的寬度佔據整個螢幕,然後能自適應,垂直居中,怎麼實現?針對移動瀏覽器端開發頁面,不期望使用者放大螢幕,且要求“視口(viewport)”寬
Python求解啤酒問題(攜程2016筆試題)
sep 走了 參考資料 很難 bucket static turn and item 問題描述:一位酒商共有5桶葡萄酒和1桶啤酒,6個桶的容量分別為30升、32升、36升、38升、40升和62升,並且只賣整桶酒,不零賣。第一位顧客買走了2整桶葡萄酒,第二位顧客買走的葡萄酒是
頭條校招(今日頭條2017秋招真題)1——python解法
題目描述 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊。每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來。在選題之前,我們對題目進行了盲審,並定出了每道題的難度係數。一場考試包含3道開放性題目,假設他們的難度從小到大分別為a, b, c,我
計算器 (貝殼筆試題)
描述 假設有這樣一個計算器,該計算器只有兩個按鈕,按下第一個按鈕能使顯示數值減少1,按下第二個按鈕能使顯示數值乘以2,當前顯示數值為N,那麼至少要按多少次按鈕才能使顯示數值變成M? 輸入 輸
單詞查詢(公司筆試題)
題目:單詞查詢 分析:題目限制了字母在詞典中只可以上下左右相鄰,那就意味著不能左上、右上、左下、右下、那就 比起八個方向的就更加簡單。具體實現就深搜唄~具體細節在程式碼的註釋 測試樣例: 5 5 3 hello help high p a b h m f h e
白話經典算法系列之九 從歸併排序到數列的逆序數對(微軟筆試題)
首先來看看原題 微軟2010年筆試題 在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為一個逆序數對。一個排列中逆序的總數就稱為這個排列的逆序數。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序數對,因此整個陣列的逆序數對個數為
7進位制字串轉為10進位制的int型別數字(H3C筆試題)
【2011年華三通訊應屆生筆試題】題目:請寫一段將7進位制轉為10進位制的正整數的函式。 【思路】在Java API中有相關的函式,Integer.parsint(String str,int ra