- 博客(6)
- 收藏
- 关注
原创 Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session
题目链接:D. Training Session 题目大意: 给你n个(x,y)对,其中x是题目的主题 y的题目的难度 ,从中找出三个(x,y)对,要求这三个对要么是x都不同,要么是y都不同,要么是x和y都不相同。 思路: 很容易知道总的选择数就是Cn3C_{n}^{3}Cn3也就是n∗(n−2)∗(n−2)6{n*(n-2)*(n-2)\over 6}6n∗(n−2)∗(n−2),那么只要找出不符合的然后相减就能得出最终答案了。 那么怎么找出不符合的呢,根据题目不可能存在完全一致的(x,y)对,所
2021-11-01 21:26:44
209
1
原创 Codeforces Round#750 (div. 2) D. Vupsen, Pupsen and 0
题目链接:D. Vupsen, Pupsen and 0 思路: 这道题要求构造一个b数组使得与对应a元素的乘积之和为0,并且要求b数组的各项绝对值之和要小于等于1e9,再结合a数组元素值的大小来看,已经暗示了只要将a数组进行相应的调整便可以。改题可以分为两种情况: 第一种:n为偶数的情况,此时两两相邻元素之间可以凑为一对,我们写为x y,那么很容易想到b数组对应的为-y x即可让这一对的sum变为0. 第二种:n为奇数的时候,这时候我们可以把前三个数单独拿出来计算,而从第四个数开始直到第n个数的做法就可以
2021-10-25 11:43:20
234
原创 Mayor‘s posters (线段树+离散化)
题目链接:Mayor’s posters 思路:由于看到l,r的值最大可达到1e7,这时候如果强行build,那么大概率会出错,看到n的值只有1e4,这时候我们应该想到用离散化去解决这个问题。 而且,这里还有一个坑点,假如所给区间为[1,4],[6,7],[1,7],那么离散化之后1,4,6,7分别对应1,2,3,4这时候如果求出海报的种类,那么就错误的求出了[1,2],[3,4]的海报种类为2。所以我们判断当两个结点的值的差大于1时,那么插入一个中间结点,就可以避免此情况。 代码:(还是y总的代码风格看起
2021-09-27 18:21:28
320
原创 Codeforces Round #743 (Div. 2) C. Book
题目链接:C.Book 思路:基本上就是拓扑排序模板题,一些细节会给在代码当中给与一定注释 代码: #include <bits/stdc++.h> using namespace std; const int N=2e5+10; int h[N],e[N],ne[N],idx,n,en[N],day[N]; void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++; } int top() { int
2021-09-24 16:31:44
156
原创 Codeforces Round #743 (Div. 2) B. Swaps
题目链接:B.Swaps 思路(来自于博主%xiao Q): 1、首先看看暴力的做法。遍历a[]数组,从b[]数组中找到第一个比a[i]大的数,之后记录交换的次数即i+j-2,然后更新ans。但是显然这个时间复杂度为O(n^2)会超时。 2、我们以这个思路为基础,将a[]数组进行升序排序,并将a[]数组中每个数的下标记录下来,然后使用双指针进行查找第一个比a[i]大的数b[j],同样可以达到暴力做法的那种效果,而且时间复杂度也降低了不少 代码如下: #include <bits/stdc++.h>
2021-09-23 20:27:07
196
原创 Codeforces Round113(div .2) B. Chess Tournament
Codeforces Round113(div .2) B. Chess Tournament 原题地址 思路: 1:先说输出结果为NO的情况。当只有1个或者2个记号2时,输出NO。 2:输出YES的情况。既然记号1是代表这个人一场都不输,那么对局有两种结果一种结果是=,一种结果是+。此时容易知道如果我们一碰到1便将他的任何对局结果都变成=,那么无论对手是记号是1还是2,都符合题意。而当某个人是记号2,需要他至少赢一场。那么我们可以将所有记号为2的下标存储起来,先存储的可以赢下他后一位存储的,后一位存储的
2021-09-09 22:36:25
185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人