Acwing66周赛+Leetcode308周赛

ACW

link题目链接

这次的周赛又划水了 ,是真的划水了 hhh
去湖州漂流hh

第二题字母补齐
简单而言就是构造一个hash表,遍历string 。。。

第三题

给定一个包含 n 个整数 s1,s2,…,sn 的集合 S。我们规定,如果某个整数在一个集合中恰好出现一次,则称该整数为超级数。例如,集合 {1,1,2,3,3,3,4} 中包含两个超级数 2,4。现在,请你将 S 分成两个集合 A 和 B(其中一个可以为空),使得集合 A 中超级数的数量与集合 B 中超级数的数量相同(也就是说,集合 A 中恰好出现一次的整数的数量与集合 B 中恰好出现一次的整数的数量相同)。输入格式
第一行包含一个整数 n。第二行包含 n 个整数 s1,s2,…,sn。输出格式
如果不存在合理的划分方案,则输出一行 NO。否则,第一行输出 YES,第二行输出一个长度为 n 的由 A 和 B 构成的字符串,其中的第 i 个字符,如果为 A 则表示 si 划分到集合 A,如果为 B 则表示 si 划分到集合 B。如果方案不唯一,输出任意合理方案均可。数据范围
前 6 个测试点满足 2≤n≤12。
所有测试点满足 2≤n≤100,1≤si≤100。输入样例1:
4
3 5 7 1
输出样例1:
YES
BABA
输入样例2:
3
3 5 1
输出样例2:
NO

我们构造一个vector p;
对于数字1 p[1].push_back() 记录存在的位置
我们首先直接计算出超级数的个数 cnt
若cnt 为偶数 可以直接操作
若cnt 为奇数 我们对非超级数进行如下处理
1.当此数字出现次数为2时 我们发现无论放在a中还是b中对结果没有影响
2.当此数字出现次数大于2时,我们只需要将一个数字放在a中,其余数字均放入b 此时可以呈现a中超级数比b中多1
3.如果剩下的数字均不大于2,可得无解
实现代码如下

#include <cstring>
#include <algorithm>
#include <vector>using namespace std;const int N = 110;int n;
vector<int> p[N];int main()
{cin >> n;for (int i = 0; i < n; i ++ ){int x;cin >> x;p[x].push_back(i);}int cnt = 0;for (int i = 0; i < N; i ++ )if (p[i].size() == 1)cnt ++ ;string res(n, 'A');for (int i = 0, k = 0; i < N; i ++ )if (p[i].size() == 1){k ++ ;if (k <= cnt / 2) res[p[i][0]] = 'A';else res[p[i][0]] = 'B';}bool flag = true;if (cnt % 2){flag = false;for (int i = 0; i < N; i ++ )if (p[i].size() > 2){flag = true;res[p[i][0]] = 'A';for (int j = 1; j < p[i].size(); j ++ )res[p[i][j]] = 'B';break;}}if (flag){puts("YES");cout << res << endl;}else puts("NO");return 0;
}

Leetcode

link原题链接
前三题均可暴力ac

给你一个 正 整数 k ,同时给你:一个大小为 n 的二维整数数组 rowConditions ,其中 rowConditions[i] = [abovei, belowi] 和
一个大小为 m 的二维整数数组 colConditions ,其中 colConditions[i] = [lefti, righti] 。
两个数组里的整数都是 1 到 k 之间的数字。你需要构造一个 k x k 的矩阵,1 到 k 每个数字需要 恰好出现一次 。剩余的数字都是 0 。矩阵还需要满足以下条件:对于所有 0 到 n - 1 之间的下标 i ,数字 abovei 所在的 行 必须在数字 belowi 所在行的上面。
对于所有 0 到 m - 1 之间的下标 i ,数字 lefti 所在的 列 必须在数字 righti 所在列的左边。
返回满足上述要求的 任意 矩阵。如果不存在答案,返回一个空的矩阵。示例 1:输入:k = 3, rowConditions = [[1,2],[3,2]], colConditions = [[2,1],[3,2]]
输出:[[3,0,0],[0,0,1],[0,2,0]]
解释:上图为一个符合所有条件的矩阵。
行要求如下:
- 数字 1 在第 1 行,数字 2 在第 2 行,1 在 2 的上面。
- 数字 3 在第 0 行,数字 2 在第 2 行,3 在 2 的上面。
列要求如下:
- 数字 2 在第 1 列,数字 1 在第 2 列,2 在 1 的左边。
- 数字 3 在第 0 列,数字 2 在第 1 列,3 在 2 的左边。
注意,可能有多种正确的答案。
示例 2:输入:k = 3, rowConditions = [[1,2],[2,3],[3,1],[2,3]], colConditions = [[2,1]]
输出:[]
解释:由前两个条件可以得到 3 在 1 的下面,但第三个条件是 3 在 1 的上面。
没有符合条件的矩阵存在,所以我们返回空矩阵。提示:2 <= k <= 400
1 <= rowConditions.length, colConditions.length <= 104
rowConditions[i].length == colConditions[i].length == 2
1 <= abovei, belowi, lefti, righti <= k
abovei != belowi
lefti != righti

我们首先可以观察到上下的位置和左右的位置是无关的,
对此我们可以很容易观察对于上下位置和左右位置均可进行一次top-sort()
如果出现环即可说明无解
求出上下位置的top-sort后 对于左右位置,只需按需插入即可


给定条件下构造矩阵
提交记录
51 / 53 个通过测试用例
状态:通过
执行用时: 116 ms
内存消耗: 54.9 MB
提交时间:2 天前
执行用时分布图表
执行消耗内存分布图表
邀请好友来挑战 给定条件下构造矩阵
提交的代码: 2 天前
语言: cpp添加备注class Solution {vector<int> topo_sort(int k, vector<vector<int>> &edges) {vector<vector<int>> g(k);vector<int> in_deg(k);for (auto &e : edges) {int x = e[0] - 1, y = e[1] - 1; // 顶点编号从 0 开始,方便计算g[x].push_back(y);++in_deg[y];}vector<int> order;queue<int> q;for (int i = 0; i < k; ++i)if (in_deg[i] == 0)q.push(i);while (!q.empty()) {int x = q.front();q.pop();order.push_back(x);for (int y : g[x])if (--in_deg[y] == 0)q.push(y);}return order;}public:vector<vector<int>> buildMatrix(int k, vector<vector<int>> &rowConditions, vector<vector<int>> &colConditions) {auto row = topo_sort(k, rowConditions), col = topo_sort(k, colConditions);if (row.size() < k || col.size() < k) return {};vector<int> pos(k);for (int i = 0; i < k; ++i)pos[col[i]] = i;vector<vector<int>> ans(k, vector<int>(k));for (int i = 0; i < k; ++i)ans[i][pos[row[i]]] = row[i] + 1;return ans;}
};

这次周三相较于之前简单很多hhh

Acwing66周赛+Leetcode308周赛相关推荐

  1. 从零单排力扣周赛_周赛273

    本文同步发表于 个人博客. 前言 感觉 leetcodeleetcodeleetcode 周赛不花时间,做一做还能保持一下手感,最重要的是能让人在周末早起.于是以后可能就会多打打 leetcodele ...

  2. java数青蛙_『字节跳动LeetCode联合周赛』--周赛185(JavaScript) | OFEII

    前言

  3. 从零单排力扣周赛_周赛275

    本文同步发布于 个人博客 前言 这场打得就很辣鸡了,因为 B 题我看错题了! 不过 wls 登顶了Orz A 2133. 检查是否每一行每一列都包含全部整数 题意 给出 n×nn\times nn×n ...

  4. CSDN 每日一练及周赛介绍

    CSDN 每日一练及周赛介绍 每日一练 每日一练入口 CSDN 周赛 CSDN 周赛入口 相关社区 每日一练社区入口 CSDN 竞赛专区社区入口 每日一练题库 每日一练速查 每日一练题目题解速查入口 ...

  5. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...

  6. leetcode怎么用时间刷_刷完700多题后的首次总结:LeetCode应该怎么刷?

    推荐观看: java技术进阶:膜拜!字节大神总结的666页大师级算法宝典,分分钟团灭LeetCode​zhuanlan.zhihu.com 2020最新马士兵老师联手左程云老师丨数据结构与算法丨面试B ...

  7. leetcode数组汇总_LeetCode刷题:前言

    LeetCode刷题:前言 前言 作为一个对编程超级不通的小白,在2020年11月开始打算正式的刷LeetCode. (PS:前面有刷过,但是都是随机,看心情乱刷的,刷完后也没有什么感觉,该不会的还是 ...

  8. 计算机专业有哪些【含金量超高竞赛】?

    计算机专业有哪些[含金量超高竞赛]? 大学期间参加了很多比赛,也拿过不少比赛的大奖,认真给你推荐以下这几个计算机专业的竞赛吧,含金量都不错: 一.ACM国际大学生程序设计竞赛 适用人群:有一定竞赛基础 ...

  9. LeetCode(力扣) 刷题注意事项 持续更新 ~ ~

    文章目录 刷题无止境,那就让自己快乐一点 刷哪的题 抱前辈大腿 没有思路的题目 提交前检查代码 提交后 可以做的更好 在哪儿看题解 不要试图从题解的代码中理解思路 LeetCode的使用技巧 一次可以 ...

最新文章

  1. nginx+tomcat+memcache实现负载均衡、session共享
  2. 使用DjangoUeditor将Ueditor移植到Django(BAE环境下)
  3. [NHibernate]事务
  4. Redis数据库如何实现读写分离
  5. 一些著名的大公司JAVA面试题目
  6. [TP5填坑]关于助手函数input一不小心取不到get值的解决办法
  7. smart700iev3 程序下载设置_分享一款Aira2下载工具
  8. java线程和内核线程的,Java中内核线程理论及实例详解
  9. OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
  10. linux系统支持什么格式的软件吗,UOS系统支持什么样的软件包格式:其实Deb,Rpm,Tar.gz源码包都行...
  11. MyEclipse或Eclipse导出JavaDoc中文乱码问题解决
  12. JAVA随机数生成 | Math.random()方法 | 随机生成int、double类型
  13. 转自JavaEye --Oracle函数大全
  14. 5+API实现微信分享功能
  15. 局域网oracle 速度慢,[转帖]局域网中其他用户感觉上网速度慢、网速卡
  16. Sticky Footer , fixed footer, pinned footer
  17. 区块链 - DAPP
  18. 解决异常: SSL peer shut down incorrectly原因
  19. 没分啊,下载不了东西苦逼啊~!
  20. 贡献15本超级经典Android教程,都是pdf完整版的

热门文章

  1. 一图看懂 docx 读取、查询、修改 Ms Word docx 文件, 资料整理+笔记(大全)
  2. Python利用百度AI库颜值分析(包括脸型情绪颜值打分)
  3. Siri被苹果收购已有八年,到底还有没有未来
  4. 世界各地庆祝玛雅历法“新纪元”开始
  5. 麻了,3个offer不知道选哪个?
  6. 阿里云https证书tomcat配置
  7. 巫师之昆特牌手游服务器中断连接,巫师之昆特牌10月11日网络维护 掉线处理办法...
  8. Tableau-参考线
  9. office钓鱼免杀宏的制作
  10. canvas 像素操作(图片像素操作)