题目(洛谷)
这题瞎jb乱搞。
比如像qt 巨佬那样,连边弄拓扑序的(不过最后一个点WA了233),
比如像我蒟蒻那样,排序后直接dfs的,
还有就是zhw的正解了,搞并查集。
然后这题就真的可以乱做了......
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <climits> #define ll long long #define llmax LONG_LONG_MAX #define llmin LONG_LONG_MIN #define readf(f) scanf( #define putY puts("Yes") #define putN puts("No") #define eps 1e-18 using namespace std; inline void init() { freopen("cheese.in","r",stdin); freopen("cheese.out","w",stdout); } template <class _E> inline void read(_E &e) { e=0;bool ck=0;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')ck=1;ch=getchar();} while(ch>='0'&&ch<='9'){e=e*10+ch-'0';ch=getchar();} if(ck)e=-e; } struct holes{ double x,y,z; int cnt; }a[1005]; int n; double h,r; bool can; inline bool cmp(const holes &x,const holes &y) { if (x.cnt==y.cnt) return x.z<y.z; else return x.cnt<y.cnt; } inline double dist(holes xx,holes yy) { return sqrt((xx.x-yy.x)*(xx.x-yy.x)+(xx.y-yy.y)*(xx.y-yy.y)+(xx.z-yy.z)*(xx.z-yy.z)); } void dfs(int step) { if (can) return; if ((h-a[step].z)-r<=eps) { can=true; return; } int tmp=a[step].cnt+1; for (int i=step+1;i<=n;++i) { if (a[i].cnt>tmp) break; if (dist(a[step],a[i])-2*r>eps) continue; dfs(i); } } int main() { // init(); int T; read(T); while (T--) { memset(a,0,sizeof a); read(n),readf(h),readf(r); for (int i=1;i<=n;++i) { readf(a[i].x),readf(a[i].y),readf(a[i].z); a[i].cnt=(a[i].z+r)/(2*r); } sort(a+1,a+n+1,cmp); can=false; int p=0; for (int i=1;i<=n;++i) { if (a[i].z<=r) dfs(i); else break; if (can) break; } if (can) putY; else putN; } return 0; }
然后来吐槽下CCF的老爷机 吧......
比如我这个代码,在洛谷上面是可以A的......
在各种民间数据那都是可以A的......
就你CCF的老爷机给我来个TLE让我措手不及......
Comments NOTHING