sgu158

来源:互联网 发布:百度免费域名 编辑:程序博客网 时间:2024/06/05 15:57

枚举+二分

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;inline int read(){    int x = 0, f = 1, t = getchar();    while(t < 48 || t > 57) t == 45 ? f = -1 : 0, t = getchar();    while(t >= 48 && t <= 57) x = (x<<1) + (x<<3) + t - 48, t = getchar();    return x * f;}const int maxm = 305, maxn = 305, maxl = 5005;int l, m, n, ans, ansd;int p[maxm], d[maxn];bool better(int pos){    int res = 0;    for(int i = 1; i <= m; ++i)    {        int pp = p[i] - pos;        int j = lower_bound(d + 1, d + n + 1, pp) - d;        if(j >= 2) res += min(abs(pp - d[j-1]), abs(pp - d[j]));        else res += abs(pp - d[j]);    }    ansd = max(ansd, res);    return ansd == res;}void write(int x, int ch = 10){    printf("%d", x >> 1);    if(x & 1) printf(".5");    putchar(ch);}int main(){#ifndef ONLINE_JUDGE    freopen("input.txt", "r", stdin);    freopen("output.txt", "w", stdout);#endif    l = read() << 1, m = read();    for(int i = 1; i <= m; ++i) p[i] = read() << 1;    n = read();    for(int i = 2; i <= n; ++i) d[i] = read() << 1;    for(int i = l - d[n]; i >= 0; --i)        if(better(i)) ans = i;    write(ans, ' '), write(ansd);#ifndef ONLINE_JUDGE    fclose(stdin), fclose(stdout);#endif    return 0;}
0 0
原创粉丝点击