poj1328Radar Installation--贪心

来源:互联网 发布:淘宝免费促销模板 编辑:程序博客网 时间:2024/06/09 23:45

代码如下:

#include <cstdio>#include <iostream>#include <cstring>#include <cctype>#include <cmath>#include <algorithm>#include <queue>#include <stack>#include <set>#include <map>#include <cstdlib>#include <vector>#define ll long long#define maxn 1010using namespace std;double x[maxn], y[maxn];int main(){    int n, d, a, b, w = 1;    while ( ~scanf( "%d%d", &n, &d) && ( d || n)){            bool fg = false;        for ( int i = 0; i < n; i++){            scanf( "%d%d", &a, &b);            if ( b > d || b < 0)                fg = true;            if ( !fg){                x[i] = a - sqrt( 1.0 * d * d - b * b);                y[i] = a + sqrt( 1.0 * d * d - b * b);            }        }        printf( "Case %d: ", w++);        if ( fg){            printf( "-1\n");        }        else{            for ( int i = 0; i < n - 1; i++){                int k = i;                for ( int j = i + 1; j < n; j++){                    if ( y[k] - y[j] > 1e-8){                        k = j;                    }                    else if ( fabs( y[j] - y[k]) < 1e-8 && x[j] - x[k] > 1e-8){                        k = j;                    }                }                if ( k != i){                    swap( x[i], x[k]);                    swap( y[i], y[k]);                }            }            double z = y[0];            int c = 1;            for ( int i = 1; i < n; i++){                if ( x[i] - z > 1e-8){                    z = y[i];                    c++;                }            }            printf( "%d\n", c);        }    }    return 0;}


0 0
原创粉丝点击