比赛的时候,队友很蛋疼地把终点直接当成 (0,0),导致wa啊wa啊wa啊~~~
刚才我写了下,开始竟然也一直wa~~~= =、
由于开始的时候以为会乘法溢出什么的用了long long..
然后又沙比般地用了%lld读数据....(靠,一开始就都用double多好...)
我竟然沙比般地忘记了蛋疼的hdoj不支持%lld..........
然后沙比般的debug了n久......
还好比赛的时候我告诉队友的是%I64,不然要是wa在这里会更蛋疼吧..............总之蛋疼..
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; #define int64 long long #define MAXN 1010 #define MAXM 1010 #define INF 1<<30 #define g 20 int64 n, m, w; //n 个山 struct high { int64 x, y; }mn[MAXN]; struct potato { int64 x, v, m; }po[MAXM]; double getY(int k) //第k个球 { double y; for(int i=0; i<n-1; i++) if(mn[i].x<=po[k].x && mn[i+1].x>=po[k].x) { return (double)(po[k].x-mn[i].x)*(mn[i+1].y-mn[i].y)/(mn[i+1].x-mn[i].x)+mn[i].y; } } double solve() { double maxv2=0; //速度最小0 for(int i=0; i<m; i++) { double y = getY(i); double v = po[i].v; double tv2 = v*v-2*g*(mn[0].y-y); maxv2 = max(maxv2, tv2); } return maxv2; } int main() { int t; scanf("%d", &t); for(int T=0; T<t; T++) { printf("Case %d: ", T+1); scanf("%I64d%I64d%I64d", &n, &m, &w); int64 maxx=-INF; for(int i=0; i<n; i++) { scanf("%I64d%I64d", &mn[i].x, &mn[i].y); maxx = max(mn[i].y, maxx); } double minv2 = maxx<=mn[0].y? 0: 2*g*(maxx-mn[0].y); //最小v2 for(int i=0; i<m; i++) { scanf("%I64d%I64d%I64d", &po[i].x, &po[i].v, &po[i].m); } minv2 = max(solve(), minv2); printf("%.2lf\n", sqrt((double)minv2)); } }