ZOJ 3645 BiliBili 高斯消元

2021-08-03 16:03:27 字數 1363 閱讀 2177

題意:11維度上有乙個未知的點,現在已知12個點的座標和他們到這個未知的點的距離,去求這個未知的點的座標。

思路:乙個座標可得出的資訊:

(ai1-x1)^2 + (ai2-x2)^2 +(ai3-x1)^2 + (ai4-x2)^2 +(ai5-x1)^2 + (ai6-x2)^2 +(ai7-x1)^2 + (ai8-x2)^2 + (ai9-x2)^2 +(ai10-x1)^2 + (ai11-x2)^2 = dis^2

於是發現兩個座標的資訊相減就可以得到乙個一次方程組,11個未知數,所以列出11個方程足夠。然後再進行高斯消元即可。

code:

#include #include #include #include #define ll long long

using namespace std;

const int maxn = 15;

const double eps = 1e-12;

double matrix[maxn][maxn], a[maxn][maxn];

double x[maxn];

int n = 11;

inline int sgn(double x)

void swap_row(int a, int b)

}void swap_col(int a, int b)

}bool gauss()

if(sgn(matrix[maxrow][col]) == 0)

if(maxrow != row) swap_row(row, maxrow);

for(i = row+1; i < n; ++i)

}} ++col;

} for(i = row; i < n; ++i)

if(sgn(matrix[row][n]) != 0) return false;

for(i = 0; i < n && i < n; ++i)

}} return true;

}void calc_x()

}void init()

void solve()

} //移項會造成符號變化,常數列單獨拿出來處理

for(int i = 1; i < 12; ++i) matrix[i-1][n] += a[i-1][n]*a[i-1][n]-a[i][n]*a[i][n];

gauss();

calc_x();

for(int i = 0; i < n-1; ++i)

printf("%.2f ", x[i]+eps);

printf("%.2f\n", x[n-1]+eps); }}

int main()

繼續加油~

專案36 4 血型統計

任務和 黑貓警長在犯罪現場發現了一些血跡,現已經委託檢驗機構確定了血型,需要統計各種血型的樣本數目。輸入 血型序列 a b o c,c代表ab型血,輸入以x結束 輸出 各種血型的數量 輸入樣例 abcaocoaoobx 輸出樣例 a 3 b 2 o 4 ab 2 檔名 main.c 完成日期 201...

nyoj364田忌賽馬

題意 和古代的田忌賽馬一樣,只是可以有多匹馬 大體思路用貪心,主要 盡量多贏幾場 這就有兩點 1.贏的時候盡量贏差不多的對手 2.實在贏不了,就去消耗對方高手 include include using namespace std int t 10000 int k 10000 int main v...

NYOJ 364 田忌賽馬

題意 田忌和齊王各有n匹馬,判斷怎樣比賽,使田忌淨勝場數最多。我感覺這題的精髓就是,不管怎麼比賽,都要讓田忌的馬發揮最大價值。當然,馬的第一要務是用來贏得比賽,而且要最大效益的贏,也就是要贏對方僅次於自己的馬。當他不能完成這個任務的時候就要去輸,並拉對方最快的馬下水,給自己後面的隊友創造更大的勝利機...