2020杭電多校第7場 1007 Game

2022-06-23 01:15:21 字數 1785 閱讀 6342

原題鏈結

題意:

有乙個二維平面,上面有n個點,在第乙個點上有一顆石頭。現在有兩個人做遊戲,他們輪流移動石頭,

第一次移動的時候可以將石頭移動到平面上的其他任何的點上。之後的每次移動,可以將石頭移動到比上次移動距離更遠的點上。

當輪到某人時,他無法再移動石頭,則判他為輸。

做法:

我們先考慮第一步:當前是第乙個點,如果說第乙個點和其他的某個點是平面中最長距離的點對,則先手必勝。

同樣:也就是說,如果當前點在目前平面上和其他某個點能組成為最長點對的話,當前這個人必勝。

那麼我們可以反著處理一下,在計算所有點對之間的距離後,按照距離從大到小排序之後遍歷所有點對,如果我們在遍歷點對的途中,

發現點1已經被遍歷過了並且剩下的點的個數大於1,則先手必勝,否則必敗。

#include #define debug

#define d1(x) std::cout << #x " = " << (x) << std::endl

#define d2(x, y) std::cout << #x " = " << (x) << " ," #y " = " << (y) << std::endl

#define disp(arry, fr, to) \

#define ed end()

#define bg begin()

#define mkp make_pair

#define pb push_back

#define v(t) vector#define all(x) x.bg,x.ed

#define newline puts("")

#define si(x) ((int)x.size())

#define rep(i,n) for(int i=1;i<=n;++i)

#define rrep(i,n) for(int i=0;ipii;

const int maxn = 5e6+10;

const int inf = 0x7f7f7f7f;

const ll inf_ll = 1ll*inf*inf;

const int mod = 1e9+7;

const double eps = 1e-7;

int n;

double a[2010],b[2010];

struct nodee[maxn];

double cdis(double x1,double y1,double x2,double y2)

bool cmp(node a,node b)

bool vis[maxn];

int main()

int cnt=0;

rep(i,n)

}sort(e+1,e+cnt+1,cmp);

// rep(i,cnt)

int flag=0;

int sum = n;

rep(i,cnt)

g.push_back(u),g.push_back(v),j++;

}i=j-1;

for (auto v : g)

if(vis[1] == 1 && sum > 1) flag=1;

sum-=g.size();

}if(flag) break;

}// d1(flag);

if(flag) puts("yes");

else puts("no");

}return 0;

}

點選展開**塊

杭電多校2020第7場 E Expectation

有一種做法 列舉每個球滾到哪個坑里,算出其概率,再乘上球到這個坑的距離,把結果相加。但是你會發現,這樣子很難處理,而且有許許多多複雜的情況。我們換乙個角度 對於每乙個 i 和 i 1 之間的線段,我們算其被經過的期望次數。手玩一會兒不難發現有如下結論 對於一條線段,如果其左邊為洞,右邊為球,那麼肯定...

2020杭電多校第5場

1001 tetrahedron 直角三稜錐有乙個性質 底面面積的平方等於三個側面面積的平方和。然後根據體積可以算出來h,1 h2 a2b 2 a2 c2 b 2c2a 2b2c 2 frac frac h21 a 2b2c 2a2b 2 a2 c2 b 2c2 這樣在o n 的時間是沒法算期望的,...

2020 杭電多校第6場

1009 divisibility 題意 十進位制下判斷乙個數n能否被3整除的方法是 判斷n的各位數的和能否被3整除,現給你乙個b和x,判斷再b進製下能否用這種方法判斷所有數能否整除x。打表可以找規律。include using namespace std typedef long long ll ...