为什么编译错误
#include<bits/stdc++.h>using namespace std;
typedef long long ll;
typedef pair<int,int>pii;
const int N=1e5+10;
// 考察二分跟区间合并
int n,len;
pii a;
bool check(ll mid)
{
vector<pii>segs;
for(int i=0;i<n;i++)
{
int l=a.first,s=a.second;
if(s>mid) continue; // 如果当前时刻大于找到的时刻就要跳过
// 计算每个水闸能检测的范围
int left=max(1ll,l-mid+s),right=min((ll)len,l+mid-s);
segs.push_back({left,right});
}
int cnt =segs.size();
sort(segs.begin(),segs.end()); // 按照左端点从小到大排序
if(segs.empty()) return false;
if(segs.first>1) return false;
int dr =segs.second;
for(int i=1;i<cnt;i++)
{
if(segs.first>dr+1)return false;
dr=max(dr,segs.second,dr);
}
return dr==len;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>len;
for(int i=0;i<n;i++)
{
int l,s;
cin>>l>>s;
a={l,s};
}
ll l=0,r=2e9;
while(l+1<r)// 二分找答案
{
ll mid =l+r>>1;// 可能会报int,应该用long long
if(check(mid)) r=mid;
else l=mid;
}
cout<<l<<endl;
}
为什么会编译错误啊,没找到原因,修改一下代码 这段代码存在两个明显的编译错误:
1. `#include` 行缺少一个头文件名称。你需要使用 `#include <vector>` 来包含 `<vector>` 头文件。
2. `typedef pairpii;` 这行存在语法错误。正确的写法应该是 `typedef pair<int, int> pii;` 来定义一个名为 `pii` 的 `pair<int, int>` 类型别名。
此外,代码中也存在一些逻辑问题,下面是修改后的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 10;
int n, len;
bool check(ll mid, vector<pii>& a) {
vector<pii> segs;
for (int i = 0; i < n; i++) {
int l = a.first;
int s = a.second;
if (mid > l)
continue;
int left = max(1ll, l - mid + s);
int right = min((ll)len, l + mid - s);
segs.push_back({left, right});
}
int cnt = segs.size();
sort(segs.begin(), segs.end());
if (segs.empty())
return false;
if (segs.first > 1)
return false;
int dr = segs.second;
for (int i = 1; i < cnt; i++) {
if (segs.first > dr + 1)
return false;
dr = max(dr, segs.second);
}
return dr == len;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> len;
vector<pii> a(n);
for (int i = 0; i < n; i++) {
int l, s;
cin >> l >> s;
a = {l, s};
}
ll l = 0, r = 2e9;
while (l + 1 < r) {// 注意这里的条件判断
ll mid = (l + r) / 2;
if (check(mid, a))
r = mid;
else
l = mid;
}
cout << r << endl;
return 0;
}
希望对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]