【Codeforces Round #430 (Div. 2) A C D三个题】

·不论难度,A,C,D自己都有收获!

[A. Kirill And The Game]

·全是英文题,述大意:

   给出两组区间端点:l,r,x,y和一个k。(都是正整数,保证区间不为空),询问是否在[x,y]区间内存在一个整数p,使得p*k属于[l,r],如果存在,则输出‘YES‘,否则输出‘NO‘。(1<=l,r,x,y<=107)

·分析:

    首先看见了107,发现可以直接O(n)暴力枚举:枚举区间[x,y]的所有数,判断它与k的乘积是否在[l,r]中就可以了。从容AC:

   

    其实在这之前大米饼首先想到的是O(1)的思路,即:利用[x,y]和k形成区间[x*k,y*k],然后判断该区间是否和[l,r]有交集。然后就笨笨地WA了。原因是这里只有整数点,新区间相邻点之间的间隔是k,可能[l,r]就夹在相邻两点之间并不接触两点,这样是NO而不是YES。例子如下:

     和它相似,只不过输出YES的例子就是这样:

观察两种情况的差异,我们找出第一个比l大的点p1,再找出第一个比r小的点p2(点就是满足[x*k,y*k]又是k的倍数的点),我们可以发现第一幅图中位置p1>p2,第二幅图中p1<p2,所以将其作为判断依据就可以了,总体思路就是:判断区间[p1,p2]是否为空,是否和[x,y]有交集,这其实是上文WA方法的倒过来同时统一单位的改进版。

[C. Ilya And The Tree]

·述大意;
     给出一棵树,共有n个结点(1<=n<=200000),并且输入每个点的点权w(1<=w<=200000)。每一个点有一个美丽值,计算方法是它到根节点的路径(包括它)的点权值的GCD。要求按1~n输出每个点的美丽值。但是有两个条件:①可以将路径上一个点的权值修改为0。②每个点求解独立(就是说求完一个点,树又恢复原样)。

·分析:

     值得注意的是求解独立,然后只能修改一个点的权值为0。

     求所有节点的GCD?我们脑袋里可能会浮现这样的图:

    当然,白色的点表示我们将它变成0了(对于任意正整数a,GCD(a,0)=a)。这样看来我们要在这其中找到最优的GCD值。写DP难以转移,而且也不符合DP的要求。从数据范围来看,是可以使用"暴力"的方法求解的:

     对于每个点,我们都记录图中的所有情况GCD值,然后找到最大值就可以了,然而怎么找到个节点的所有情况——可以从它的父节点那里索取,即将父节点的每条情况链加入一个u,另一种是删掉当前的u(看图中一层一层的关系就可以了,这方法在代码中也很清晰)。

     具体的写法,网上多用set,大米饼用的是sort+unique,使用unique是因为不去重是会恰好MLE的。

     代码来啦:

[D. Vitya and Strange Lesson]

·述大意:

     输入n个数ai和m个询问(1<=n,m<=300000,0<=ai<=300000),每个询问输入x,表示将所有数异或x后,求n个数的Mex(异或结果对后来的询问依旧有效)。

·分析:

     先说网络上常用的一个解法吧——Mex一出现,或许考虑Trie树。

由于log2300000约等于18.2,所以我们构建一个深度为20的01字典树。所谓01字典树,就是只有左右儿子分别表示01的字典树。并且从根结点到叶子结点是二进制从高位到低为排的。那么字典树的所有叶子结点可以表示1~219的所有整数。首先不考虑异或的情况,我们将一些数字按照二进制形式从高位(20位)到低位插入字典树,怎样快速得到Mex?由于数字的存在在树上体现为叶子结点的存在,如果前缀为000000000000000001_ _的数字都存在(即4,5,6,7都存在),在树上的表现为某一个子树是"饱满的"(可以理解最底层所有叶子结点都存在)。那么我们要找的答案肯定是在一颗不饱满的子树中

(回寝室睡大觉)

时间: 2024-10-12 16:09:40

【Codeforces Round #430 (Div. 2) A C D三个题】的相关文章

Codeforces Round #298 (Div. 2) A、B、C题

题目链接:Codeforces Round #298 (Div. 2) A. Exam An exam for n students will take place in a long and narrow room, so the students will sit in a line in some order. The teacher suspects that students with adjacent numbers (i and i + 1) always studied side

C - Ilya And The Tree Codeforces Round #430 (Div. 2)

http://codeforces.com/contest/842/problem/C 树 dp 一个数的质因数有限,用set存储,去重 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include <cstring> 5 #include <time.h> 6 #include <string> 7 #include <set> 8 #inc

Codeforces Round #430 (Div. 2) C

题意:一棵树,问每个点到1节点这条链的所有数字的gcd,可删除某个数,每个链单独处理 思路:暴力存,可删除重复的,可百度unique的具体用法 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=2e5+10; 4 5 int a[N],dp[N],b[N]; 6 vector<int > e[N],g[N]; 7 8 void dfs(int u,int fa){ 9 for(int i=0;i<e[

Codeforces Round #430 (Div. 2) A

题意:给你药水经验的区间和成本的区间,问是否有一个比例完全==k 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1e5+10; 5 6 double l,r,x,y,k; 7 int main(){ 8 scanf("%lf%lf%lf%lf%lf",&l,&r,&x,&y,&k); 9 for(int i=

Codeforces Round #430 (Div. 2)

题意:给出一个圆环,问有多少个圆完全在内环和外环之间 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1e5+10; 5 6 7 int main(){ 8 int r,d; 9 cin>>r>>d; 10 int n; 11 cin>>n; 12 d=r-d; 13 int x,y,r1; 14 int sum=0; 15 for(

Codeforces Round #221 (Div. 2) D. Maximum Submatrix 2 (思维题)

题目地址:codeforces 221 D 这场是人生中做的第一场CF中的D题.(当时只做出来了A题..)过年之际回顾了一下,就顺便看了几道D题.现在做CF的D题在比赛时还是做不出来.但是赛后往往都可以自己做出来.据说D题能在比赛中稳出的话就可以区域赛银了.于是争取以后CF能稳出4道题吧. 这道题刚开始不该看标签的..给的是DP..于是就一直朝着DP方向想.但是感觉不像是DP.就换了个思路,就做出来了. 大体方法是先预处理出每一行中每个数向左延伸最长的连续1的个数.然后对每一行的进行排序(我这里

Codeforces Round #629 (Div. 3) E. Tree Queries(lca题)

https://codeforces.com/contest/1328/problem/E E. Tree Queries You are given a rooted tree consisting of nn vertices numbered from 11 to nn. The root of the tree is a vertex number 11. A tree is a connected undirected graph with n−1n−1 edges. You are

Codeforces Round #337 (Div. 2) B. Vika and Squares 水题

B. Vika and Squares Vika has n jars with paints of distinct colors. All the jars are numbered from 1 to n and the i-th jar contains ai liters of paint of color i. Vika also has an infinitely long rectangular piece of paper of width 1, consisting of s

Codeforces Round #296 (Div. 2) C. Glass Carving(想法题)

传送门 Description Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glass). He already has a rectangular wmm  ×  h mm sheet of glass, a diamond glass cutter and lots of enthusiasm. What he lacks is understa