lsmCC 发表于 2023-11-15 20:02:45

怎么设置全局变量

// 从样例去分析,然后发现是二分
//贪心使其x1尽量能多匹配前面的数
#include <bits/stdc++.h>
using namespace std;

int n;
bool check(int mid)//区间覆盖
{
    int p;
    for(int j=0;j<3;j++)
    {
      p=upper_bound(a.begin(),a.end(),a+mid*2)-a.begin();
      if(p==n)return true;

    }
    return false;
}
void solve()
{
   cin>>n;
   vector<int>a(n);
    for(int i=0;i<n;i++)
    {
      cin>>a;
    }
    sort(a.begin(),a.end());
    int l=1,r=1e9;
    while(l<r)
    {
      int mid=l+r>>1;
      if(check(mid))r=mid-1;
      else l=mid;
    }
    cout<<r<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
      solve();
    }

}

isdkz 发表于 2023-11-15 20:03:00

你需要设置全局变量a,但是在你的代码中a是一个局部变量。你需要将a声明为全局变量,可以将它放在函数外部,例如在int n;的下面。

#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> a;// 将a声明为全局变量

bool check(int mid)
{
    int p;
    for(int j=0; j<3; j++)
    {
      p = upper_bound(a.begin(), a.end(), a+mid*2) - a.begin();
      if(p == n) return true;
    }
    return false;
}

void solve()
{
    cin >> n;
    a.resize(n);// 调整a的大小
    for(int i=0; i<n; i++)
    {
      cin >> a[ i];
    }
    sort(a.begin(), a.end());
    int l=1, r=1e9;
    while(l<r)
    {
      int mid = l+r >> 1;
      if(check(mid)) r = mid-1;
      else l = mid;
    }
    cout << r << endl;
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
      solve();
    }
}
页: [1]
查看完整版本: 怎么设置全局变量