03 2020 档案
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 已知初始时n个营地的人数以及之后的变化情况,试在变化过程中计算某一区间营地的人数和。 (1≤n≤50000,每组数据最多有40000条命令) 思路: 树状数组入门题。 #include <
阅读全文
摘要:题目链接:http://poj.org/problem?id=2528 第一次写这么长的代码... 题意: 有一长为107的区间,给n个区间染色,问最后可以看到几种颜色。(1≤n≤104) 思路: 区间问题比较适合用线段树处理,因为区间较大,需要将端点离散化集中起来减小内存开支。 Tips: std
阅读全文
摘要:题目链接:http://poj.org/problem?id=2182 题意: 有一行牛身高从1到n,已知每个牛左面身高低于该牛的牛的个数,问这行牛的排列情况。(2≤n≤8000) 思路: 每次从后往前处理时从前往后找到余下数列的第pre[i]+1小元素。 Tips: poj不支持<bits/std
阅读全文
摘要:题目链接:https://codeforces.com/contest/1311 A. Add Odd or Subtract Even 小于差奇和大于差偶一次操作即可,其余两次,复杂度为$O_{(1)}$。 #include <bits/stdc++.h> using namespace std;
阅读全文
摘要:题目链接:https://codeforces.com/contest/1328 A. Divisibility Problem 签到题。 #include <bits/stdc++.h> using namespace std; typedef long long ll; void solve()
阅读全文
摘要:Codeforces Round #595 (Div. 3) A. Yet Another Dividing into Teams 相邻两个值个数和的最大值即为最少组数。 #include <bits/stdc++.h> using namespace std; void solve(){ int
阅读全文
摘要:Codeforces Round #621 (Div. 1 + Div. 2) A. Cow and Haybales 贪心,移到第一堆的代价即为与第一堆的距离。 #include <bits/stdc++.h> using namespace std; void solve(){ int n,d;
阅读全文
摘要:Codeforces Round #536 (Div. 2) A. Lunar New Year and Cross Counting 模拟,可以外加两行两列防止越界。 #include <bits/stdc++.h> using namespace std; int dir[4][2]={{-1,
阅读全文
摘要:Educational Codeforces Round 84 (Div. 2) 读题读题读题+脑筋急转弯 = =。 A. Sum of Odd Integers 奇奇为奇,奇偶为偶,所以n,k奇偶性要相同。 由求和公式得k个不同奇数组成的最小数为k2,所以n≥k2。 #include <bits/
阅读全文
摘要:Educational Codeforces Round 59 (Div. 2) A. Digits Sequence Dividing 题意:给一个整数串s,分成至少两份,大小依次严格递增。(1≤q≤300,2≤|s|≤300) 思路:分成两份,第一位分给第一份,余下分给第二份。 #include
阅读全文
摘要:Codeforces Round #535 (Div. 3) A. Two distinct points 题意:从两个关系任意的区间取两个不同的数。(q≤500,1≤l,r≤109) 思路:取两个不同的端点即可。 #include <bits/stdc++.h> using namespace s
阅读全文
摘要:牛客小白月赛23 A. 膜法记录 和我签订契约成为魔法少女吧! 题意:n行m列网格中分布着敌人,可以进行a次行blast和b次列blast,问能否全歼敌人 。(T≤105,n≤5,m≤105或T=1,n≤20,m≤105) 思路:n比较小,枚举每行是否选取即可。 #include <bits/std
阅读全文
摘要:Codeforces Round #534 (Div. 2) A. Splitting into digits 题意:用1~9种类尽量少的数字拆分给定正整数n(1≤n≤1000)。 思路:签到题。 #include <bits/stdc++.h> using namespace std; int m
阅读全文
摘要:题意: 取一字符串不相交的前缀和后缀(可为空)构成最长回文串。 思路: 先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀。 #include <bits/stdc++.h> using namespace std; string Manacher(const string &s){ s
阅读全文
摘要:题意: 取一字符串不相交的前缀和后缀(可为空)构成最长回文串。 思路: 先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀。 #include <bits/stdc++.h> using namespace std; bool ok(const string &s,int l,int r
阅读全文
摘要:题意: 给你 n 长全排列的一种情况,将其分为 k 份,取每份中的最大值相加,输出和的最大值和有多少种分法等于最大值。 思路: 取前 k 大值,储存下标,每两个 k 大值间有 vi+1 - vi 种分法,相乘即可。 #include <bits/stdc++.h> using namespace s
阅读全文
摘要:题意: 有数组 an,定义 xi 为 a 的前 i - 1 位的最大值(x0 = 0),定义 bi 为 ai - xi,给出数组 bn,还原数组 an。 思路: 因为 x0 = 0,所以 b0 = a0,之后维护最大值即可。 #include <bits/stdc++.h> using namesp
阅读全文
摘要:题意: 给你一个 n,输出一个 n 位不含 0 且不被任一位整除的正数。 思路: 构造 233 或 899。 #include <bits/stdc++.h> using namespace std; void solve(){ int n;cin>>n; if(n==1) cout<<"-1\n"
阅读全文
摘要:Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version) 题意: 你是一名建筑工程师,现给出 n 幢建筑的预计建设高度,你想建成峰状,如: 1 2 3 2 1 → 1 2 3 2 1 1 2 3 1 2 → 1 2 3 1 1 8 1
阅读全文
摘要:Codeforces Round #622 (Div. 2) B. Different Rules 题意: 你在参加一个比赛,最终按两场分赛的排名之和排名,每场分赛中不存在名次并列,给出参赛人数 n 和你两场分赛的排名 x, y,问你最终名次最小和最大可能是多少。 思路: 以8人为例: x + y
阅读全文
摘要:Codeforces Round #622 (Div. 2) A. Fast Food Restaurant 题意: 你是餐馆老板,虽然只会做三道菜,上菜时还有个怪癖:一位客人至少上一道菜,且一种菜最多上一次,所有客人菜单不能相同。给出三种菜的数量,问最多能接收多少客人。 思路: 一人一道 → 一人
阅读全文
摘要:题意: n 点 m 边有向图,给出行走路径,求行走途中到路径终点最短路变化次数的最小值和最大值 。 思路 : 逆向广搜,正向模拟。 #include <bits/stdc++.h> using namespace std; const int M=220000; vector<int> e1[M],
阅读全文
摘要:题意: 给你一个由小写字母组成的字符串,若串中两个相邻元素字典序中也相邻,移除较大字母,问最多能移除多少个字母。 思路: 从大到小依次枚举。 Tips: 注意下标的处理。 以小消大: #include <bits/stdc++.h> using namespace std; int main() {
阅读全文
摘要:题意: 已知 n 所城市(从 1 至 n 编号)及其美丽值,选取一条旅行路线,满足路线中两两城市美丽值之差等于编号之差,求所有旅行路线中美丽值的最大值。 思路: 美丽值与编号作差,差值为键,映射累加 。 #include <bits/stdc++.h> using namespace std; in
阅读全文
摘要:题意: n 道题,2 个答题者,已知二者的做题情况,你是受贿裁判,可以给每题指定分值(≥1),求甲乙分数(甲>乙)相差最小时最大分值的最小值。 思路: 统计只有甲或乙做出的题目数。 加一取下整判同余: #include <bits/stdc++.h> using namespace std; int
阅读全文
摘要:数据有些弱,Union函数不判不等也可以过。 题意: 依次给出 n 个人的兴趣,不同人兴趣相交、不同兴趣所属人员相交均属于同一集群,求形成的不相交集群个数及每个集群的人数。 思路: 枚举每个兴趣的人员,以序号最小者作为集群代表与其他成员合并,追加 cnt 数组记录每个集群的人数。 如题目输入: 1
阅读全文
摘要:N ≤ 104,输入如下数据如果没有路径压缩可能会超时。 10000 2 1 2 2 3 4 2 5 6 …… 2 9997 9998 2 9999 10000 2 9999 9997 …… 2 5 3 2 3 1 10000 10000 10000 …… 10000 10000 但事实上,两种写法
阅读全文
摘要:Tips: 数据范围较小时可把二维数组当做map<pair<int,int>,int>使用。 #include <bits/stdc++.h> using namespace std; const int M=110; int fri[M]; bool is_enemy[M][M]; int Fin
阅读全文
摘要:题意: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 思路: 输入和输出各构造一个结构体,利用并查集归并输入,枚举编号进行输出。 #include <bits/stdc++.h> using namespace std; const int M=110
阅读全文
摘要:题意: n x m 的网格,p 个玩家轮流BFS,给出每个玩家每次能遍历的最远距离和网格初始状态(可遍历点、障碍点、每个玩家的遍历起点(可多个)),问每个玩家最多能遍历多少点。 Tips: 以所有玩家无法再进行遍历而不是已遍历所有点为终止条件。 #include <bits/stdc++.h> us
阅读全文
摘要:题意: 长为 n,由 l ~ r 中的数组成,其和模 3 为 0 的数组数目。 思路: dp[ i ][ j ] 为长为 i,模 3 为 j 的数组数目。 #include <bits/stdc++.h> using namespace std; const int M=220000; const
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; int main() { int n,k;cin>>n>>k; string s;cin>>s; int ans[26]={0}; for(int i=0;i<n;i++){ int len=1; while
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; int main() { int n;cin>>n; int a[n];for(int &i:a) cin>>i; int ans_ave=0,ans_cost=INT_MAX; for(int i=1;i<
阅读全文
摘要:题意: 寻找异或后值为 u,相加后和为 v 的最短数组。 思路: 异或得 u ,则 v 至少应大于等于 u ,且多出来的部分可以等分为两份相消。 即初始数组为 u , (v-u)/2 , (v-u)/2,之后即为特判或判断是否可以合并。 #include <bits/stdc++.h> using
阅读全文
摘要:题意: 给有 n 个点的树的 n-1 条边从 0 到 n-2 编号,使得任意两点路径中未出现的最小数最小的方案。 思路: 先给所有度为 1 的点所在边编号,之后其他点可以随意编排。 #include <bits/stdc++.h> using namespace std; const int M=1
阅读全文
摘要:题意: 给你一个数组,可以像题目那样无限拼接,问递增子序列的最大长度(可不连续)。 思路: 序列的最大长度即为数组中不同元素的个数。 Tips: 一开始不知道back-to-back什么意思,看到题目立刻懂了2333。 #include <bits/stdc++.h> using namespace
阅读全文
摘要:题意: GCD(a,b) + LCM(a,b) = n,已知 n ,求 a,b。 思路: 设 gcd(a, b) = k, a = xk, b = yk , k + ab / k = n xy = n/k - 1 令 k = 1 , 则 xy = n - 1 令 x = 1 , 则 y = n -
阅读全文
摘要:题意: LCM(a, b) = X,求 max(a, b) 的最小值。 思路: a, b 只可能存在于 X 的因子中,枚举即可。 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll lcm(ll a,ll b)
阅读全文
摘要:题意: 一个长为n的序列,是否存在与原序列不同的连续子序列,其元素之和大于等于原序列。 思路: 从前、后分别累加,若出现非正和,除此累加序列外的子序列元素之和一定大于等于原序列。 #include <bits/stdc++.h> using namespace std; typedef long l
阅读全文
摘要:题意: 给出一个移动序列,可以无效化一些指令,问可以移动到多少不同位置。 思路: 第一印象是统计左右指令数目,后来发现左右指令数目和即字符串长度。 #include <bits/stdc++.h> using namespace std; int main() { int n;cin>>n; cou
阅读全文
摘要:GPLT L2-006 树的遍历(二叉树) GPLT L2-007 家庭房产(并查集) GPLT L2-010 排座位 (并查集) GPLT L2-012 关于堆的判断(二叉堆) GPLT L2-014 列车调度(二分,贪心) GPLT L2-024 部落 (并查集) GPTL L3-003 社交集
阅读全文
摘要:题意: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 思路: 后序遍历序列 = 左子树遍历序列 + 右子树遍历序列 + 根节点。 中序遍历序列 = 左子树遍历序列 + 根节点 + 右子树遍历序列。 找到根节点,再利用根节点计算新的后、中遍历序列端点
阅读全文
摘要:poj 1064 Cable master(二分) poj 1852 Ants(思维) poj 2182 Lost Cows(模拟/线段树) poj 2299 Ultra-QuickSort(归并排序/树状数组/线段树) poj 2528 Mayor's posters(线段树,离散化) poj 3
阅读全文
摘要:题意: 0到N的数轴上,每次可以选择移动到x-1,x+1,2*x,问从n移动到k的最少步数。 思路: 同时遍历三种可能并记忆化入队即可。 Tips: n大于等于k时最短步数为n-k。 在移动的过程中可能会越界、重复访问。 poj不支持<bits/stdc++.h>和基于范围的for循环。 #incl
阅读全文
摘要:题意: n 个点 n - 1 条边的树,问每个点所在所有子树中白黑点数目的最大差。 思路: 白点先由下至上汇集,后由上至下分并。 #include <bits/stdc++.h> using namespace std; const int M=220000; vector<vector<int>>
阅读全文
摘要:https://paste.ubuntu.com/ 选择语言类型与保留日期,可以为代码生成一个链接便于分享。
阅读全文
摘要:题意: 每天有 h 小时,有一序列 an,每次可以选择 ai 或 ai - 1 小时后睡觉,问从 0 次 0 时开始,最多在 l ~ r 时间段入睡多少次。 思路: 如果此时可达,计算此时可达的时间点及其是否位于 l ~ r 区间。 #include <bits/stdc++.h> using na
阅读全文
摘要:hdu 1166 敌兵布阵(树状数组) hdu2049 不容易系列之(4)——考新郎(组合,错排) hdu4460 Friend Chains(广度优先搜索)
阅读全文
摘要:题意: 有长为n的a,b两序列,问满足ai+aj>bi+bj(i<j)的i,j对数。 思路: 移项得:(ai-bi)+(aj-bj)>0,i<j即i!=j,用c序列保存所有ai-bi的值,排序,若左右数之和大于0,则右数与二数间的数之和都大于0,计入结果后移动右指针,否则移动左指针。 Tips: c
阅读全文
摘要:题意: 有一个每个单元标明移动方向的长为n的序列,每次移动不能超过距离k,问能够从0移动到n+1的k的最小值。 思路: k=最长连续L序列长度+1。 #include <bits/stdc++.h> using namespace std; void solve(){ string s;cin>>s
阅读全文
摘要:题意: 问一个数组中是否存在至少长为3的回文子数组(按下标排列,可不连续)。 思路: 找三个相同数或两个不连续的相同数。 #include <bits/stdc++.h> using namespace std; const int M=5500; void solve(){ int last[M]
阅读全文
摘要:题意 : 有n个高度,可以使任一高度加二任意次,问最终n个高度可否相同。 思路: 因为添加的2x1的方块不可旋转,只需考虑所有高度是否为同一奇偶性即可。 #include <bits/stdc++.h> using namespace std; void solve(){ int n;cin>>n;
阅读全文
摘要:题意: n 个数中 m 个数错排的情况个数。 思路: 先从 n 个数中选出 m 个,即 $C_n^m$, 再算出 m 个数的错排数,即 ${f_{\left( m \right)}}$。 错排: 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用f(n)表示,那么f(n-1)就表示
阅读全文
摘要:题意: 给你一个二分图,求左侧端点的所有可能子集中的点相连的右侧端点的权值的和的最大公因数。 题解: 若所有右侧端点均不在同一左侧子集中,则求所有权值的最大公因数即可 。 否则,将在相同左侧子集中的右侧权值合并,求合并权值与其余权值的最大公因数。 证明 : $gcd(a,a+b)=gcd(a,b),
阅读全文
摘要:题意: 求n个数中两两和的异或。 思路: 逐位考虑,第k位只需考虑0~k-1位,可通过&(2k+1-1)得到一组新数。 将新数排序,当两数和在[2k,2k+1)和[2k+1+2k,2k+2)之间时该位为1,又因为两数的最大和为2*(2k+1-1)=2k+2-2, 即当两数和在[2k,2k+1)和[2
阅读全文
摘要:逆元的几种求法(扩展欧几里得,费马小定理或欧拉定理,特例,打表等) 逆元的三种求法 (费马小定理,扩展欧几里得,递推求阶乘逆元)
阅读全文
摘要:题意: 从 m 个数中选 n - 1 个数组成先增后减的长为 n 的数组。 思路: 因为 n 个数中有两个数相同,所以每种情况实际上只有 n - 1 个不同的数——$c_m^{n - 1}$, 除去最大数,相同的数有 n - 2 种可能——${n-2}$, 最大数、相同的数排好后,剩余 n - 3
阅读全文
摘要:题意: 任意两点间最短路中的最长距离。 思路: BFS遍历每个点能到达的最远距离。 Tips: vector的clear要与resize联用。 #include <bits/stdc++.h> using namespace std; const int M=1100; int n,m; vecto
阅读全文

浙公网安备 33010602011771号