鱼C论坛

 找回密码
 立即注册
查看: 434|回复: 1

为什么编译错误

[复制链接]
发表于 2024-1-15 11:24:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[N];
bool check(ll mid)
{
    vector<pii>segs;
    for(int i=0;i<n;i++)
    {
        int l=a[i].first,s=a[i].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[0].first>1) return false;
    int dr =segs[0].second;
    for(int i=1;i<cnt;i++)
    {
        if(segs[i].first>dr+1)return false;
        dr=max(dr,segs[i].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[i]={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;
    
}
为什么会编译错误啊,没找到原因,修改一下代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i].first;
        int s = a[i].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[0].first > 1) 
        return false;
    int dr = segs[0].second;
    for (int i = 1; i < cnt; i++) {
        if (segs[i].first > dr + 1) 
            return false;
        dr = max(dr, segs[i].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[i] = {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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表