求题解!!

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,i,j,a[100],x;
    while(cin>>n&&n!=0)
    {
            for(i=0;i<n;i++)
            cin>>a[i];
            cin>>x;
        sort(a,a+n);
        for(i=0;i<n;i++)
        {
            if(a[i]<0)
                a[i]=a[i]+x;
            else
                a[i]=a[i]-x;
        }
        sort(a,a+n);
        cout<<a[n-1]-a[0]<<endl;
    }
    return 0;
}

全部评论
向左向右移动可以看做是选择一些点向右移2x. 假设让ai右移, 那么显然a1...ai-1也要右移会更优. 枚举这个右移位置, 取最小值.
2 回复 分享
发布于 2019-05-17 20:42
当a[i]=0的时候,需要根据实际数据加或者减。用贪心算***更好一些
点赞 回复 分享
发布于 2019-07-13 08:53
#include <iostream> #include <cstdio> #include <algorithm> #include <set> using namespace std; const int N = 1e6+10; int n, x, a[N]; int main() {     scanf("%d", &n);     for (int i=1; i<=n; ++i) scanf("%d",a+i);     sort(a+1,a+1+n);     scanf("%d", &x);     multiset<int> s;     for (int i=1; i<=n; ++i) s.insert(a[i]);     int ans = a[n]-a[1];     for (int i=1; i<n; ++i) {         s.erase(s.find(a[i]));         s.insert(a[i]+2*x);         an***in(ans, *(--s.end())-****egin());     }     printf("%d\n", ans); }
点赞 回复 分享
发布于 2019-05-19 18:20

相关推荐

不愿透露姓名的神秘牛友
06-12 18:53
点赞 评论 收藏
分享
喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务