description
某公司加工一種由鐵、鋁、錫組成的合金。他們的工作很簡單。首先進口一些鐵鋁錫合金原材料,不同種類的
原材料中鐵鋁錫的比重不同。然後,將每種原材料取出一定量,經過融解、混合,得到新的合金。新的合金的鐵鋁
錫比重為使用者所需要的比重。 現在,使用者給出了n種他們需要的合金,以及每種合金中鐵鋁錫的比重。公司希望能
夠訂購最少種類的原材料,並且使用這些原材料可以加工出使用者需要的所有種類的合金。
input
第一行兩個整數m和n(m, n ≤ 500),分別表示原材料種數和使用者需要的合金種數。第2到m + 1行,每行三
個實數a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分別表示鐵鋁錫在一種原材料中所佔的比重。第m + 2到m +
n + 1行,每行三個實數a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分別表示鐵鋁錫在一種使用者需要的合金中
所佔的比重。
output
乙個整數,表示最少需要的原材料種數。若無解,則輸出–1。
sample input
10 10
0.1 0.2 0.7
0.2 0.3 0.5
0.3 0.4 0.3
0.4 0.5 0.1
0.5 0.1 0.4
0.6 0.2 0.2
0.7 0.3 0
0.8 0.1 0.1
0.9 0.1 0
1 0 0
0.1 0.2 0.7
0.2 0.3 0.5
0.3 0.4 0.3
0.4 0.5 0.1
0.5 0.1 0.4
0.6 0.2 0.2
0.7 0.3 0
0.8 0.1 0.1
0.9 0.1 0
1 0 0
sample output
5解題方法:
第三維可以由前兩維確定,所以可以無視
兩種原料能配成的產品一定在兩點間線段
轉化成在m個點裡找最少點,圍成的多邊形包括了n個目標點
floyd求最小環。。。
否則dis[a][b]=inf
答案是min
特判下所有點重合/共線
**如下:
#include
using
namespace
std;
#define eps 1e-10
const
int inf = 1e8;
void getmin(int &x, int y)
struct point
point(double x, double y) : x(x), y(y) {}
}a[505], b[505];
int dis[505][505];
double cross(point u, point v)
point operator -(point u, point v)
int n, m;
bool isinline(point u, point v)
if(u.y > v.y) swap(u, v);
for(int i = 1; i <= m; i++)
return1;}
int leftorright(point u, point v)
if(!c1 && !c2 && isinline(u, v))
if(c1) return
1; if(c2) return
2; return3;}
void floyd()}}
}}
for(int i = 1; i <= n; i++)
if(ans == inf || ans <= 2)
else
}void getmaze()
}floyd(); //必須寫在這裡,不能寫在外面,因為返回-1代表不滿足了
}bool pre_judge()
for(int i = 1; i <= m; i++)
puts("1");
return1;}
int main()
getmaze();
return
0;}
BZOJ 1027 合金(凸包 最小環)
題意 三種合金的材料若干種。需求合金若干種。每種需求合金可以由材料合金混合得到。問最少需要多少種材料能夠混合出所有需要的合金?struct point point operator point a double operator point a double operator point a poi...
BZOJ3707 圈地 計算幾何
2維平面上有n個木樁,黃學長有一次圈地的機會並得到圈到的土地,為了體現他的高風亮節,他要使他圈到的土地面積盡量小。圈地需要圈乙個至少3個點的多邊形,多邊形的頂點就是乙個木樁,圈得的土地就是這個多邊形內部的土地。因為黃學長非常的神,所以他允許圈出的第n點共線,那樣面積算0 對於100 的資料,n 10...
BZOJ2640 可見區域 計算幾何 平衡樹
題目鏈結 題意 給定n nn條互不相交的線段,從原點向四周看,視線遇到線段會被擋住。求此時能看到的視野範圍,以及分別刪除一條和兩條線段後能看到最大的視野範圍。n 50 000 n le 50,000 n 50,0 00cy拉我做題啦啦啦 考慮用迴圈掃瞄線 就是從原點開始繞360度的掃瞄線 維護每個時...