本文主要是介绍2011成都网赛 / 1006 - Rolling Hongshu,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
比赛的时候,队友很蛋疼地把终点直接当成 (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; //速度最小0for(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); //最小v2for(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));}
}
这篇关于2011成都网赛 / 1006 - Rolling Hongshu的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!