ps:本題博主沒寫出來,看了下面這位博主的寫法豁然開朗,附上連線:
2023年風靡全球的「水果忍者」遊戲,想必大家肯定都玩過吧?(沒玩過也沒關係啦~)在遊戲當中,畫面裡會隨機地彈射出一系列的水果與炸彈,玩家盡可能砍掉所有的水果而避免砍中炸彈,就可以完成遊戲規定的任務。如果玩家可以一刀砍下畫面當中一連串的水果,則會有額外的獎勵,如圖1所示。
圖 1現在假如你是「水果忍者」遊戲的玩家,你要做的一件事情就是,將畫面當中的水果一刀砍下。這個問題看上去有些複雜,讓我們把問題簡化一些。我們將遊戲世界想象成乙個二維的平面。遊戲當中的每個水果被簡化成一條一條的垂直於水平線的豎直線段。而一刀砍下我們也僅考慮成能否找到一條直線,使之可以穿過所有代表水果的線段。
圖 2如圖2所示,其中綠色的垂直線段表示的就是乙個乙個的水果;灰色的虛線即表示穿過所有線段的某一條直線。可以從上圖當中看出,對於這樣一組線段的排列,我們是可以找到一刀切開所有水果的方案的。
另外,我們約定,如果某條直線恰好穿過了線段的端點也表示它砍中了這個線段所表示的水果。假如你是這樣乙個功能的開發者,你要如何來找到一條穿過它們的直線呢?
輸入在第一行給出乙個正整數n
(≤104),表示水果的個數。隨後n
行,每行給出三個整數x、y1、y2,其間以空格分隔,表示一條端點為(x,y1)和(x,y2)的水果,其中y1>y2。注意:給出的水果輸入集合一定存在一條可以將其全部穿過的直線,不需考慮不存在的情況。座標為區間 [−106,106) 內的整數。
在一行中輸出穿過所有線段的直線上具有整數座標的任意兩點p1(x1,y1)和p2(x2,y2),格式為 x1y1x2y2。注意:本題答案不唯一,由特殊裁判程式判定,但一定存在四個座標全是整數的解。
5
-30 -52 -84
38 22 -49
-99 -22 -99
48 59 -18
-36 -50 -72
-99 -99 -30 -52
對於所有線段的上端點求乙個下凸,下端點求乙個上凸,因為題目說一定存在乙個可行解,則可行解一定在這兩個凸包之間。分為兩種情況
一、
所有的上端點都在下端點凸包一邊的上側,則這條邊就是乙個可行解。
二、
對於上端點凸包的一條邊,所有下端點凸包上的點都等於它,那麼這條邊就是乙個可行解。
#include "bits/stdc++.h"
using namespace std;
const int maxn = 1e4 + 1000;
const int inf = 0x3f3f3f3f;
int sup[maxn], sdown[maxn];
int n;
struct point up[maxn], down[maxn];
bool cmp(point a, point b)
bool checkup(point a, point b, point c)
bool checkdown(point a, point b, point c)
int main()
sort(up, up + n, cmp);
sort(down, down + n, cmp);
int dx = 0;
int to = n;
for (int i = 1; i < n; i++) else
}dx = 0;
for (int i = 1; i < n; i++) else
}sort(up, up + n, cmp);
sort(down, down + n, cmp);
if (to == 1)
int upos = 0, dpos = 0;
for (int i = 0; i < to; i++)
int i, j;
point ansl, ansr;
for (i = 0; i < upos - 1; i++)
if (j == dpos) break;
}if (i == upos - 1)
if (j == upos) break;
}ansl = down[sdown[i]];
ansr = down[sdown[i + 1]];
} else
printf("%d %d %d %d\n", ansl.x, ansl.y, ansr.x, ansr.y);
return 0;
}
水果忍者(二)
簡化一下吧,就是,給你乙個螢幕 二維座標系 螢幕上有很點,必殺技的那個矩形的四個頂點必須是以螢幕上的水果為頂點,現在要你算一下,對於這個螢幕,你能放多少種不同的必殺,也就是有多少個不同的矩形 只要任意一點的座標不同均視為不同矩形 輸入格式 有多組資料,第一行為乙個數t t 10 表示有多少組資料。接...
水果忍者遊戲
size large 水果忍者遊戲 此篇文章是在時間較為緊的情況之下寫 不足之處 日後定當豐富之。望見諒。做軟體開發的同學應該知道 水果忍者遊戲本身其實是個大隨機 隨機產生丟擲水果 每個水果隨機運動 而這一切使用最重要的就是執行緒的運用了。按照自己小組做出的水果忍者遊戲的步驟 大至分為遊戲選擇介面 ...
水果忍者劃痕效果
網上找的乙個關於水果忍者劃痕的,效果還算湊合。其原理就是基於opengl繪製直線,由於版本過老,此處筆者修改了一些方法,貼上後可直接使用 適用於cocos2d x 2.2.1 h檔案中需要加入的 void draw void drawline virtual void cctouchesbegan ...