思维
悭吝韶华
在学习Unity和图形学.
展开
-
Codeforces Global Round 9C. Element Extermination(思维)⭐⭐⭐
%%%%%%%%% 传送门 考虑第一个点a1a_1a1,显然要找到一个aj>a1aj>a1aj>a1,否则不成立。依次找到后面的每个满足条件的j,用这些aja_jaj去消除掉他前面的小于a1a_1a1的元素,这样剩下的都是大于a1的元素了。就可全部去掉了。显然最后一个元素ana_nan要大于a1,满足这个条件即可。 #include<bits/stdc++.h> using namespace std; int n,m; #define MAXN 4000000 #de原创 2020-07-05 14:59:33 · 124 阅读 · 0 评论 -
Codeforces Round #654 (Div. 2)E. Asterism(思维)⭐⭐⭐⭐
这道题让你求方案数f(x)f(x)f(x)不能被p整除的x. 又是一道思维盲点题:这道题的答案是一个连续的区间。 首先最小满足条件的x=l很好求,最大的满足条件的也求出的话,答案就出来了。 证明:首先将a从小到大排序,可以发现对于回合i,有(x+i−1)(x+i-1)(x+i−1)个candy,该回合可以使得f(x)乘上(cnt−i+1),cnt为a中小于等于candyi的元素个数(cnt-i+1),cnt为a中小于等于candy_i的元素个数(cnt−i+1),cnt为a中小于等于candyi的元素个数原创 2020-07-02 11:02:08 · 179 阅读 · 0 评论 -
Codeforces Round #649 (Div. 2)C. Ehab and Prefix MEXs(好题+思维)⭐⭐
就是从题目给定的条件,易得肯定是存在答案的。 首先你都设置所有的元素都为不可到达的n+1. 每次访问时添加当前元素到可用区(一个堆栈内) 出现一个数比前一个数大的时候,从堆栈中取数,从大到小放入[a[i-1],a[i]-1]即可 #include<bits/stdc++.h> using namespace std; #define ll long long #define MAXN 500005 #define rep(n) for(int i=1;i<=n;i++) #define r原创 2020-06-23 21:47:28 · 118 阅读 · 0 评论 -
Educational Codeforces Round 89 (Rated for Div. 2)E. Two Arrays详细题解(思维Hard)
这题实在是强,实现没有用到任何算法,但凭借强大的思维要求提高了难度。 题意很简单,就是在数组a中找出m个划分,每个划分的最小值对应b数组。 首先其实我们可以把这个任务分成m个阶段。 第i个阶段的任务就是从当前可选区间内截取后缀部分,使其最小值为b[i]. (当然第一个阶段不能截取,只能全保留) 那么第i个阶段去掉第i+1个阶段后剩下的区间,就是第i个划分。 最后一个阶段选取的区间就是它自己的划分,它不会再被截取了。 然后,其实你可以注意到,其实每次划分前选用的区间并不影响这次划分的方案数。 因为划分前选用的原创 2020-06-14 11:10:09 · 186 阅读 · 0 评论 -
Codeforces Round #632 (Div. 2) F. Kate and imperfection详细题解(数论+思维)
首先我们要统计出1~n以内素数的个数cnt。 如果k<=cnt,显然所有素数都互质,Maxgcd(ai,aj)Max_{gcd(ai,aj)}Maxgcd(ai,aj)=1. 接下来k>cnt,我们要怎么考虑呢? 首先如果你加入一个x,那么为了使得产生的gcd尽可能小,x的每一个因子(不包括它本身)必然已经在集合里了,那么x的加入对答案的贡献就是x的因数中小于x并且最大的那一个。 素数对答案的贡献为1,合数对答案的贡献为小于它本身的它自己的最大因数。 显然一个合数的因数对答案的贡献一定小于该合原创 2020-05-31 17:34:48 · 130 阅读 · 0 评论