AcWing——第55场周赛
AcWing——第55场周赛
竞赛 - AcWing
4479. 最长子序列 - AcWing题库
给定一个长度为 n 的序列 a1,a2,…,an 和一个长度为 m 的序列 b1,b2,…,bm。
现在,我们希望找到一个序列 a 的子序列,使得该子序列满足:
子序列中的每一个元素都在序列 b 中出现过。
子序列的长度应尽可能长。
请你输出满足条件的最长子序列。
输入格式
第一行包含两个整数 n,m。
第二行包含 n 个整数 a1,a2,…,an。
第三行包含 m 个整数 b1,b2,…,bm。
输出格式
在一行中输出满足条件的最长子序列。
如果满足条件的最长子序列为空,则不输出任何内容或输出单个换行符均可。
数据范围
所有测试点满足 1≤n,m≤10,0≤ai,bi≤9。
输入样例1:
7 3
3 5 7 1 6 2 8
1 2 7
输出样例1:
7 1 2
问题解析
题目要求输出的是“序列”,直接遍历一遍a数组,如果a[i]在b[i]出现过了那就把这个元素输出即可。
AC代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;signed main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n, m;cin >> n >> m;vector<int>a(n), b(m);unordered_map<int, int>mymap;for (int i = 0; i < n; i++)cin >> a[i];for (int i = 0; i < m; i++){cin >> b[i];mymap[b[i]] = 1;}for (int i = 0; i < n; i++){if (mymap[a[i]])cout << a[i] << " ";}return 0;
}
4480. 倒垃圾 - AcWing题库
街道上住着 n 个居民并设有 m 个垃圾桶,每个居民的住所或垃圾桶占据一个位置。
如果这样的垃圾桶不唯一,则居民会优先选择前往位置坐标更小的垃圾桶处倒垃圾。
请你计算,对于每个垃圾桶,每天有多少居民在该垃圾桶处倒垃圾。
输入格式
第一行包含两个整数 n,m。
第二行包含 n+m 个整数 x1,x2,…,xn+m,表示所有居民住所以及垃圾桶的位置坐标。
第三行包含 n+m 个整数 t1,t2,…,tn+m,如果 ti=1,则表示第 i 个位置坐标处是垃圾桶,如果 ti=0,则表示第 i 个位置坐标处是居民住所。
输入保证,满足 ti=1 的 i 的数量为 m。
输出格式
不妨按照位置坐标从小到大的顺序,将 m 个垃圾桶编号 1∼m。
请你在一行中输出 m 个整数 a1,a2,…,am,其中 ai 表示每天在第 i 个垃圾桶处倒垃圾的居民数量。
数据范围
前三个测试点满足 1≤n,m≤5。
所有测试点满足 1≤n,m≤105,1≤x1<x2<…<xn+m≤109,0≤ti≤1。
输入样例1:
3 1
1 2 3 10
0 0 1 0
输出样例1:
3
输入样例2:
1 4
2 4 6 10 15
1 1 1 1 0
输出样例2:
0 0 0 1
问题解析
滑动窗口做法。
先把所有的垃圾桶存入一个数组ans里,如果只有一个垃圾桶,直接输出n的值即可,因为所有的垃圾都只能扔到那里。
我们用双指针l、r来指向垃圾桶的位置,遍历所有的住户,如果当前住户的位置在我们双指针指向的位置之间,那我们就通过计算判断这个住户是去l扔好还是r好(如果相等,也是去l扔),并记录下来,当住户的位置大于我们的r指针,那就把窗口右移(l指向原来的r,r往下走一位,如果r就是最后一个垃圾桶了,就只移动左指针),因为住户位置如果大于r了,那么相对于到l的距离,住户肯定是到r的距离更小。最后输出所有记录的数量即可。
AC代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;signed main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n, m;cin >> n >> m;vector<int>a(n + m), b(m + n), ans;unordered_map<int, int>mymap,cnt;if (m == 1){cout << n << endl;return 0;}for (int i = 0; i < n+m; i++)cin >> a[i];for (int i = 0; i < n+m; i++){cin >> b[i];if (b[i] == 1)ans.push_back(a[i]), mymap[a[i]] = 1;}int l = 0, r = 1;for (int i = 0; i < n+m; i++){if (a[i] > ans[r]){l = r;if (r + 1 < m)r++;}if (mymap[a[i]] == 0){if (abs(a[i] - ans[l]) <= abs(a[i] - ans[r])){cnt[ans[l]]++;}else{cnt[ans[r]]++;}}}for (int i = 0; i < m; i++)cout << cnt[ans[i]] << " ";return 0;
}
4481. 方格探索 - AcWing题库
给定一个 n 行 m 列的方格矩阵。行坐标从上到下为 1∼n,列坐标从左到右为 1∼m。
其中的每个方格,要么是空格(用 . 表示),要么包含障碍物(用 * 表示)。
输入格式
第一行包含两个整数 n,m。
第二行包含两个整数 r,c。
第三行包含两个整数 x,y。
接下来 n 行,每行包含一个长度为 m 的由 . 和 * 组成的字符串,用来描述方格矩阵。
输入保证第 r 行第 c 列的方格一定是空格。
输出格式
一个整数,表示可达空格数量。
数据范围
前三个测试点满足 1≤n,m≤5。
所有测试点满足 1≤n,m≤2000,1≤r≤n,1≤c≤m,0≤x,y≤10^9。
输入样例:
4 5
3 2
1 2
.....
.***.
...**
*....
输出样例:
10
问题解析
走迷宫问题,只是这里还要记录你当前向左或向右走了多少步。
队列要自己做个自定义数据类型,要能存下四个变量:{横坐标,纵坐标,已经向左走的次数,已经向右走的次数},然后就是标准的走迷宫,只是每次向左走和向右走的时候对应的变量要+1,如果次数大于了限制次数,那就走不到这一格。
走到一格后我们要打两个标记,一个是判断这个格子之前有没有走过,如果没有就打上标记,并且计数器++;另一个是记录走到这个格子时已经向左或向右走了几次,如果想要走到更远的地方,那么肯定是向左向右走的次数少才行,如果后面再次到达这个格子,向左向右走的次数大于我们之前记录过的就跳过,如果小于就更换标记,并且把这个点入队。
AC代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;
PII cnt[2050][2050];
int mymap[2050][2050];
int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };signed main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n, m, x, y, a, b, res = 1;cin >> n >> m >> x >> y >> a >> b;vector<string>v(n);for (int i = 0; i < n; i++)cin >> v[i];queue<pair<pair<int, int>, pair<int, int>>>que;que.push({ {x - 1,y - 1} ,{0,0} });mymap[x - 1][y - 1] = 1;while (!que.empty()){int len = que.size();for (int i = 0; i < len; i++){pair<pair<int, int>, pair<int, int>> t = que.front();que.pop();int l = t.second.first, r = t.second.second;for (int j = 0; j < 4; j++){int c = l + (j == 3), d = r + (j == 1);if (c > a || d > b)continue;int x1 = t.first.first + dx[j], y1 = t.first.second + dy[j];if (x1 >= 0 && x1 < n && y1 >= 0 && y1 < m && v[x1][y1] == '.'){if (mymap[x1][y1] && cnt[x1][y1].first <= c && cnt[x1][y1].second <= d)continue;if (mymap[x1][y1] == 0){mymap[x1][y1] = 1;res++;}cnt[x1][y1] = { c,d };que.push({ {x1,y1},{c,d} });}}}}cout << res << endl;return 0;
}
AcWing——第55场周赛相关推荐
- Acwing第72场周赛+Leetcode第314场周赛
Acwing第72场周赛 第一题:AcWing 4624. 最小值 分析:向下取整可以用到math.h头文件中的floor()函数,最后输出时套用两个min()函数求三个数的最小值即可. 代码: #i ...
- Acwing 第 91 场周赛
Powered by:NEFU AB-IN B站直播录像! Link 文章目录 Acwing 第 91 场周赛 A AcWing 4861. 构造数列 题意 思路 代码 B AcWing 4862. ...
- Acwing 第 95 场周赛
Powered by:NEFU AB-IN Link 文章目录 Acwing 第 95 场周赛 A AcWing 4873. 简单计算 题意 思路 代码 B AcWing 4874. 约数 题意 思路 ...
- Acwing 第 89 场周赛
Powered by:NEFU AB-IN B站直播录像! Link 文章目录 Acwing 第 89 场周赛 A AcWing 4803. 满足的数 题意 思路 代码 B AcWing 4804. ...
- 【Acwing】第55场周赛 题解
第一题 AcWing 4479. 最长子序列 解题思路 : 这道题直接采用简单的哈希表或者是用一个数组进行记录:记录a数组中的数字是否在b数组中出现即可. 代码实现: #include <ios ...
- 【AcWing周赛】AcWing第85场周赛
目录 <一>Acwing 4791. 死或生 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 <二>Acwing 4792. 最 ...
- Acwing第 29 场周赛【完结】
TLE场 目录 4194. Pow[签到] 4195. 线段覆盖[离散化+差分] 4196. 最短路径[最短路] 4194. Pow[签到] https://www.acwing.com/proble ...
- Acwing第 21 场周赛【完结】
这场比赛是有史以来,最拉的一场.开始太慌了,第一题没看数据范围直接开始写.wa了四发后,才发现可以暴力. 第二题超时的模拟,规律一直没有找出来.总之,状态及其不好掉了大分.无语. 目录 3997. 整 ...
- Acwing第 17 场周赛【完结】
事实证明,只要参加的次数够多,终有一天可以AK. 今天终于AK了一次.压线AK. 水平还是很菜,之前总感觉自己的水平正龟速上升. 现在终于明白了,只要一点点的进步,终有一天可以变强. 目录 3971. ...
最新文章
- [linux] Linux日志设置(转自抚琴煮酒)
- 智能音箱AEC中的回采信号
- react js 按条数 展开/折叠
- winpcap的程序(转)
- UML图中聚合、组合、关联、依赖、泛化的强弱关系
- python装饰器带参数函数_python带参数装饰器的两种写法
- 编程之美读书笔记1.3 —— 一摞烙饼的排序
- 手机站的拨打电话和发短信
- 常用的简单的数值比较方法
- 制作 maxdos 启动盘 Linux 安装盘
- 如何在ppt中生成柱状图_Excel表格数据如何生成柱状图等-EXCEL如何制作柱状图?...
- AR图书,看着很美其实有点坑
- 鸿蒙HarmonyOS,真的来了!
- 计算机发展历程 思维导图
- 怎么提供电子邮件副本_停止提供您的电话号码和电子邮件
- 2017年最后一篇文章:微信小程序游戏跳一跳刷榜原理解析!
- ElasticSearch License 过期解决办法
- UCC21755QDWRQ1引脚图TPS92667QPHPRQ1汽车级驱动芯片
- PlatON创始人孙立林:以区块链为代表的新一代金融基础设施,就是未来AI和大数据的公共基础设施...
- UserWarning: mkl-service package failed to import
热门文章
- 毕业论文是手写还是计算机,毕业论文一般是手写还是打印?
- 【C语言每日一题】——猜凶手
- System.out.print(我爱你)
- 用python的tkinter和爬虫制作一个天气查询窗口
- 梯度、Hessian矩阵、平面方程的法线以及函数导数的含义
- 【GAOPS055】verilog 乘法、除法和取余
- 02139计算机信息检索-第9章.网络信息检索的未来发展趋势【思维导图】
- ThinkpadCPU锁频0.4G问题
- 存储行业市场现状与展望
- html中如何在页面底部增加,HTML中footer固定在页面底部的若干种方法