E - Endgame
随机算法+套路思维
第一次遇到随机算法
也不能说没有像那个方向去想
因为我们有n个移动方案
然后组合一共有个所以,对于一个点大概室友的概率被抓到
然后我们就可以靠这个随机枚举个点,然后判断是否可以抓到
就好了。。。。。
#include<iostream> #include<algorithm> #include<vector> #include<ctime> using namespace std; const int max_n = 1e5+100; typedef pair<int,int> pii; pii G[max_n]; int n; bool check(int x0,int y0,int x1,int y1) { for (int i=1;i<=n;++i) { int x = x0+G[i].first; int y = y0+G[i].second; if (x<=0||x>n||y<=0||y>n)continue; if ((x==x1&&y==y1)||binary_search(G+1,G+1+n,pii(x1-x,y1-y))) return true; } return false; } int main() { ios::sync_with_stdio(0); cin>>n; int x0,y0,x1,y1; cin>>x0>>y0>>x1>>y1; for (int i=1;i<=n;++i)cin>>G[i].first>>G[i].second; sort(G+1,G+1+n); if (check(x0,y0,x1,y1)) { cout<<"Alice wins"<<endl; return 0; } srand(time(NULL)); int t = 30; while (t--) { int x = rand()%n+1; int y = rand()%n+1; if (x==x1&&y==y1) { ++t; continue; } if (!check(x1,y1,x,y)) { cout<<"tie "<<x<<" "<<y<<endl; return 0; } } cout<<"Bob wins"<<endl; }