2021四川省赛J

阅读: 评论:0

2021四川省赛J

2021四川省赛J

2023大厂真题提交网址(含题解):

www.CodeFun2000(101.43.147.120/)

最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练习,体会真题难度。现在OJ已录入50+道2023年最新大厂真题,同时在不断的更新。同时,可以关注"塔子哥学算法"公众号获得每道题的题解。

题目大意:

一维数轴 [ 1 , 1 e 9 ] [1,1e9] [1,1e9]上有 n n n个蚂蚁,每个蚂蚁有一个初始方向(左右).然后开始以1的速度运动.两蚂蚁碰撞后反向.在数轴两端有两个石头,每个石头分别有 a , b a,b a,b的耐性(指被撞多少次后碎掉).蚂蚁撞上石头后也反向。问所有蚂蚁全部掉落的时间.
n ≤ 1 e 5 , a , b ≤ 1 e 9 n leq 1e5 , a , b leq 1e9 n≤1e5,a,b≤1e9.

题目思路:

1.每隔 2 L 2L 2L,每个蚂蚁会回到自己的原位置且方向不变.所以我们可以直接模拟最后一轮的情况.
2.碰撞看作穿过.
3.最后一轮,使用两个队列表示往左/右的蚂蚁。每次选取时间小的队头,拿出来塞到另一个队列里即可.
4.用优先队列模拟该过程代码更简洁. 复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define vll vector<ll>
#define fi first
#define se second
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const ll len = 1e9;
const ll inf = 9e18;
ll a[maxn] , d[maxn];
priority_queue<ll , vector<ll> , greater<ll>> ql , qr;
int main()
{ios::sync_with_stdio(false);int n , x , y; cin >> n >> x >> y;for (int i = 1 ; i <= n ; i++){cin >> a[i];}for (int i = 1 ; i <= n ; i++){cin >> d[i];}ll ti = min(x , y) / n * (len * 2 + 2);ll g = min(x , y) / n * n;x -= g;y -= g;for (int i = 1 ; i <= n ; i++){if (d[i]) qr.push(ti + len - a[i] + 1);else ql.push(ti + a[i]);}ll res = ti;while (ql.size() || qr.size()){ll g;if (ql.size()){g = ql.top();res = max(res , g);ql.pop();if (x){qr.push(g + len + 1);x--;}}if (qr.size()){g = qr.top();res = max(res , g);qr.pop();if (y){ql.push(g + len + 1);y--;}}}cout << res << endl;return 0;
}

本文发布于:2024-01-27 19:47:56,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063560732272.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23