CCSP2016-1 选座(ticket_chooser)
CCSP2016-1 選座(ticket_chooser)
【題目描述】
小 B 是一個電影迷,只要有時間,她就要去觀摩最新的大片。但她不喜歡自己在 電腦或其他電子設備上觀看,而是喜歡去電影院,因為她覺得那里更有氣氛。 由于工作關系,小 B 這次被派到 A 地一段時間,她發(fā)現(xiàn)這里的電影院和她熟悉的 模式完全不同。 電影院內(nèi)部都是正方形的,一共有 k 排,從前到后按照 1 到 k 編號,每排內(nèi)有 k 個座位,從左到右按照 1 到 k 編號,其中 k 為奇數(shù)。 考慮到安全因素,座位不允許購票者自行挑選,而是由售票人員通過電腦程序確定。 由于大家都希望有更好的觀影效果,因此一般都傾向于選擇更靠近影院中心的座位。 電腦程序選擇座位的過程為: 如果有人需要購買 m 張電影票,程序首先會確定一個排號 x,并從中選擇一段連 續(xù)且尚未售出的座位號 [l,r] ,其中 r?l + 1 = m 。 如果沒有任何一排中有 m 個連續(xù)的空座位,則電腦程序會報錯,在這個購票請求 中將不會賣出任何票。 在保證選出的座位在同一排且座位號連續(xù)的前提下,程序會選擇最 ‘‘接近中心’’ 的 座位。 具體來說,令 xcx_{c}xc? = ycy_{c}yc? = (k+1)/2 ,表示影院中最中心的座位。定義選出的這些座位到 影院中心的距離函數(shù)為:
∑i=lr∣x?xc∣+∣i?yc∣\sum_{i=l}^{r}|x?x_{c}|+|i?y_{c}| i=l∑r?∣x?xc?∣+∣i?yc?∣
最 ‘‘接近中心’’ 的座位為能最小化上述函數(shù)的座位。若有多個可選座位均滿足離影 院中心距離最小的條件,則選座程序優(yōu)先選擇靠前的座位(即排號 x 最小的座位)。若 仍有多個座位符合要求,則選座程序優(yōu)先選擇靠左的座位(即座位號 l 值最小的座位)。 假設電影院最開始沒有售出任何座位,小 B 希望知道對于給出的 n 個購票請求, 每次售出的票都能買到哪些座位?
【輸入描述】
輸入包含多組數(shù)據(jù),你需要用判斷是否讀到文件末尾的形式判斷輸入是否結(jié)束。 每組數(shù)據(jù)的第一行包含兩個正整數(shù) n 和 k,表示購票請求的數(shù)量和影院大小。保證 1≤n≤300,000,1≤k≤300,001,且 k 為奇數(shù)。 第二行為空格分隔的 n 個正整數(shù),其中第 i(1 ≤i≤n)個數(shù)為 mi,表示每次要求 購買的票數(shù),保證 1≤mi ≤k。
【輸出描述】
每組數(shù)據(jù)輸出包含 n 行,每個購買請求的結(jié)果為一行。0 如果無法在一排中買到 mi 個連續(xù)的座位,則在對應的行中輸出 ?1。否則輸出三個 空格分隔的整數(shù) x,l,r,為所買電影票的排號和起止座位號。
【樣例 1 輸入】
2 1
1 1
4 3
1 2 3 1
【樣例 1 輸出】
1 1 1
-1
2 2 2
1 1 2
3 1 3
2 1 1
【子任務】
對于 20% 的測試數(shù)據(jù),n≤50,k≤25;
對于 40% 的測試數(shù)據(jù),n≤100,k≤101;
對于 50% 的測試數(shù)據(jù),n≤1000,k≤501;
對于 60% 的測試數(shù)據(jù),n≤1000,k≤1001;
對于 70% 的測試數(shù)據(jù),n≤50000,k≤50001;
對于 80% 的測試數(shù)據(jù),n≤100000,k≤100001;
對于 90% 的測試數(shù)據(jù),n≤200000,k≤200001;
對于 100% 的測試數(shù)據(jù),n ≤ 300000,k ≤ 300001 ,保證每個測試點的數(shù)據(jù)組數(shù)不 超過 5 組。
總結(jié)
以上是生活随笔為你收集整理的CCSP2016-1 选座(ticket_chooser)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10行Python代码批量实现pdf转t
- 下一篇: 高斯函数和正态分布