前言:
本文为AtCoder Beginner Contest 370 ABCD题的详细题解,包含C++,Python语言描述,觉得有帮助或者写的不错可以点个赞
个人感觉D比C简单,C那里的字典序有点不理解, E应该是前缀和加dp,但是是dp不明白,等我明白了会更新的(好像拖了好多东西了)
目录
题A:
A - Raise Both Hands (atcoder.jp)
题目大意和解题思路:
如果只举起一只手,如果他想吃章鱼烧就输出Yes,如果他不想吃就输出No。如果他举起两只手或者一只手都不举,就输出Invalid
简单的if else判断
可以用三元运算符优化
代码(C++):
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int a, b;
std::cin >> a >> b;
std::string res = (a == 1 && b == 0 ? "Yes" : a == 0 && b == 1 ? "No" : "Invalid");
std::cout << res << "\n";
}
代码(Python):
def main():
a, b = map(int, input().split())
res = "Yes" if a == 1 and b == 0 else "No" if a == 0 and b == 1 else "Invalid"
print(res)
题B:
B - Binary Alchemy (atcoder.jp)
题目大意和解题思路:
有N种元素,编号为1, 2, ..., N。
这些元素可以相互组合。当元素i和j组合时,如果i≥j,它们会变成元素A[i,j];如果i<j,它们会变成元素A[j,i]。
从元素1开始,按顺序将它与元素1, 2, ..., N组合。找出最终得到的元素。
题目意思其实很简单,就是最开始是1跟1比较,然后比较的数字大小决定了下一个坐标
比如示例一:
4 3 2 4 3 1 2 2 1 2 4
最开始1跟1比较,得到A11,也就是 3
然后3跟2比较,得到A32,也就是1
然后1跟3比较,得到A31,也就是3
最后3跟4比较,得到A43,也就是2
根据上面可以得到,大的坐标在前面,小的坐标在后面
然后可以模拟,输入的放入n + 1长度的二维数组,下标从1开始,然后答案定义为1,详细见代码:</