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

atcoder abc 358

A welcome to AtCoder Land

题目:

思路:字符串比较

代码:

#include <bits/stdc++.h>using namespace std;int main() {string a, b;cin >> a >> b;if(a == "AtCoder" && b == "Land") cout << "Yes" << endl;else cout << "No" << endl;return 0;
}

B Ticket counter

题目:

思路:记录下第 i-1个人买完票的时间now,更新now 为max t[i], now后now + a  输出now

代码:

#include <bits/stdc++.h>using namespace std;int main() {int n, a;cin >> n >> a;vector<int> t(n + 1);int now = 0;//now表示上一个人买完票的时间for(int i = 1; i <= n; i ++ ) cin >> t[i];for(int i = 1; i <= n; i ++ ) {if(i == 1) {now = t[i] + a;cout << t[i] + a << endl;} else {now = max(t[i], now);now += a;cout << now << endl;}}return 0;
}

C popcorn

问题

思路:注意到n很小,考虑爆搜,现在思考一个问题,如何把时间尽可能的压缩。

1 字符串比较是浪费时间时间,因此可以考虑优先处理下字符串,这里的做法是状态压缩,o代表二进制的1,x代表2进制的0,两个摊位的爆米花口味是a | b。这样可以极大的节省时间

2 剪枝, 设全局最大值ans = 0, 如果在dfs过程中方案数大于ans直接return

3 排列组合优化 这里选的摊位并没有明确的顺序,因此先选a和先选b是一样的,可以在dfs中记录一个start

代码:

#include <bits/stdc++.h>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> str(n + 1);for(int i = 1; i <= n; i ++ ) {int cnt = 0;for(int j = 0; j < m; j ++ ) {char ok;cin >> ok;if(ok == 'o') cnt +=  1 << j;}str[i] = cnt;}vector<bool> st(n + 1, false);int ans = n;function<void(int, int, int)> dfs = [&](int u, int cnt, int res) -> void {if(cnt >= ans) return;if(res == ((1 << m) - 1)) ans = cnt;for(int i = u + 1; i <= n; i ++ ) {if(!st[i]) {st[i] = true;int tmp = res;res |= str[i];dfs(i, cnt + 1, res);st[i] = false;res = tmp;}}};dfs(0, 0, 0);cout << ans;return 0;
}

D souvneirs

题目:

思路:堆, 排序, 双指针,贪心,平衡树都可以做。把a放进小根堆里,b从小到大sort,如果满足条件b索引++,每次操作把堆顶pop掉...

这里有个小坑,在对vector排序如果没用到a[0],一定要从a.begin() + 1开始sort, 当然这里数都大于0,这个不影响

代码:

#include <bits/stdc++.h>using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m;cin >> n >> m;vector<int> a(n + 1);vector<int> b(m + 1);for(int i = 1; i <= n; i ++ ) cin >> a[i];for(int i = 1; i <= m; i ++ ) cin >> b[i];sort(b.begin(), b.end());priority_queue<int, vector<int>, greater<int>> q;for(int i = 1; i <= n; i ++ ) q.push(a[i]);long long ans = 0;int i = 1;while(q.size() && i <= m) {if(q.top() >= b[i]) {ans += q.top();i ++;q.pop();} else {q.pop();}}if(i == m + 1) cout << ans;else cout << -1;return 0;
}

E alphabet tiles

题目:

思路:一眼数位dp

相关文章:

  • 【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)
  • CST初级教程 七
  • SQLite数据库(数据库和链表双向转换)
  • STM32之二:时钟树
  • 和琪宝的厦门之旅~
  • 尚品汇-(四)
  • 嵌入式web 服务器boa的编译和移植
  • 探索Linux的奇妙世界:第二关---Linux的基本指令1
  • React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路
  • IOS Swift : 从入门到精通结构、属性和方法 结构体,第一部分
  • 生产管理系统看板,在自动化设备领域的创新应用
  • Vue3 - 在项目中使用vue-i18n不生效的问题
  • 江协科技51单片机学习- p11 静态数码管显示
  • DbConnectionStringParser
  • SpringBoot 快速入门(保姆级详细教程)
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【Leetcode】104. 二叉树的最大深度
  • 10个最佳ES6特性 ES7与ES8的特性
  • CentOS6 编译安装 redis-3.2.3
  • HTTP中的ETag在移动客户端的应用
  • Java应用性能调优
  • js操作时间(持续更新)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Swift 中的尾递归和蹦床
  • Travix是如何部署应用程序到Kubernetes上的
  • 从伪并行的 Python 多线程说起
  • 每天一个设计模式之命令模式
  • 网络应用优化——时延与带宽
  • 我看到的前端
  • 异步
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # 职场生活之道:善于团结
  • #AngularJS#$sce.trustAsResourceUrl
  • #QT项目实战(天气预报)
  • ()、[]、{}、(())、[[]]命令替换
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (多级缓存)缓存同步
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (新)网络工程师考点串讲与真题详解
  • (转)JAVA中的堆栈
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • **CI中自动类加载的用法总结
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net FrameWork总结