HDU5017 2023年西安網路賽K題

2021-06-25 16:15:07 字數 1112 閱讀 2983

第三場網路賽又水掉了……

說下這題吧。題意很簡單,就是求橢球面a x^2 + b y^2 + c z^2 +d yz + e zx + f xy = 1到原點距離的最小值。比賽開始時就看到了這題,結果開始的思路完全錯浪費了好多時間,甚至還以為是精度問題。到了最後才終於想出做法,無奈沒時間敲。賽後敲一下子就ac了,只能說略可惜……

思路其實就是幾代裡面學的非退化線性變換。首先可以寫出這個二次型的係數矩陣a,然後因為係數矩陣是對稱的,所以一定存在乙個正交矩陣c使得c^t*a*c等於乙個對角陣,並且對角線上的元素就是a所有的特徵值。這裡的c事實上就代表了乙個r^3空間的等距變換。加上如果d,e,f=0,那麼這題的答案就是a,b,c三數的倒數中的最小值再開方,這樣這題就轉化成求a的最大特徵值了。因為沒有直接求特徵值的模板,所以我推了下那個特徵方程,然後用高次方程求實根的模板寫了這題。

#include#include#include#include#include#includeusing namespace std;

const double eps=1e-12;

const double inf=1e+12;

inline int sign(double x)

inline double get(const vector&coef,double x)

return (lo+hi)*.5;

}vectorequation(vectorcoef,int n)

vectordcoef(n);

for(int i=0;idroot=equation(dcoef,n-1);

droot.insert(droot.begin(),-inf);

droot.push_back(inf);

for(int i=0;i+1tet;

tet.push_back(-a*b*c+e*e*b+f*f*c+d*d*a-2*d*e*f);

tet.push_back(a*b+b*c+c*a-e*e-f*f-d*d);

tet.push_back(-a-b-c);

tet.push_back(1.0);

vectorret=equation(tet,3);

double res=-1000;

for(int i=0;i

2023年西安邀請賽

這是我到大學來第一次去校外參加比賽,還是蠻興奮的。路上火車轉地鐵,地鐵轉大巴,暈暈暈。到了西北工業大學後,先領服裝 隊員牌,然後照相。在大廳裡,能看到很多人,穿著一樣的橙色的衣服,當時就感覺acm這條道路上是不缺同道人的,熱身賽以及正式賽的時候這種感覺更加強烈。領完東西後就回酒店了,午飯是在西工大食...

2023年ICPC ACM全國邀請賽 西安 總結

因為學校在西安,所以參加了很多次西安的比賽,但遺憾的是沒有在西安拿過一次牌。這次可能是最後一次參加西安的比賽了,幸運的是湊巧拿到了銅牌。也有不甘吧,可是又能怎麼樣呢,菜是原罪。可能參加完南昌後最要徹底退役了。也許和ec的獎牌無緣了吧。2019年5月27日 雖然參加過那麼多西安賽區,對西工大也很熟悉了...

SDUT 4259 (2023年西安邀請賽K題)

每年有兩種操作,一是詢問 l,r 內的土地這些年來的總產量,二是為 l,r 內的每一塊地的年產量加1。思路 假設x i 表示一塊土地第x i 年增加年產量,則若詢問年為y,總共更新了z次操作,那麼這些年來的總產量為 若將y看為第z 1次更新操作的話,將該式子展開化簡即為 那麼我們只需要用線段樹維護兩...