怎么设置全局变量
// 从样例去分析,然后发现是二分//贪心使其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();
}
} 你需要设置全局变量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]