鱼C论坛

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

为什么编译错误

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

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

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

x
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int>pii;
  5. const int N=1e5+10;
  6. // 考察二分跟区间合并
  7. int n,len;
  8. pii a[N];
  9. bool check(ll mid)
  10. {
  11.     vector<pii>segs;
  12.     for(int i=0;i<n;i++)
  13.     {
  14.         int l=a[i].first,s=a[i].second;
  15.         if(s>mid) continue; // 如果当前时刻大于找到的时刻就要跳过
  16.         // 计算每个水闸能检测的范围
  17.         int left=max(1ll,l-mid+s),right=min((ll)len,l+mid-s);
  18.         segs.push_back({left,right});

  19.     }
  20.     int cnt =segs.size();
  21.     sort(segs.begin(),segs.end());    // 按照左端点从小到大排序
  22.     if(segs.empty()) return false;
  23.     if(segs[0].first>1) return false;
  24.     int dr =segs[0].second;
  25.     for(int i=1;i<cnt;i++)
  26.     {
  27.         if(segs[i].first>dr+1)return false;
  28.         dr=max(dr,segs[i].second,dr);
  29.     }
  30.     return dr==len;

  31. }

  32. signed main()
  33. {
  34.     ios::sync_with_stdio(0);
  35.     cin.tie(0);
  36.     cout.tie(0);
  37.     cin>>n>>len;
  38.     for(int i=0;i<n;i++)
  39.     {
  40.         int l,s;
  41.         cin>>l>>s;
  42.         a[i]={l,s};
  43.         
  44.     }
  45.     ll l=0,r=2e9;
  46.     while(l+1<r)  // 二分找答案
  47.     {
  48.         ll mid =l+r>>1;  // 可能会报int,应该用long long
  49.         if(check(mid)) r=mid;
  50.         else l=mid;


  51.     }
  52.     cout<<l<<endl;
  53.    
  54. }

复制代码

为什么会编译错误啊,没找到原因,修改一下代码
想知道小甲鱼最近在做啥?请访问 -> 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>` 类型别名。

此外,代码中也存在一些逻辑问题,下面是修改后的代码:

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. typedef pair<int, int> pii;
  7. const int N = 1e5 + 10;

  8. int n, len;

  9. bool check(ll mid, vector<pii>& a) {
  10.     vector<pii> segs;
  11.     for (int i = 0; i < n; i++) {
  12.         int l = a[i].first;
  13.         int s = a[i].second;
  14.         if (mid > l)
  15.             continue;
  16.         int left = max(1ll, l - mid + s);
  17.         int right = min((ll)len, l + mid - s);
  18.         segs.push_back({left, right});
  19.     }
  20.     int cnt = segs.size();
  21.     sort(segs.begin(), segs.end());
  22.     if (segs.empty())
  23.         return false;
  24.     if (segs[0].first > 1)
  25.         return false;
  26.     int dr = segs[0].second;
  27.     for (int i = 1; i < cnt; i++) {
  28.         if (segs[i].first > dr + 1)
  29.             return false;
  30.         dr = max(dr, segs[i].second);
  31.     }
  32.     return dr == len;
  33. }

  34. int main() {
  35.     ios::sync_with_stdio(0);
  36.     cin.tie(0);
  37.     cout.tie(0);
  38.     cin >> n >> len;
  39.     vector<pii> a(n);
  40.     for (int i = 0; i < n; i++) {
  41.         int l, s;
  42.         cin >> l >> s;
  43.         a[i] = {l, s};
  44.     }
  45.     ll l = 0, r = 2e9;
  46.     while (l + 1 < r) {  // 注意这里的条件判断
  47.         ll mid = (l + r) / 2;
  48.         if (check(mid, a))
  49.             r = mid;
  50.         else
  51.             l = mid;
  52.     }
  53.     cout << r << endl;

  54.     return 0;
  55. }
复制代码


希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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