原创 5504 GT and sequence

分析:題意就是給你n個數,讓你至少選一個數,使得你選的這些數的乘積最大。如果只有1個數,就直接輸出了,如果有正數或負數的個數大於2,答案肯定大於0,否則答案爲0. # include <stdio.h> # include <algori

原创 HDU 5248 序列變換

分析:題意可以理解爲,給你含有n個正整數的數組a,讓你找一個嚴格單調遞增的數組b,使得cost(a,b)=max(|a[i]-b[i]|) (1<=i<=n)最小,我們可以二分查找答案,對於一個d,我們找一個數組b,看是否滿足所有的cos

原创 HDU 5280 Senior's Array

分析:給你n個數字,和一個p,讓你改變n個數中的一個數爲p,使得最長連續子序列之和最大。因爲n不大,<=1000,所以可以暴力求,讓每個數字都變換一次然後求最大值。# include <stdio.h> __int64 MAX(int

原创 HDU 2084 數塔

分析:大水題,看代碼。 # include <stdio.h> # include <string.h> # define Max(x,y) (x>y?x:y) int main() { int i,j,n,t,ma

原创 HDU 5285 wyh2000 and pupil

分析:這題和POJ 2492差不多,所以我用的是並查集,可以把題意理解爲有很多人,要分成兩個幫派,每個幫派至少有1個人,輸入n,m分別代表n個人,和m對有衝突的人,有衝突的不能在一個幫派裏,要儘可能的使第一個幫派的人多一些,如果存在輸出第

原创 HDU 5256 序列變換

分析:因爲要改變最少的數,使得數組a,成爲嚴格遞增,也就是使得a[i+1]>=a[i]+1,即a[i+1]-(i+1)>=a[i]-i。所以令a[i]=a[i]-1,原題就變成了改變最少的數,使得新數組a[i]-=i,不遞減,即a[i+1

原创 HDU 5253 連接的管道

分析:題意就不說了,因爲這題的高度差比較小,所以可以用並查集暴力求解,做的時候發現帶參數的宏定義的效率很低,比如我用# define abs(x) (x>0?x:-(x)) 這樣就超時了,寫個函數就不會超時,用暴力的話,一不小心就超時了。

原创 HDU 2446 Shell Pyramid

分析:題意就是給你一個正4面體的金字塔,從頂往底數,第1層有c[1]=1個球,第2層有c[2]=3個球.....第i層有c[i]=c[i-1]+i個球,第i層有i行,第j行有j個球,現按層從頂往底,按行從上往下,按列從左往右,依次對每個球

原创 ZOJ 1081 Points Within

分析:按順序給你n邊形的n個座標,和一些點的座標,讓你判斷這些點是不是在多邊形內。用改進弧長法來求解比較好,原理可參看網上的,下面附我寫的代碼。 # include <stdio.h> typedef struct point {

原创 HDU 1016 Prime Ring Problem

分析:給你n個球序號分別爲1,2....n,讓你排成一個環,使得任意相鄰2個球的序號和爲素數,輸出所有滿足條件的序列,1是開頭,按字典序輸出。這題可以看做是n個頂點,任意兩個頂點之間有一條無向邊,遍歷所有頂點,使得遍歷的結果圍成一個圈,任

原创 POJ 1279 Art Gallery

分析:題目就是讓你求多邊形的核的面積,多邊形的核就相當於在某一點能看到所有頂點(不穿過邊),這些點的集合就是多邊形的核。 如果有不懂地方可以看我寫的求兩線段交點。 # include <stdio.h> # include <math.

原创 HDU 5476 Explore Track of Point

題意:給你3個點A,B,C的座標,其中AB=AC,M爲BC的中心,三角形內有一點P,讓你求P的軌跡的長度,使得min{∠MPB+∠APC,∠MPC+∠APB}最大。 當P在以BC爲底的△ABC的高上時,必有∠MPB+∠APC=∠MPC+∠

原创 HDU 5339 Untitled

分析:給你數a和b1...bn,求在b1.....bn中選最少的數使a%c1%c2...=0。因爲b數組最多就20個,可以暴力枚舉所有情況,如果給出的數bi>a,就可以把這個數刪掉了,枚舉的時候要把大的數排在前面,不然先mod一個小的數再

原创 HDU 1864 最大報銷額

分析:因爲這裏“揹包容量”和“物體的體積”都是有小數的,所有同一乘以100就是整數了,先把所有的符合條件的發票選出來,然後就是01揹包問題了。 # include <stdio.h> # include <string.h> int

原创 POJ 2187 Beauty Contest

分析:給你一些點,讓你求距離最大的兩個點之前距離的平方。首先求出凸包,然後可以枚舉凸包上所有頂點的距離找到最大值,也可以用旋轉卡殼來求凸包直徑。後者原理網上很多,解釋的也挺好,我就放下我的代碼就好了。 # include <stdio.h