AtCoder Beginner Contest 245 A~E 题解
ABC245 A~E
- [A - Good morning](https://atcoder.jp/contests/abc245/tasks/abc245_a)
- 题目大意
- 输入格式
- 输出格式
- 样例
- 分析
- 代码
- [B - Mex](https://atcoder.jp/contests/abc245/tasks/abc245_b)
- 题目大意
- 输入格式
- 输出格式
- 样例
- 分析
- 代码
- [C - Choose Elements](https://atcoder.jp/contests/abc245/tasks/abc245_c)
- 题目大意
- 输入格式
- 输出格式
- 样例
- 分析
- 代码
- [D - Polynomial division](https://atcoder.jp/contests/abc245/tasks/abc245_d)
- 题目大意
- 输入格式
- 输出格式
- 样例
- 分析
- 代码
- [E - Wrapping Chocolate](https://atcoder.jp/contests/abc245/tasks/abc245_e)
- 题目大意
- 输入格式
- 输出格式
- 分析
- 代码
A - Good morning
题目大意
在同一天里,Takahashi在AAA时BBB分起床,Aoki在CCC时DDD分111秒起床,请问谁起床更早?
0≤A,C<240\le A,C<240≤A,C<24
0≤B,D<600\le B,D<600≤B,D<60
输入格式
ABCDA~B~C~DA B C D
输出格式
输出起得更早的人的名字(Takahashi
或Aoki
)。
样例
AAA | BBB | CCC | DDD | 输出 |
---|---|---|---|---|
777 | 000 | 666 | 303030 |
Aoki
|
777 | 303030 | 777 | 303030 |
Takahashi
|
000 | 000 | 232323 | 595959 |
Takahashi
|
分析
思路很明显,直接判断(A,B)≤(C,D)(A,B)\le(C,D)(A,B)≤(C,D)是否成立即可。
代码
#include <cstdio>
using namespace std;int main()
{int a, b, c, d;scanf("%d%d%d%d", &a, &b, &c, &d);puts((a == c? b <= d: a < c)? "Takahashi": "Aoki");return 0;
}
B - Mex
题目大意
给定整数序列A=(A1,…,AN)A=(A_1,\dots,A_N)A=(A1,…,AN)。求最小的不在AAA中的自然数。
1≤N≤20001\le N\le 20001≤N≤2000
0≤Ai≤20000\le A_i\le 20000≤Ai≤2000
输入格式
NNN
A1…ANA_1~\dots~A_NA1 … AN
输出格式
输出一行,即最小的不在AAA中的自然数。
样例
略,请自行前往AtCoder查看
分析
由于题面中有限制0≤Ai≤20000\le A_i\le 20000≤Ai≤2000,所以我们直接开一个数组记录[0,2001][0,2001][0,2001]中每个数是否出现过即可。
本题方法很多,这里介绍的是最快的算法,时间复杂度O(N)\mathcal O(N)O(N)。
代码
#include <cstdio>
using namespace std;bool used[2005];int main()
{int n;scanf("%d", &n);while(n--){int a;scanf("%d", &a);used[a] = true;}int i = -1;while(used[++i]);printf("%d\n", i);return 0;
}
C - Choose Elements
题目大意
给定两个长度为NNN的整数序列A=(A1,…,AN)A=(A_1,\dots,A_N)A=(A1,…,AN)和B=(B1,…,BN)B=(B_1,\dots,B_N)B=(B1,…,BN)。
问是否存在序列X=(X1,…,XN)X=(X_1,\dots,X_N)X=(X1,…,XN),满足如下条件:
- Xi=AiX_i=A_iXi=Ai或Xi=BiX_i=B_iXi=Bi
- ∣Xi−Xi+1∣≤K|X_i-X_{i+1}|\le K∣Xi−Xi+1∣≤K,其中1≤i<N1\le i<N1≤i<N
1≤N≤2×1051\le N\le 2\times 10^51≤N≤2×105
1≤K≤1091\le K\le 10^91≤K≤109
1≤Ai,Bi≤1091\le A_i,B_i\le 10^91≤Ai,Bi≤109
输入格式
NKN~KN K
A1…ANA_1~\dots~A_NA1 … AN
B1…BNB_1~\dots~B_NB1 … BN
输出格式
如果存在符合全部条件的XXX,输出Yes
;否则,输出No
。
样例
略,请自行前往AtCoder查看
分析
好家伙,C题都要用dp……
本题普通的方法貌似不太好做,因此我们考虑DP\text{DP}DP。
令f(i)=Xif(i)=X_if(i)=Xi选择能否等于AiA_iAi,g(i)=Xig(i)=X_ig(i)=Xi能否等于BiB_iBi。
然后状态转移方程就简单了,详见代码。
代码
#include <cstdio>
#define maxn 200005
using namespace std;int a[maxn], b[maxn];
bool f[maxn], g[maxn];int main()
{int n, k;scanf("%d%d", &n, &k);for(int i=0; i<n; i++)scanf("%d", a + i);for(int i=0; i<n; i++)scanf("%d", b + i);f[0] = g[0] = true;
#define set(x, y, z) x |= y - z <= k && z - y <= kfor(int i=1; i<n; i++){if(f[i - 1])set(f[i], a[i - 1], a[i]),set(g[i], a[i - 1], b[i]);if(g[i - 1])set(f[i], b[i - 1], a[i]),set(g[i], b[i - 1], b[i]);}puts(f[n - 1] || g[n - 1]? "Yes": "No");return 0;
}
注:本题还有一种很奇怪的解法,就是直接判断相邻的四种连接方式是否有至少一种能连通,比如#30453703,如果有大佬能证明这种方法的正确性,欢迎在评论区留言告诉我,谢谢!
D - Polynomial division
题目大意
我们有三个多项式
A(x)=∑i=0NAiXiB(x)=∑i=0MBiXiC(x)=∑i=0N+MBiXiA(x)=\sum_{i=0}^N A_iX^i\\ B(x)=\sum_{i=0}^M B_iX^i\\ C(x)=\sum_{i=0}^{N+M} B_iX^i A(x)=i=0∑NAiXiB(x)=i=0∑MBiXiC(x)=i=0∑N+MBiXi
已知A0,…,ANA_0,\dots,A_NA0,…,AN和C0,…,CNC_0,\dots,C_NC0,…,CN且A(x)×B(x)=C(x)A(x)\times B(x)=C(x)A(x)×B(x)=C(x)(x∈Rx\in Rx∈R),求B0,…,BMB_0,\dots,B_MB0,…,BM。
换句话说,给定多项式AAA和CCC每一项的系数,求多项式B=CAB=\frac C AB=AC。
1≤N,M<1001\le N,M<1001≤N,M<100
∣Ai∣≤100|A_i|\le 100∣Ai∣≤100
∣Ci∣≤106|C_i|\le 10^6∣Ci∣≤106
AN≠0,CN+M≠0A_N\ne0,C_{N+M}\ne0AN=0,CN+M=0
题目保证存在合法的(B0,…,BM)(B_0,\dots,B_M)(B0,…,BM)。
输入格式
NMN~MN M
A0…ANA_0~\dots~A_NA0 … AN
C0…CN+MC_0~\dots~C_{N+M}C0 … CN+M
输出格式
输出B0,…,BMB_0,\dots,B_MB0,…,BM,用空格分隔。
样例
略,请自行前往AtCoder查看
分析
本题可以直接模拟多项式的大除法运算,运算时只需记录系数即可。
代码
#include <cstdio>
#define maxn 105
using namespace std;int a[maxn], b[maxn], c[maxn << 1];int main()
{int n, m;scanf("%d%d", &n, &m);for(int i=0; i<=n; i++) scanf("%d", a + i);for(int i=0; i<=n+m; i++) scanf("%d", c + i);for(int i=m; i>=0; i--) // NOTE: 必须倒推!{b[i] = c[n + i] / a[n];for(int j=0; j<=n; j++)c[i + j] -= a[j] * b[i];}for(int i=0; i<=m; i++)printf("%d ", b[i]);return 0;
}
E - Wrapping Chocolate
题目大意
我们有NNN块巧克力和MMM个盒子。第iii块巧克力长AiA_iAi厘米,宽BiB_iBi厘米;第iii个盒子长CiC_iCi厘米,宽DiD_iDi厘米。
问是否能把巧克力分别装在盒子里,使其满足如下条件:
- 每个盒子里只能有一块巧克力。
- 当我们将第iii块巧克力放入第jjj个盒子里时,Ai≤CjA_i\le C_jAi≤Cj和Bi≤DjB_i\le D_jBi≤Dj必须都成立。
1≤N≤M≤2×1051\le N\le M\le 2\times10^51≤N≤M≤2×105
1≤Ai,Bi,Ci,Di≤1091\le A_i,B_i,C_i,D_i\le 10^91≤Ai,Bi,Ci,Di≤109
输入格式
NMN~MN M
A1…ANA_1~\dots~A_NA1 … AN
B1…BNB_1~\dots~B_NB1 … BN
C1…CNC_1~\dots~C_NC1 … CN
D1…DND_1~\dots~D_ND1 … DN
输出格式
如果有合法的方法,输出Yes
;否则,输出No
。
分析
本题可以考虑如下贪心算法:
- 将所有的巧克力和盒子放入一个数组,按长度(AiA_iAi或CiC_iCi)的降序排序,长度相等的把盒子排在前面。
- 准备好一个空序列S=()S=()S=(),按如下规则遍历每个元素:
- 如果当前遍历的是一个盒子(Ci,Di)(C_i,D_i)(Ci,Di):
将DiD_iDi加入SSS。 - 如果当前遍历的是一块巧克力(Ai,Bi)(A_i,B_i)(Ai,Bi):
从SSS中删除不超过BiB_iBi的最小元素,如果没有元素可删除,输出No
。
- 如果当前遍历的是一个盒子(Ci,Di)(C_i,D_i)(Ci,Di):
- 如果顺利地遍历了所有元素,输出
Yes
;否则,输出No
。
本算法的时间复杂度是O(MN)\mathcal O(MN)O(MN),但经过multiset
优化后可降为O((M+N)log(M+N)\mathcal O((M+N)\log(M+N)O((M+N)log(M+N),具体实现详见代码。
代码
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;struct Item {int w, h;bool type;inline bool operator <(const Item& i2) const {return w == i2.w? type > i2.type: w > i2.w;// ^^^^^^^^^^^^^^// 注意sort必须有严格顺序,一开始我这里写成了type==1导致RE,详见:// https://atcoder.jp/contests/abc245/submissions/30526563}
} v[400005];int main()
{int n, m;scanf("%d%d", &n, &m);// Chocolatefor(int i=0; i<n; i++) scanf("%d", &v[i].w);for(int i=0; i<n; i++) scanf("%d", &v[i].h);// Boxm += n;for(int i=n; i<m; i++) scanf("%d", &v[i].w);for(int i=n; i<m; i++) scanf("%d", &v[i].h);for(int i=n; i<m; i++) v[i].type = 1;// Algorithmsort(v, v + m);multiset<int> s;for(int i=0; i<m; i++){const Item& it = v[i];if(it.type) s.insert(it.h); // Boxelse{auto itr = s.lower_bound(it.h);if(itr == s.end()){puts("No");return 0;}s.erase(itr);}}puts("Yes");return 0;
}
AtCoder Beginner Contest 245 A~E 题解相关推荐
- AtCoder Beginner Contest 245
AtCoder Beginner Contest 245 文章目录 AtCoder Beginner Contest 245 A - Good morning B - Mex C - Choose E ...
- AtCoder Beginner Contest 246 A~E 题解 Bishop 2
AtCoder Beginner Contest 246 A~E 题解 A Four Points 题意 给你矩形的三个顶点,输出剩下那个 思路 把横坐标和纵坐标分开,必会存在两个相同的数,横纵坐标就 ...
- AtCoder Beginner Contest 252 A~G 题解
前言 这是我第一次写7题(A~G)的ABC题解,若有写得不好或者不到位的地方请多多指教,我将万分感激,感谢大家的支持! ABC252 A~G [A - ASCII code](https://atco ...
- AtCoder Beginner Contest 196 A~E题解
ABC196 A~E [A - Difference Max](https://atcoder.jp/contests/abc196/tasks/abc196_a) 题目大意 输入格式 输出格式 样例 ...
- AtCoder Beginner Contest 177 A~D 题解
ABC177 A~D [A - Don't be late](https://atcoder.jp/contests/abc177/tasks/abc177_a) 题目大意 输入格式 输出格式 样例 ...
- AtCoder Beginner Contest 168 C~D题解
ABC168 C&D [C - : (Colon)](https://atcoder.jp/contests/abc168/tasks/abc168_c) 题目大意 输入格式 输出格式 样例 ...
- AtCoder Beginner Contest 242 C~E 题解
ABC242 C~E [C - 1111gal password](https://atcoder.jp/contests/abc242/tasks/abc242_c) 题目大意 输入格式 输出格式 ...
- AtCoder Beginner Contest 250 C~E 题解
ABC250 C~E [C - Adjacent Swaps](https://atcoder.jp/contests/abc250/tasks/abc250_c) 题目大意 输入格式 输出格式 样例 ...
- AtCoder Beginner Contest 192 A~D题解
ABC192 A~D [A - Star](https://atcoder.jp/contests/abc192/tasks/abc192_a) 题目大意 输入格式 输出格式 样例 分析 代码 [B ...
- AtCoder Beginner Contest 254 A~E 题解
ABC254 A~E [A - Last Two Digits](https://atcoder.jp/contests/abc254/tasks/abc254_a) 题目大意 输入格式 输出格式 样 ...
最新文章
- Python3中__call__方法介绍
- 【数学与算法】牛顿法的两种应用:求根和最优化
- PHP二维数组排序函数
- 【渝粤题库】广东开放大学 质量管理 形成性考核 (2)
- vue实现可编辑的文字_苹果还自带文字转语音,只要一键按下便可实现,今天分享给大家...
- JavaEE实战班第十七天
- linux驱动中使用定时器的设置
- ImportError: No module named MySQLdb
- 非线性鲁棒控制器_Sliding Mode_滑模控制
- NOIP模拟赛 czy的后宫4
- 机器人运动控制-水下机器人
- luci实现的wifidog认证服务
- C++基础笔记(一)
- 使用 JABX 将 Map<String,String> 序列化成 <key>value</key>形式的字符串
- 咱也谈谈如何炒股,如何买股票呗。
- 信息与计算机工程学院英文翻译,成都信息工程学院通信工程学院英文翻译.doc...
- 软件工程 第一章 软件工程概述
- 凭栏听音,化险为夷——配电系统中的电磁隐患解析
- ADC VS参考电压在测量时和AD值的大小对应关系
- 51单片机~串口通信(讲解+代码)
热门文章
- java中public static void main(String args[])具体是什么意思?
- linux中文成方块,给linux添加字体
- 组成计算机硬件系统的基本部分为,组成计算机硬件系统的基本部分有哪些
- CMake Error: The source directory * does not appear to contain CMakeLists.txt.
- 开源人物之九:赖霖枫
- Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
- 厦门大学计算机考研复试线2021,2021浙江大学、中科大、厦门大学考研复试分数线公布!...
- The firefox installs flashplugin for Linux
- linux quota原理,[转载]linux下quota实现
- audio标签控制音量_audio 基本功能实现(audio停止播放,audio如何静音,audio音量控制等)...