AtCoder ABC 140E Second Sum】的更多相关文章

题目链接:https://atcoder.jp/contests/abc140/tasks/abc140_e 题目大意 给定一个 1~N 的排列 P. 定义$X_{L, R}$的值为$P_L, P_{L+1}, \ldots, P_R$中第二大的数的值. 求$\displaystyle \sum_{L=1}^{N-1} \sum_{R=L+1}^{N} X_{L,R}$. 分析 这是一道求贡献的题, 也就是要算出每个数 x 作为第二大的时候对答案的贡献. 为了计算 x 对答案的贡献, 我们需要知…
AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求得到 T-shirt 的概率 一个 if 即可 B Minimize Ordering 给一个字符串 \(S\) ,求 \(S\) 排列出的字典序最小的字符串 一个排序 C 1111gal password 给 \(n\) ,求出满足条件的 \(n\) 位数 \(X\) 个数 \(\;mod\;99…
ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Solution 没什么好说的,代码学过编程就应该都会打. B 题目大意 有一排树,高度分别为1,1+2,1+2+3,1+2+3+4....1+2+3+...+999.现在下雪了,给出露在外面的两棵相邻的树的高度,问你雪的厚度. Solution 明显,我们把这俩数减一下就可以得出他们本来的位置,然后直接…
Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; char ch[50]; int main() { scanf("%s",ch+1); if(ch[1] == 'S') puts("Cloudy…
Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓扑序,每次从入度为0的点进行拓扑排序,并把答案加1,删去所有出度,重复该操作. 如果形成环的话就无解. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…
Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long LL n,ans; int main() { scanf("%lld",&n); ans =…
Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long const int N = 1e5 + 100; in…
Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long #define N 100010 LL a,b,an…
Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 10 char s1[N],s2[N]; int ans; int main() { scanf("%s…
atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 算出交换最少次数,判断是否为偶数. E - King Bombee \(n\) 点 \(m\) 边的简单无向图,给定 \(K,S,T\) 和 \(X\) 求满足以下条件的路径数 \(\;mod\;998244353\) 路径 \(A\) 以长度为 \(K\) ,以 \(S\) 开使,\(T\) 结…
AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都没写出来 确实是思维上的缺陷,毕竟 atc 全程都是紧张的 等下一场吧.. 前 4 题较易,不再赘述. E- Prefix Equality 长度为 \(n\) 的数组 \(A,B\) ,每次询问 \(A\) 的前 \(x\) 项和 \(B\) 的前 \(y\) 项组成的集合是否相同 即排序.去重后…
题目链接:https://atcoder.jp/contests/abc129/tasks/abc129_e 题目大意 给定一个二进制表示的数 L,问有多少对自然数 (a, b) 满足 $a + b \leq L 且 a + b = a \oplus b $. 分析 由于异或是无进位相加,所以 $a + b = a \oplus b $ 等价于 a 和 b 的每一位对应二进制位都不会是两个 1. 设 L 有 n 个 1.按 L 中的顺序编号为 n~1. 设 L(i) 为编号为 i 的 1 到 L…
传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二进制中某一位\(1\)的个数出现了奇数次,那么无论怎么分,都会有一组中这位为\(1\):对于出现偶数次的位,两组中该位都可以有\(1\),或者都没有\(1\). 那么我们只需要贪心地插入二进制\(1\)的个数为偶数的那些位就行了,显然这样能使得最终答案最大. 下面口胡一下为什么不能直接用线性基来搞:…
题目链接:https://abc042.contest.atcoder.jp/tasks/arc058_b 题目大意: 给定一个 H * W 的矩阵,其中左下角 A * B 区域是禁区,要求在不踏入禁区的前提下,从左上角走到右下角一共有多少种走法? 分析: 设 D 为往下,R为往左. 这里举个 H = 10,W = 7,A = 3,B = 4的例子: 首先不管怎么走,路线都是要跨越蓝色边界线的,这里我们只讨论从 A 跨越到 B 的情况,其余情况同理. 在这种情况下,总的路数就是所有从 S 走到…
C - Otoshidama 传送门:https://abc085.contest.atcoder.jp/tasks/abc085_c 有面值为10000.5000.1000(YEN)的纸币.试用N张纸币,组成金额为Y(YEN)的钱. 依次考虑: 1.只用1KYEN的纸币: 2.用1KYEN和5KYEN的纸币: 3.用1KYEN.5KYEN和10KYEN的纸币. 参考程序如下: #include <stdio.h> int min(int a, int b) { return a < b…
传送门:http://abc070.contest.atcoder.jp/tasks/abc070_d 本题是一个图论问题——树(Tree). 有一棵结点数目为n的无向树.第i条边连接结点ai与bi,权值为ci.给出q次查询,以及一个整数k(1≤k≤n),第j次查询给出两个整数xj,yj(1≤xj,yj≤n),求解结点xj和yj通过结点k的最短路径长度. 树上的路径问题,可以通过DFS解决.以下代码片段计算结点间的路径长度dis. void dfs(int v) { vis[v] = true;…
传送门:http://abc076.contest.atcoder.jp/tasks/abc076_d 本题是一个运动学问题——匀变速运动. 一个质点,从静止开始运动.按照速度限制,可将运动划分成n个阶段,第i个阶段的时间为ti s,速度上限为vi m/s.已知这个质点的加速度大小只取0或±1m/s2.以及,质点在最初和最终的时刻速度为0.求质点的最大位移. 以下变量均采用国际单位制. 对于运动某一个阶段(例如第i个阶段),可以分成三个子阶段:匀加速运动.匀速运动和匀减速运动.记三个子阶段的时间…
题目链接:https://atcoder.jp/contests/abc140/tasks/abc140_d 题目大意 有一对 N 个人, 用字符串 S 表示, S[i] 如果等于 'L' 说明这个人面朝左, 如果等于 'R' 说明这个人面朝右, 如果一个人朝向的方向有另一个人的后背, 这个人就提供 1 点满意度, 现在你最多能进行如下操作 K 次(也可不执行): 将[L, R]区间内的人区间整体旋转180度, 当然他们的朝向也会随之改变. 问所能得到的最大满意度为多少? 分析 贪心, 每次旋转…
题目链接:https://atcoder.jp/contests/abc131/tasks/abc131_f 转自博客:https://blog.csdn.net/qq_37656398/article/details/93496476 题目大意 给定 N 个点,若有如下图所示的三个点(黑点)就可以构造岀一个新的点(红点).求可构造的点的最多的个数. 分析 首先,如果两个点的某一个坐标相等,我们定义这两个点是联通的. 其次,如果红点能够被构造,它必然是由处于同一连通块中的点所构造的. 于是,只要…
题目链接:https://atcoder.jp/contests/abc132/tasks/abc132_f 题目大意 分析 代码如下…
题目链接:https://atcoder.jp/contests/abc132/tasks/abc132_e 题目大意 给定一张 N 个点 M 条边无自环无重边的一张有向图,求从起点 S 能否三步三步跳到终点 T,输出跳的次数. 分析 是一个步长为 3 的 BFS. 代码如下 #include <bits/stdc++.h> using namespace std; #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0…
题目链接:https://atcoder.jp/contests/abc131/tasks/abc131_e 题目大意 给定 N 和 K,要求构造有 N 个点,恰有 K 对点,它们的最短距离为 2 的图. 分析 用笔画画就能发现,把 1 号点放中间,其余点连 1 号点就能产生最多对最短距离为 2 的点对. 然后除 1 号点之外的点每连一条线,数目就减少 1. 代码如下 #include <bits/stdc++.h> using namespace std; #define INIT() io…
题目链接:https://atcoder.jp/contests/abc130/tasks/abc130_f 题目大意 给定地图上 N 个点的坐标和移动方向,它们会以每秒 1 个单位的速度移动,设 Ans(t) 为在 t 时刻,$(x_{max} - x_{min}) * (y_{max} - y_{min})$的值,求 Ans(t) 的最小值.(最小值可能不是一个整数) 分析 稍加思考可以发现,不是所有点的所有坐标都对答案有影响,很多点完全可以忽略不计,下面以 Y 坐标为例,讨论影响$(y_{…
题目链接:https://atcoder.jp/contests/abc128/tasks/abc128_f 题目大意 给定长度为 N 的序列$s_0, s_1, \dots, s_{N-1}$,现在要选取两个正整数 A 和 B,从$s_0$起跳,按照先往前跳 A 步,再往后跳 B 步的规则正好跳到$s_{N-1}$,每跳到一个地方,其所对应的元素值将会计入你的总分.有如下限制: 不能跳出序列. 同一个地方只能被跳到一次. 请选取适当的 A 和 B,使得得分最大. 分析 设跳 B 步这个行为进行…
题目链接:https://atcoder.jp/contests/abc128/tasks/abc128_e 题目大意 在一条路上(这条路可以看做坐标轴 x 轴从 0 开始方向为正无穷方向的射线),有 N 个道路工程,每个道路工程用三元组$(S_i, T_i, X_i)$表示,意思是第 i 个道路工程在$S_i$时间点开始,在$T_i$时间点完全结束(持续时间区间不包括$T_i$),施工地点是在 x 轴上的$X_i$位置.在同一地点的施工工程,他们的时间不会重叠.现在有 Q 个人依次从原点以一米…
题目链接:https://atcoder.jp/contests/abc128/tasks/abc128_d 题目大意 有一个双端队列,里面有 N 个整数,你可以进行如下4种操作: A:从队头那一个到手里. B:从队尾拿一个到手里. C:把手中任意一个数放到队头(这个操作等价于扔掉,我们完全可以执行完全部的AB,在执行CD). D:把手中任意一个数放到队尾. 先给定 K,要求操作数量不大于 K 次,求你手中所有数和能达到的最大值. 分析 区间DP,见注释. 代码如下 #include <bits…
题目链接:https://atcoder.jp/contests/abc127/tasks/abc127_f 题目大意 初始状态下$f(x) = 0$,现在有 2 种模式的询问,第一种以“1 a b”的形式,需要进行操作$f(x) = f(x) + |x - a| + b$:第二种以“2”的形式,求使得 f(x) 取得最小值的 x 取值和 f(x) 值,如果有多个 x,输出任意一个即可. 分析 考虑第一种询问已经出现了 k 次,现在遇到第二种询问.此时$f(x) = \sum_{i = 1}^k…
题目链接:https://atcoder.jp/contests/abc127/tasks/abc127_e 题目大意 给定一个$N*M$的棋盘,二元组$(x, y),1 \leq x \leq N,1 \leq y \leq M$,表示棋盘上的某一个位置,现在要在棋盘上选 K 个不同的位置,记为$(x_1, y_1), (x_2, y_2), \dots, (x_K, y_K)$,选择的相应代价为$\sum_{i=1}^{K-1} \sum_{j=i+1}^K (|x_i - x_j| + |…
题目链接:https://atcoder.jp/contests/abc126/tasks/abc126_f 题目大意 给定两个整数 M 和 K ,用小于 2M 的的所有自然数,每个两个,用这些数排成一个长度为 2M+1 的序列,使得序列满足以下条件: 每个自然数只能用 2 次. 设序列为 a,$\forall_{i < j}\ 满足a[i] == a[j]$有 a[i] xor a[i + 1] xor……xor a[j] == K. 问这个序列是否存在,存在则输出任意一个,不存在输出 -1.…
题目链接:https://atcoder.jp/contests/abc130/tasks/abc130_e 题目大意 给定一个长度为 N 的序列 S 和一个长度为 M 的序列 T,问 S 和 T 中有多少对不相同的公共子序列? PS:两个子序列对只有同时满足内容完全相同和在 S 和 T 中的位置完全相同才算相同. 分析 设 S(i) 表示 S 序列的前 i 项,设 T(j) 表示 T 序列的前 j 项,dp[i][j] 表示 S(i) 和 T(j) 中有多少对不相同的公共子序列. 首先 dp[…