首页 > 其他分享 >Codeforces Round 867 (Div. 3)

Codeforces Round 867 (Div. 3)

时间:2023-05-01 10:55:53浏览次数:45  
标签:aa 思路 题目 Codeforces 867 肯定 对数 Div 我们

题目链接

E

核心思路

首先我们先考虑什么情况下是肯定不可以交换成功的:

aaabc.比如像这种a的个数超过了我们整个字符串一半的长度就肯定是不可以的。然后剩下的情况肯定都是可以的。

然后考虑怎么样可以使得交换次数最小呢:

aa aa bb cc dd ff。

我们发现这组的话我们只需要交换两次,也就是如果某个字母的对数小于等于其他的对数那么就可以两两交换。如果不是呢,那么就是某个字母出现的最多的对数的次数。比如:

aa aa aa bb cc dd,这样就必须的三次

记得需要向上取整。

F

核心思路

这道题目换根板子题,题目链接

也就是需要我们求出来以某一个点作为端点的最大长度。

但是这个我们发现其实最大长度肯定是这一课树的直径的两端点的距离,所以我们先求出来两个直径,然后跑dfs和bfs都可以,但是需要跑三遍,因为方便我们算代价。

因为树上的路径都是简单路径,也就是但是两个点之间的路径都是唯一确定的。

G

核心思路

这是一个值域分治的好题目。

首先清楚我们的目的:我们需要求这样子的对数:x/b x x*b.然后我们的第一思路肯定是想把我们的x分解质因数,也就是b就是他的一个约数。但是x的范围是\(1e9\).所以直接分解会直接爆炸。但是我们知道的是当x的范围是\(1e6\)的时候是可以直接分解的。

所以我们直接引入值域分治:也就是当\(x<1e6\)的时候,直接分解,\(1e6 \le x \le 1e9\)的时候怎么办呢,这里可以想到我们最大的数是\(x*b\),所以我们直接枚举b,因为这里的x大于\(1e6\),所以b就最多只要到1e3.所以这个时间复杂度完全可以接受。

需要注意的是我们枚举约数的时候是会有两个的,一个是小于等于\(\sqrt{x}\),还有一个是大于的。千万别忘了。

标签:aa,思路,题目,Codeforces,867,肯定,对数,Div,我们
From: https://www.cnblogs.com/xyh-hnust666/p/17366261.html

相关文章

  • codeforces div1A
    A.CircularLocalMiniMax题目翻译:给我们一个数组(循环的也就是1和n是相邻的),我们可以对数组进行任意调序,对于每个数b[i]要求满足b[i]<b[i-1]&&b[i]<b[i+1]或者满足b[i]>b[i-1]&&b[i]>b[i+1]。如果存在就输出yes并且输出构造的序列,否则输出no。思路:我们考虑......
  • Codeforces Round 869 (Div.1 & Div.2) 题解
    2A.Politics因为编号为\(1\)的人一定不会离开,那么最后留下的人一定要和编号为\(1\)的人的所有参数都一致,所以计数即可。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>u......
  • Codeforces Round 825 (Div. 2)——B
      #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"inlineintgcd(inta,intb){returnb>0?gcd(b,a%b):a;}inlineintlcm(inta,intb){returna/gcd(a,b)*b;}constint......
  • Codeforces Round 855 (Div. 3)--E
    题意:给定一个k,可以任意次交换满足|i-j|=k或|i-j|=k+1的两个位置的元素很容易发现有区间内的字符是可以任意交换的,但是一个个字符考虑太混乱了(就是这样子把脑袋搞晕了),从左考虑那么(1,n-k)这个区间可以任意交换,从右考虑(k+1,n)这个区间可以任意交换那......
  • Codeforces Round 863 (Div. 3)———E
    题意:给定一个k,问由012356789组成的数字第k大的是多少链接:Problem-E-Codeforces#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"/*思路:k代表在2没有出现4的数字中,第k大的数十进制表示由“0123456789”这九个数组......
  • Codeforces Round 855 (Div. 3)--D
    题意:给定一个字符串,删除其中连续两个字符,问有多少种不同字符串的情况#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"//开始时假设每个点都对答案有贡献,考虑什么时候没有贡献//假如字符串某处出现aba这种//删除ab或者ba最后都是......
  • 总结,从 766 开始(Div2 30)
    3.10A分块B 分数规划,以前没学过C推式子 3.11A推结论,先划分连续段,然后从一个长度>=k的连续段开始操作B推式子C平衡树套线段树(为了节省空间需要把内层线段树改成平衡树)或定期重构+树上差分+动态开点线段树,每个结点上有一棵线段树,每B次操作后向上合并 3.12......
  • CF R868 (div.2)
    A.A-characteristic题意:构造1|-1数列,使数组中两两相乘值为1的对数为k思路:显而易见与1|-1的出现顺序无关,总结规律易知当1数量为2时对数为一,3时对数为3(1+(3-1)),4时对数为6(3+(4-1)),-1同理,数据量较小,枚举个数即可1#include<bits/stdc++.h>23usingnamespacestd;4intans[1......
  • Codeforces 1804H - Code Lock(状压 dp)
    对于一种排列方案,答案显然等于相邻字符在环上对应的劣弧长度之和。然后其实你可能会想到很多状压/折半搜索方法,包括但不限于枚举一半的信息然后折半搜后一半,但稍加思考会发现这些方案都避不开记录元素之间的相对顺序,而但凡涉及到这一点,复杂度都是阶乘起步。因此我们只能另辟蹊......
  • Codeforces 1799H - Tree Cutting(树形 dp)
    思考的时候一直卡在不会在低于\(O(n)\)的时间内储存一个连通块的\(siz\)有关的信息,看了洛谷题解之后才发现我真是个小丑。树形DP。对于一条我们需要操作的边\((i,fa_i)\),我们将其分为保留子树和删除子树两种类型,对于删除子树,我们在判定其是否合法时候改为判定删除的连通块......