07 2020 档案
摘要:A.Captain Flint and Crew Recruitment 题意: 定义了一种近似素数,当一个数可以用两个素数的乘积表示时,称他为近似素数。 现在请你把正整数n用四个不同的正整数的和表示,其中至少三个是近似素数。 题解: 直接分解成三个最小的近似素数和另外一个随便什么数的和即可。 #i
阅读全文
摘要:题意 给出一个nm的无向图,有边权。 张三在起点s,目标是t。 点分成左点右点和中间点,到左点的时候必须用左手,到右点的时候必须用右手,中间点没有特殊要求。 张三每次切换左右手都要花费额外的时间,询问起点到终点的最短路。 题解 把每个点拆成两个点,左点拆成两个左点,右点拆成两个右点,中间点拆成一左一
阅读全文
摘要:题目大意: 给出个点,n为偶数,询问两个完全没有交集的匹配q和p。 一方面使得n个点两两互相匹配,一方面使得匹配的权值和最小 分析: 因为n是偶数,所以可以考虑将n个数分配到不同的长度为偶数的环中,对于排列q和排列p,只需要在偶环中交换一下位置就好。 但这个偶环的长度必须要大于2,因为如果长度为2,
阅读全文
摘要:题意: 每次操作可以输入一个颜色,然后所有这个颜色的点使相邻的点都变成这个颜色,最后输出每个点是什么颜色。 题解: 对每个节点开一个链表,存储与这个节点相邻的节点。 然后对于每次操作,把节点周围的节点全都变成相同颜色的节点,然后清空这些节点对应的链表,把链表接到父节点下。 #include<bits
阅读全文
摘要://对所有点建立凸包,建立完成后的凸包默认是顺时针的,问题就解决了。#include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; const double eps = 1e-1; const double pi = acos
阅读全文
摘要:题意: 用人话说就是,给一串序列,然后里面连续递减的子序列作为一个大小为子序列长度的物品,其他元素作为容量为1的单个物品,询问是否可能存在一些物品使得他们的容量之和恰好为n。(虽然我推导到这一步花了很久很久...) 题解: 就是背包一遍就行,考试的时候时间不够了写的乱七八糟。 #include<bi
阅读全文
摘要:题意: 每次翻转一段区间,询问翻转区间后整个序列的逆序对数量。 题解: 每次翻转区间,那么翻转区间的答案就是整个序列的原始答案减去这个区间里逆序对的数量加上顺序对的数量。 统计逆序对和顺序对用树状数组做。 #include<bits/stdc++.h> using namespace std; co
阅读全文
摘要:给出m种花,对于每一种花,购买第一束可以带来ai的开心值,之后买第二束、第三束会增加bi...你可以购买n种花,询问怎么设计购买方案,使得总开心值最大。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; type
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=105; const int mod=1e9+7; int n; struct matrix { ll a[maxn][maxn]; m
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3e5+100; const int mod=998244353; ll fpow (int x,int y) { ll ans=1;
阅读全文
摘要:题意: 定义一种特殊的加法,这种加法没有进位,其他与普通加法一样,比如16+16=212。 给出一个数,询问这个数可能被哪两个数用特殊加法构成,并且每次询问修改这个数数位上的一个数字,输出更新后的答案。 题解: 矩阵乘法优化dp 矩阵乘法可以用来加速线性递推式。 以斐波那契数列为例: f[n] =
阅读全文
摘要:/* *1380E.Merging Towers *给出半径为1~n的n个盘子和m个塔,要求每个塔上盘子的半径始终从底向上递减 *一次操作可以将一个塔上的任意个盘子移动到另一个塔的顶部。 *令某一情形下的复杂度为将所有盘子移动到同一个塔上所需的最小操作数。 *题目给出m-1次询问,每次询问时输出当前
阅读全文
摘要:/* *CF1380D.Berserk And Fireball *n个战士站成一排,分别有武力值ai。 *你有两种法术:火球和激怒。 *火球可以消耗x个法力,消灭连续k个战士。 *激怒可以消耗y个法力,选择相邻的两个战士,武力值大的会消灭武力值小的 *求最后留下的战士和数组b一样所需要的最小法力花
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; int t; int n; int a[maxn]; int b[maxn]; vector<int> g[maxn]; int visit[maxn]; vec
阅读全文
摘要:题意: 给出一棵树,每次可以剪掉同一顶点的k个叶子,询问最多能剪几次。 题解: 如果k是1,那么答案就是n-1。 然后开一个队列,每次把叶子数大于k的叶子入队,取出队头的时候更新叶子数。全学jiangly的。 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:A.TPM 给出三个元素x,y,z,x表示max(a,b),y表示max(a,c),z表示max(b,c),请输出xyz。 推导后发现较大的两个元素必须一样,否则无解,然后输出两遍较小的元素,一遍较大的元素即可。 #include<bits/stdc++.h> using namespace std
阅读全文
摘要:A.MOC 给出两个时间,算中位数的时间。 #include<bits/stdc++.h> using namespace std; int h1,m1,h2,m2; int main () { scanf("%d:%d",&h1,&m1); scanf("%d:%d",&h2,&m2); prin
阅读全文
摘要:题意: 给出平面上的一些点,询问这些点构成的三角形个数。 题解: 对点集构造出凸包,然后答案就是在凸包上的点数-2+不在凸包上的点数*3。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; const doubl
阅读全文
摘要:题目背景 第二次世界大战期间,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的两名飞行员,其中一名是英国飞行员,另一名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。 题目描述 一共有 nn 个飞行员
阅读全文
摘要:题目描述 由于人类对自然资源的消耗,人们意识到大约在 2300 年之后,地球就不能再居住了。于是在月球上建立了新的绿地,以便在需要时移民。令人意想不到的是,2177 年冬由于未知的原因,地球环境发生了连锁崩溃,人类必须在最短的时间内迁往月球。 现有 nn 个太空站位于地球与月球之间,且有 mm 艘公
阅读全文
摘要:1144A.DS 给出一个字符串,只可能包含小写字母,要求不能有重复的字符和里面的字母是一串连续的数字(bcdef...),输出Yes或No。 对字符串排序即可。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100;
阅读全文
摘要:题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流。这些机器用如下的方式发送电邮:如果存在一个由 cc 台电脑组成的序列a_1,a_2,\cdots ,a_ca1,a2,⋯,ac,且 a_1a1 与 a_2a2 相连,a_2a2 与 a_3a3
阅读全文
摘要:题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同。假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送到快洗部,洗一块需 m 天,其费用为 f 分;或者送到慢洗部,洗一块需 nn 天(n>mn>m),其
阅读全文
摘要:题目背景 滚粗了的 HansBug 在收拾旧语文书,然而他发现了什么奇妙的东西。 题目描述 蒟蒻 HansBug 在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册。已知一个完整的书册均应该包含且仅包含一本书、一本练
阅读全文
摘要:题意: 给出一个序列,每次询问给出一个区间,请你先把区间里的数排序并去重,然后计算出他们乘上斐波那契数列对应的项的和。 题解: 院赛的时候还不会莫队,交了学费。(虽然会莫队也大概率做不出) 首先思考题目的性质,每次给出一个区间,把区间里的数排序并去重,然后计算答案,这暴力肯定是不行的,时间复杂度不可
阅读全文
摘要:题意: 给出一串序列,每次询问区间内的有多少个数的出现数量和指定的数互质。 题解: 莫队暴力的时间复杂度好像没比暴力优化多少... #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; int a[maxn]; in
阅读全文
摘要:题意: 给出一个矩阵,可以对里面的元素做增加操作,询问能否使得每个元素的值恰好等于周围非零元素之和。 题解: 很简单的一道题,从上到下遍历整个矩阵,把每个元素的值增加为周围元素之和即可。不知道为什么比赛的时候死活想不到。。。 #include<bits/stdc++.h> using namespa
阅读全文