当前位置: 首页 > news >正文

[CSP-S 2024] 超速检测

这题写了一份WA40的代码,然后崩溃了/ll

一下是40分代码。

#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
struct node{int d, v, a;
}inp[N];
int T, n, m, L, V, p[N];
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> T;while (T--){cin >> n >> m >> L >> V;for (int i = 1; i <= n; i++){cin >> inp[i].d >> inp[i].v >> inp[i].a;}for (int i = 1; i <= m; i++){cin >> p[i];}set<int> st;int ans = 0;for (int i = 1; i <= n; i++){if (inp[i].a > 0 || inp[i].a == 0){if (inp[i].d > p[m]){continue;}if (inp[i].a == 0){if (inp[i].v > V){ans++;st.insert(p[m]);}continue;}int x = p[m] - inp[i].d;double tmp = sqrt(2.0 * inp[i].a * x + 1.0 * inp[i].v * inp[i].v);if (tmp > V * 1.0){ans++;st.insert(p[m]);}continue;}auto it = lower_bound(p + 1, p + m + 1, inp[i].d);int pos = *it;int x = pos - inp[i].d;double tmp2 = 2.0 * inp[i].a * x + 1.0 * inp[i].v * inp[i].v;if (tmp2 <= 0){continue;}else{if (sqrt(tmp2) > V){ans++;st.insert(pos);}}}cout << ans << " " << m - st.size() << '\n';}
}

发现错误的朋友可以在评论区里指出来。

问题就在于,如果我有一辆车减速,而在经过多个测速点时都超速,从极限的思想来说,我们只保留第一个即可。貌似是对的,其实是错的。

如果是这样,那么如果存在另一辆车,也经过了这些测速点,但他是一辆加速的车,那么我们会保留最后一个。

实际上,我们只需要保留一个,但保留了两个,故这样是错的。

所以我们就要对于每一辆车有一个检测区间,问题转化为区间覆盖问题。

OK,上正解!

#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int n,m,L,V;
struct node{int x, y;bool operator <(const node &q) const{return (y == q.y ? x < q.x : y < q.y);}
};
vector<node> ve;
struct cs{int d, v, a;
}cr[N];
int dct[N];
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin >> t;while (t--){cin >> n >> m >> L >> V;for (int i = 1; i <= n; i++) cin >> cr[i].d >> cr[i].v >> cr[i].a;for (int i = 1; i <= m; i++) cin >> dct[i];for (int i = 1; i <= n; i++){int st = -1, ed = -1;if (cr[i].a == 0){if (cr[i].v > V){st = lower_bound(dct + 1, dct + 1 + m, cr[i].d) - dct;ed = m;}}else if (cr[i].a > 0){if (cr[i].v > V){st = lower_bound(dct + 1, dct + 1 + m, cr[i].d) - dct;ed = m;}else if (cr[i].v == V){st = upper_bound(dct + 1, dct + 1 + m, cr[i].d) - dct;ed = m;}else{int fz= V * V - cr[i].v * cr[i].v;int fm = 2 * cr[i].a;st = upper_bound(dct + 1, dct + 1 + m, cr[i].d + fz / fm) - dct;ed = m;}}else{if (cr[i].v > V){int fz = cr[i].v * cr[i].v - V * V;int fm = -2 * cr[i].a;st = lower_bound(dct + 1, dct + 1 + m, cr[i].d) - dct;if (fz % fm == 0){ed = lower_bound(dct + 1, dct + 1 + m, cr[i].d + fz / fm) - dct - 1;}else{ed = lower_bound(dct + 1, dct + 1 + m, cr[i].d + fz / fm + 1) - dct - 1;}}}if (st != -1 && st <= ed) ve.push_back((node){st,ed});}sort(ve.begin(), ve.end());int nr = -0x3f3f3f3f, nl = 0, ans=0;for (int i = 0; i < ve.size(); i++){nl = max(nl, ve[i].x);if (nl > nr) ans++, nr = ve[i].y, nl = ve[i].x;}cout << ve.size() << " " << m - ans << "\n";ve.clear();}return 0;
}

OK,考场上也要多思考!!!

http://www.dtcms.com/a/537318.html

相关文章:

  • 基于MT5的K线处理逻辑
  • 河南郑州网站建设哪家公司好免费wordpress主题下载地址
  • 低空经济网络安全的政策体系构建
  • 网页设计网站规划深圳设计网站公司哪家好
  • 【Etcd 】Etcd 详解以及安装教程
  • 文交所网站建设方案饰品企业网站建设
  • 郑州网站建设市场陕西省建设工程信息网官网
  • 中国电商网站排行榜绍兴百度推广优化排名
  • 网站 用php asp源码 比较好建设部执业考试网站
  • 宜家有做自己的网站吗眼镜厂官网
  • JAVA1027抽象类;抽象类继承
  • AD22更新网表时总是显示 net with name XXX In already exists
  • 推荐一个免费的IP地址库:纯真社区版IP库
  • 4.前缀和
  • 网站开发技术 北京国内网站建设排名
  • 南通网站建设兼职中国沈阳app在哪里下载
  • MinIo纯前端使用文件上传预览
  • 学习记录-package.json的scripts添加参数的方式有那些
  • 【前端】avue组件分页勾选
  • 个人网站主页设计模板台州建网站
  • 修改网站主目录的位置云闪付当前页面设计隐私
  • 计算机图形学:【Games101】学习笔记02——变换(二维与三维、模型、视图、投影)
  • 解码固相萃取仪:如何实现复杂样品前处理的高效与重现性
  • Easyx图形库应用(直接显存操作)
  • 网站翻书效果网站建设费用 会计分录
  • Langchain从零开始到应用落地案例[AI智能助手]【4】---优化ocr识别编写,实现按文件类型进行调用识别
  • 如何添加网站logo天津网站定制公司
  • 做网站需要规划哪些内容南宁网站seo大概多少钱
  • 第15天:网络基础与故障排除
  • confluence or 语雀 or sward,知识管理工具一文全方位对比