18thZJCPC
A - League of Legends格莱美喜欢玩世界著名的英雄联盟游戏。在最新版本中,有一个特殊的规则供玩家选择玩。根据此规则, 10 玩家将被分为红队和蓝队。每支队伍由 5 名玩家组成,每个玩家都有一个初始生命值。如果一支队伍中的所有 5 玩家均没有正HP值,则该队伍将输掉这场比赛。每回合,队伍可以选择一名球员并减少他的生命值 1。蓝队首先开始。现在格莱美想知道两支球队是否都按照最优策略比赛,哪支球队会赢得比赛。枚举,比大小,平局蓝队赢
C - Cube给你三维空间中的八个点,请检查它们是否可以组成一个立方体。立方体是正六面体,由六个正方形面包围,每个顶点有三个相交点。T≤100组数据。两两枚举点对之间的距离,根据对角线,体对角线,面对角线,棱的长度和数量关系判断。
123456789101112131415161718192021222324252627282930313233343536373839404142#include <bits/stdc++.h>using namespace std;int t,x[8],y[8],z[8];int main() ...
17thZJCPC
题面:
K - Killing the Brute-force 给定标程和暴力在 n = 1, 2, . . . , m 时的运行时间,找到最小 的 n 使得三倍标程时限可以卡掉暴力 。m很小没什么好讲的就一个遍历找到最小的即可
1234567891011void solve(){ int m; cin>>m; vector<int> a(m),b(m); for(int i = 0;i<m;++i) cin>>a[i]; for(int i = 0;i<m;++i) cin>>b[i]; for(int i = 0;i<m;++i) if(a[i]*3<b[i]) return cout<<i + 1<<endl,void(); cout<<-1<<endl;}
A - AD 2020 给一个日期的区间,问有多少个日期含有子串“202”的。2000.01.01 ≤ 日期 ≤ 9999.12.31参考题解给的是直接 ...
2024年度第五届全国大学生算法设计与编程挑战赛(春季赛)
H 密码是多少?注意字符串长度都是7样例1
1asdfghj
110210310410697115100
样例2
1qazxcdf
11209910010211397122
按题意模拟即可
1234567void solve() { string s; cin>>s; string t = s.substr(3) + s.substr(0,3); for(auto c : t) cout<<(int)c;}
A 送个分吧样例
12aba4
1b
对于给定的样例,前 4 简单的套题分别为:a、ab、aba、b,故答案为 b。对于 100%的数据,1≤∣_s_∣≤5000,1≤_k_≤5,保证答案存在。
就是在问你字典序第k小的子串s的范围决定了这道题最多只能是$O(n^2)$的复杂度。可以这样考虑,比如对于样例而言,前几个子串一定是a开头的,可以是a,ab,aba。那么猜想前面几个一定是字符串中出现的字典序最小的那个字符的某个后缀,比如最小的是a,第二小的是ab(第一个a后面长度为2的后缀),第三小的是aba(第一个a后面长度为3的后缀)。且 ...
2023JSCPC
这个也是当年的湖南全国邀请赛
I Elevator 电梯里有 n 个人(你是其中一个),这些人想去 m 个楼层, 每个人只想去一个楼层。到达一个楼层,所有想去这个楼层 的人都会下电梯。问在你想去的楼层最多有多少人下电梯。
vp的时候题目根本没读懂,感觉就是输出 n − (m − 1) , 交了一发就过了……
J Similarity (Easy Version) 给定 n 个串,求两两之间最长公共子串的最大值。多测T不超过15,字符串长度不超过50,个数也不超过50。并保证n的总和不会超过300。直接暴力匹配即可。
12345678910111213141516171819202122232425262728map<string,int>f;void solve(){ int n; cin>>n; per(i,1,n){ string s; cin>>s; map<string,bool>vis; per(j,0,s.length()-1) ...
2022SHCPC
N Nine Is Greater Than Ten按字典序比较字符串
12345678910void solve(){ string a,b; cin>>a>>b; int res = a.compare(b); if(res == 0){ cout<<a<<'='<<b<<endl; }else if(res < 0){ cout<<a<<'<'<<b<<endl; }else cout<<a<<'>'<<b<<endl;}
G Gua!题意:给你四个参数B R D S,表示枪的一发子弹造成的最大伤害,射速为每分钟射击R次,玩家一共造成了D点伤害,用时S秒,问你这个人是不是挂。不是很懂为什么签到题出这么细节的模拟……vp爆wa心态都炸了三个细节,第一个是由于时间是从0开始算的, ...
整除分块
好像只能用来解决一个类似于$\sum^n_{i = 1}\left \lfloor \frac{n}{i} \right \rfloor$这样的整数求和问题,只要是带这个的,那么复杂度最低就能降到根号级别的。可以发现,比如n = 8这个求和的每一项是这样的
i
1
2
3
4
5
6
7
8
8/i
8
4
2
2
1
1
1
1
那么就可以优化,把结果一样的放在一起分块处理。分的块大概有$2\sqrt{n}$个,因为当i小于等于$\sqrt{n}$时,取值一共有$\sqrt{n}$种,大于也是一样的
12345for (int l = 1; l <= n; ++l) { int d = n / l, r = n/d; ans += (r-l+1)*d; l = r;}
l和r表示这个区间内的数x除n都是d,即n/x = d,累加即可,复杂度是根号的。
[CQOI2007] 余数求和给出正整数 $n$ 和 $k$,请计算$G(n, k) = \sum_{i = 1}^n k \bmod i$其中 $k\bmod i$ 表示 $k$ ...
13thSDCPC
vp打到后面打不动了,好在压线银牌。
[SDCPC2023] Matching给定长度为 $n$ 的整数序列 $a_1, a_2, \cdots, a_n$,我们将从该序列中构造出一张无向图 $G$。具体来说,对于所有 $1 \le i < j \le n$,若 $i - j = a_i - a_j$,则 $G$ 中将存在一条连接节点 $i$ 与 $j$ 的无向边,其边权为 $(a_i + a_j)$。求 $G$ 的一个匹配,使得该匹配中所有边的边权之和最大,并输出最大边权之和。请回忆:无向图的匹配,指的是从该无向图中选出一些边,使得任意两条边都没有公共的节点。特别地,不选任何边也是一个匹配。
考了个常见的转化:$i - j = a_i - a_j$改为$i - a_i = j - a_j$然后把权值一样的放在一起就行。可以开一个map<int,vector<int>>来存储,并且注意到后面压进去的一定是a比较大的,所以从后往前遍历如果两两配对就能找到最大的。
123456789101112131415void solve() { int n; ...
【LGR-174-Div.2】T2、T3
T2 陌路寻诗礼题目描述帆巨所在的家乡的地图是一张有 $n$ 个节点 $m$ 条有向道路的有向图,每个节点都是一个城市,而帆巨所在的城市是 $1$ 号城市,并且 $1$ 号城市总是可以通过若干道路到达其他任何城市。第 $i$ 条道路从 $x_i$ 号城市出发到达 $y_i$ 号城市,长度为 $z_i$。帆帆现在要从他的 $1$ 号城市前往各个城市面基。精通 spfa 算法的帆帆在面基的过程中自然会按照长度和最短的路径去其他城市。但是帆帆有选择困难症,他希望从 $1$ 号城市到达每一座城市的最短路径都是唯一的,所以他决定施加魔法,改变所有道路的长度,具体地:帆巨施加魔法后,对于每一条道路的长度,都可以 独立地 将其变成一个 $[1,k]$ 范围内的整数,其中 $k$ 是帆巨的魔法等级。但帆巨所在的世界的地图和他的魔法等级一直在变,总共会变 $T$ 次,所以他希望你对 $T$ 次询问都给出一种构造方法使得帆巨不会纠结或者报告无解。
输入格式第一行一个整数 $T$ 表示数据组数。接下来 $T$ 组,每组先是三个整数 $n,m,k$,接着 $m$ 行描述有向道路 $(x_i,y_i)$。不保证 ...
ICPC2023 HangZhou R 签到+铜牌题
The 2nd Universal Cup. Stage 22: Hangzhou结束了,所以可以把题解扔出来了。
题面:
V-Diagram长度为 $n$ 的 $1$ -索引整数序列 $a$ 是V-图,如果 $n \ge 3$ 且存在满足以下条件的索引 $i$ ( $1< i < n$ ):
$a_j > a_{j + 1}$ 用于 $1 \le j < i$
$a_j > a_{j - 1}$ 为 $i <j \le n$ 。
给定V-图 $a$ ,找出具有最大可能平均值的V-图 $b$ ,使得 $b$ 是 $a$ 的连续子序列。序列的连续子序列可以通过从序列的开头和结尾移除一些(可能为零)元素来获得。签到题,题解说二分答案也行,但我做的时候用的是贪心。因为对于一个V图来讲,首先一定要包含最小的那个点,然后就是向左右两边扩展取最大。要求在现行复杂度内通过,所以不能直接暴力解,那么观察性质,由于保证是V图所以这个序列对应的图像的每一段的斜率都大于1,换句话说就是i每次改变1(增加一个数),纵坐标ai变化量至少大于 ...
01字典树
用于接近线性的查询异或相关的问题,如异或前缀和,和别的数的最大异或和等。01字典树是按照二进制下每一位是0还是1将一些数进行分类,每一个结点的左孩子表示当前这一位是0的所有数,右孩子表示当前这一位是1的所有数,这样递归的分下去总可以把所有的数分类完。
如要求每次线性的回答一个数和一个数组中的所有元素的最大异或值,数组范围是2e5:将数组中的所有数类似于哈夫曼树一样·按位建成一棵树,如3(0011),8(1000),5(0101)那么就可以画出一个这样的树:
12345678910 root / \ 0 1 / \ / 0 1 0 \ / / 1 0 0 \ \ / 1 1 0 (3)(5)(8)
那么比如查询这些数和6(0110)异或后的最大值,想要异或完最大,那么就要求每一位都不一样,因为位数越高那么占得权值就越大,所以从前往后贪心,如果树在这个位上有不一样的分支那就往这条分支上走。6的第一位是0,那么要找第一位是1的,查询的时候要选右边的节点,所 ...