lsmCC 发表于 2024-1-15 11:24:08

为什么编译错误

#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;
   
}


为什么会编译错误啊,没找到原因,修改一下代码

FishC 发表于 2024-1-15 11:25:06

这段代码存在两个明显的编译错误:

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]
查看完整版本: 为什么编译错误