比赛一开始,首先看题,第一题,是一道数论的题,想了几下,发现没有水到我能作的地步,跳过;而后是第二题,之前应该见过,可是没有作出来,想了几分钟,没有结果,以后Hogg大牛说是作过的一道DP。。。。。。DP无感,跳过;而后第三题,我比较熟悉的计算几何,想一想是比较水的,并且几个计算公式也有(居然最后杯具了。。。),还提醒一下Hogg大牛作完第二题能够去看看这题。。。。。。而后想着先看完全部题目再以为作题顺序,最后一题看了一下,想一想也许能够试着暴力(在后面Hogg大牛成功暴力出结果),而后就开始了杯具的第三题,先从模板开始找,找到了几个公式,发现居然很短,瞬间暗爽了一下,而后快速开敲,谁知运行以后发现居然错了。。。。而后开始找错(模板没有用过,也有点担忧),而后一直找啊找啊找啊找,最后一次次检查模板,而后把整个模板的过程都本身证实了一遍,角度弧度的转化也想了几遍,仍是没有找出结果,就这样一直耗着时间,必定要死磕出来(由于过程仍是比较随意的,不须要模拟省赛的过程),而后一直调试,全部结果都被输出了,并且因为给出的样例涉及到了三维的球体,本身手算仍是很难的,因此过了好久不得已才手算了样例,但是依旧于事无补。。。知道最后也没有找出bug,看了别人代码才发现是角度转弧度出了错,漏了个PI,我还从不一样的角度想了想我有没有转化错误。。。。。坑啊,真有揍死本身的想法。。。。两天后改了成功AC。。。。。。编程
总结:网站
果真没有用过的模板仍是会有点危险,以后的比赛要慎重选择是否真的要用不熟悉的模板;spa
计算几何真的比较多细节,并且彷佛几回作的都是几何+图论相结合(不知道省赛是否是也会如此),真的须要找多我的结队编程,帮我找错才行,否则到时候怕会栽在这上面;设计
看来我是须要一个好的状态才能A出题,因此慎重选择主攻的题目,并且在卡题的时候应该作到什么程度适宜,真的要好好研究一番。调试
附上1003代码,谨记教训:code
1 /* 2 题解:球面的两点距离+最小生成树 3 */ 4 #include <cstdio> 5 #include <cmath> 6 #include <cstring> 7 8 #define VERMAX 105 9 #define MAXDOU 30000000.0 10 const double pi= 3.14159265358979323846; 11 12 using namespace std; 13 14 struct point 15 { 16 double x,y,z; 17 }s[105]; 18 19 int n; 20 21 double gra[105][105]; 22 23 double prim(int n) 24 { 25 bool vis[VERMAX]; 26 double low[VERMAX]; // 一直记录着已访问点集中到i点的最小距离 27 int pos = 0; // 随意选取开始的结点位置 28 memset(vis,false,sizeof(vis)); 29 vis[pos] = true; 30 31 double ret = 0; 32 for(int i=0; i<n; i++) // 初始化 33 low[i] = gra[pos][i]; 34 for(int i=1; i<n; i++) // n-1次求解出剩余的n-1个结点 35 { 36 double min = MAXDOU; 37 for(int j=0; j<n; j++) // 该点集从1开始,共有n个点 38 { 39 if (!vis[j] && low[j] < min) 40 { 41 min = low[j]; 42 pos = j; 43 } 44 } 45 ret += min; 46 vis[pos] = true; 47 for(int j=0; j<n; j++) 48 if (!vis[j] && low[j] > gra[pos][j]) 49 low[j] = gra[pos][j]; 50 } 51 return ret; 52 } 53 54 int main(void) 55 { 56 int t; 57 scanf("%d",&t); 58 while (t--) 59 { 60 double R,l; 61 scanf("%lf%lf%d",&R,&l,&n); 62 R /= 2.0; 63 for(int i=0; i<n; i++) 64 { 65 double lambda,phi; 66 scanf("%lf%lf",&phi,&lambda); 67 phi = phi * pi / 180.0; 68 lambda = lambda * pi / 180.0; 69 s[i].x = cos(phi)*cos(lambda); 70 s[i].y=cos(phi)*sin(lambda); 71 s[i].z=sin(phi); 72 } 73 74 for(int i=0; i<n; i++) 75 for(int j=0; j<n; j++) 76 gra[i][j] = MAXDOU; 77 78 for(int i=0; i<n; i++) 79 for(int j=i+1; j<n; j++) 80 { 81 double A = acos(s[i].x * s[j].x + s[i].y * s[j].y + s[i].z * s[j].z); 82 gra[i][j] = A*R; 83 gra[j][i] = A*R; 84 } 85 double c = prim(n); 86 if (c <= l) 87 printf("Y\n"); 88 else 89 printf("N\n"); 90 } 91 return 0; 92 }