您的位置:首页 > 其它

题目五 喷水装置(二)

2017-06-25 11:50 176 查看
#include<cstdio>

#include<cmath>

#include<algorithm>

using namespace std;

struct Equipment{

int x;

int r;

};

bool cmp(Equipment a, Equipment b){

return a.x < b.x;

}

Equipment e[10005];

int main(){

int t;

scanf("%d", &t);

while (t--){

int n, w, h, i;

scanf("%d%d%d", &n, &w, &h);

for (i = 0; i < n; i++)

scanf("%d%d", &e[i].x, &e[i].r);

sort(e, e + n, cmp);

int x = 0; //记录当前横坐标

int ans = 0;

int m = 0; //记录当前的喷水装置

double temp = w;

while (temp > 0){

int flag = 0;

for (i = m; i < n; i++){

if ((e[i].x - x)*(e[i].x - x) + h / 2 * h / 2 <= e[i].r * e[i].r){

flag = 1;

if (e[i].x + e[i].r >= e[m].x + e[m].r)

m = i;

}

}

if (flag == 1){

temp -= e[m].x - x + sqrt(e[m].r * e[m].r - h / 2.0 * h / 2.0);

x = e[m].x;

ans++;

m++;

}

else break;

}

if (temp > 0)

ans = 0;

printf("%d\n",ans);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: