- 博客(34)
- 收藏
- 关注
原创 第十九届同济大学程序设计竞赛暨高校网络友谊赛 G-归零(可持久化权值线段树)
所以问题转为求小于区间小于等于k/2的数的和+区间大于k/2+1的数的个数*k-简单分析可得,小于k/2的数,减为0,大于k/2+1的数,加至k。区间大于k/2+1的数的负数的和。不使用build则无需离散化。
2022-09-29 20:48:43
315
原创 Codeforces Round #768 (Div. 2) C
C. And Matching题意:给出一个n和k,要求对由0,1,2,… ,n-1组成的数组,分成n/2对,使每一对两个数的相与的和为k,n为2的次幂,要求给出一种划分方案。思路:对于a&b = 0,我们可以定义f(a) = b,至于如何构造,我们发现a=101,b=010,a^b = 111,那么可以由a^(n-1)得到b,因为n是2的次幂,所以n-1就是范围内最长的,由此我们可以构造出k=0的情况,即0&(n-1),1&(n-2),2&(n-3)…,交换其中
2022-09-28 21:09:15
85
原创 最大连续子序列
实际上就是和最大的子串思路:当添加第i个元素时,判断前面的和是否大于0,如果小于0,则左边界移到i+1i+1i+1,大于0就可以直接添上。
2022-06-20 15:31:43
74
原创 Codeforces Round #790 (Div. 4)
题意:给一个字符串,看前三位之和是否和后三位相等。代码:B. Equal Candies题意:有n个糖果,每个糖果重量不同,要使大家分得糖果重量相同,每人分一个,你可以减少每个糖果任意重量,问最少减少多少。思路:直接所有糖果都减少至最小值。C. Most Similar Words题意:每组给n个字符串,任意选两个,使其中一个转化为另一个,求最小转化步数,每个字母可以转化为相邻的字母,花费1.思路:排序后选最小和次小,最大和次大,两者中取最小值。D. X-Sum题意:给一个棋盘,放置一个
2022-06-07 22:05:29
651
原创 AtCoder Beginner Contest 250 A~E
AtCoder Beginner Contest 250 A~EA - Adjacent Squares题意:给出一个行列为H,W的矩阵,再给一个坐标,问周围有多少个正方形。// Problem: C - Adjacent Swaps// Contest: AtCoder - AtCoder Beginner Contest 250// URL: https://atcoder.jp/contests/abc250/tasks/abc250_c// Memory Limit: 1024 MB/
2022-05-09 17:57:53
610
原创 Codeforces Round #768 (Div. 2) C
C. And Matching题意:给出一个n和k,要求对由0,1,2,… ,n-1组成的数组,分成n/2对,使每一对两个数的相与的和为k,n为2的次幂,要求给出一种划分方案。思路:对于a&b = 0,我们可以定义f(a) = b,至于如何构造,我们发现a=101,b=010,a^b = 111,那么可以由a^(n-1)得到b,因为n是2的次幂,所以n-1就是范围内最长的,由此我们可以构造出k=0的情况,即0&(n-1),1&(n-2),2&(n-3)…,交换其中
2022-04-29 15:11:10
164
原创 Codeforces Round #779 (Div. 2) D1
D1. 388535 (Easy Version)题意:对一个由l,r的一个全排列数组,对于数组中的每一个数异或上x。给出异或之后的数组,要求求出x。思路:首先来看一下0~7的二进制数000 0 我们对于每一位进行查看(垂直): 对于第0位: 对于第1位 001 1 1 0010 2 0 0 011 3
2022-04-29 15:09:50
95
原创 Educational Codeforces Round 126 (Rated for Div. 2)
A. Array Balancing题意:给出a和b两个数组,可以对相同位置上的a和b进行交换,求a和b数组中所有相邻两个数的绝对值之和的最小值。思路:使较小的在一边,较大的在一边。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 30;int a[N],b[N];int main(){ int t; cin>>t; while(t--) { int
2022-04-29 15:08:26
175
原创 AcWing dp 最长上升子序列模型学习
AcWing 895. 最长上升子序列题意:给定一个长度为 NNN 的数列,求数值严格单调递增的子序列的长度最长是多少。1≤N≤10001 \leq N\leq 10001≤N≤1000思路:状态表达:f[i]f[i]f[i] 表示从 1 开始以 iii 为结尾的上升子序列最大长度状态方程:f[i] = max(f[i] , f[j] + 1)图片来自AcWing 彩色铅笔大佬集合划分#include<bits/stdc++.h>using namespace std;co
2022-04-22 19:58:23
122
原创 PTA 天体地图 多条最短路径中的选择
PTA 天体地图题意:n个点,m条边,给出两点的距离和通行时间,要求求出起点和终点的最短时间路径和最短距离路径,如果多条最短路径时间一样,求出在此条件下的路径最短,数据保证唯一,如果多条最短路径距离一样,求出在此条件下的经过点最少的路径,数据保证唯一。思路:两次dijkstradijkstradijkstra或者spfaspfaspfa,不同一般的最短路,开两个额外的数组记录距离和点数,在时间或距离相等时再次比较一下即可。#include<bits/stdc++.h>#define io
2022-03-28 19:08:03
658
原创 CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes) A~E
A. Good Pairs题意:给一个数组,要求在其中选出两个数,满足以下公式∣ai−ak∣+∣ak−aj∣=∣ai−aj∣|a_i - a_k| + |a_k - a_j| = |a_i - a_j|∣ai−ak∣+∣ak−aj∣=∣ai−aj∣i,j为选出的数的下标,对于所以的1≤k≤n1\le k\le n1≤k≤n都满足,输出两数下标。思路:刚开始猜了一下选最大和最小的,答案也确实如此,要想左边的式子等于右边的,那么就要把k消掉,很明显把绝对值符号去掉,两个aka_kak可
2022-03-26 19:58:01
476
原创 Educational Codeforces Round 125 (Rated for Div. 2) C题
C. Bracket Sequence Deletion题目连接题意:给一个长度为n只由 ( 和 ) 组成的字符串,每次删除一个长度最短的前缀串(从第一个开始连续串),删除需要满足以下要求1,是一个合法的括号串,即(())() , () , (()(()))2,满足回文串且长度大于等于2 , 即(( , )) , )(()直到不能删除为止,输出删除次数和剩下的字符个数思路:起初想的暴力做法,毫无疑问t掉了,那么是否有一些性质存在呢,既然要求每次删除的要求长度最短,那么最短的有四种情况() ,
2022-03-23 22:34:50
100
原创 AcWing 背包学习
01背包问题题目:解题分析:对于每个物品不断做最优决策,每个物品面临选与不选,当前空间j < v[i] 时,该件物品无法选择,只能从从上一层继承f[i][j] = f[i-1][j]如果空间足够,则有选与不选选:f[i][j] = f[i-1][j-v[i]]+w[i]不选:f[i][j] = f[i-1][j]两者取最大值,即f[i][j] = max(f[i-1][j] , f[i-1][j-v[i]] + w[i])二维代码#include<bits/stdc++.h
2022-03-11 19:02:47
334
原创 Codeforces Round #775 (Div. 2)A~D
A. Game题意:由一个0和1组成的一维数组,起点1和终点n是1,表示陆地,即终点是
2022-03-08 17:17:03
849
5
原创 Acwing 并查集学习记录
Acwing 1250. 格子游戏题意:输入:矩阵长宽为n,m次操作输出:输出一行:在第几步的时候结束。假如 m 步之后也没有结束,则输出一行“draw”。思路:当形成闭环的时候游戏结束,所以添加最后一边时,应满足该边的两端在同一个联通块中,所以可用并查集,判断两点的祖宗节点是否相同。当起始点为(0,0)时,可通过公式x∗n+yx*n+yx∗n+y 将二维映射到一维。#include<bits/stdc++.h>using namespace std;const int N
2022-01-27 17:26:41
474
原创 Educational Codeforces Round 121 (Div. 2) A~C
A - Equidistant Letters题意:给一个字符串,对于出现两次的字母,要求输出的位置间隔相等思路:对于两次以上的字母,记录,先输出一遍再输出一遍,接着输出其他的#include<bits/stdc++.h>#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);using namespace std;typedef long long ll;const int N = 1e5 + 10;int
2022-01-23 22:09:00
2625
原创 Codeforces Round #767 (Div. 2) A~D
A Download More RAM题意:升级内存,给定初始内存,使用给定的n个软件升级内存,第i个软件启动要求至少a内存,可以永久增加b内存,求最大内存思路:排序贪心即可#include<bits/stdc++.h>#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);using namespace std;typedef long long ll;const int N = 100 + 10;int t
2022-01-23 15:40:57
678
原创 Codeforces Round #765 (Div. 2) A~B
A. Ancient Civilization题意:给你n个二进制下长度小于k的数,让你在0到2k−12^k-12k−1求一个数,使它和其余数的二进制上的不同的个数最少思路:暴力做法即可,将所有数转化为二进制,统计每一位上最多的0或1,即为答案二进制的结果#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;ll t;ll n,k;ll P(ll x){
2022-01-13 12:02:09
291
原创 AtCoder Beginner Contest 234 A~D
A - Weird Function题意:给一个方程,求值#include<bits/stdc++.h>#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);typedef long long ll;typedef unsigned long long ull;using namespace std;const int mod=1000000007;const double eps=1e-8;ll f(l
2022-01-11 23:08:47
438
原创 Codeforces Round #764 (Div. 3) A~D
A. Plus One on the Subset题意:给一个数组,每次选任意个数,依次加一,问最少几次可以使数组大小一致思路:选最大和最小相减即可#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;ll t,n,m;int main(){ scanf("%lld",&t); while(t--) { int n; cin>>
2022-01-11 22:03:07
517
原创 数据结构课程作业
走迷宫栈#include<iostream>#include<cstdio>#define MAXSIZE 10000using namespace std;int a[100][100];bool vis[100][100];//标记该点是否走过、 int n,m;//迷宫大小 n行m列。 int x1[4]={1,-1,0,0};int y1[4]={0,0,1,-1};//移动数组 bool check(int x,int y){ if(x<
2021-11-19 09:24:13
103
原创 树的直径 HDU2196
若想做这道题 首先要懂得树的最长路怎么计算首先假设树的最长路的两个叶子节点为v1,v2,那么现有结论,从任意一点u出发走*到的最远的点一定是(v1,v2)中的一点,然后再从v1或者v2出发走到的最远点一定是v2或者v1。所以经过两次搜索就能找到最长路径。此题需要三次dfs第一次找到其中一个v1 或v2 ,再两次从v1 -> v2及v2 -> v1我们知道对于任意一点,它所能达到的最远距离为v1 或 v2 ,那么逆向思维, 我们可以先找到这两个端点,然后用dis数组来分别保存这两个端点到
2021-08-12 16:56:50
85
原创 SPFA 存最短路径 POJ 2457
题目链接:http://poj.org/problem?id=2457题意:一些奶牛从地球(编号为1)出发前往太空为它们的谷仓购置一台新的挤奶机。太空中一共有N(1<=N<=1000)个星球。奶牛们已经确定了想要的挤奶机在最后一个星球(编号为N) 。太空中存在M(1<=M<=50000)条两个星球之间的路径。帮助他们找到经过星球数量最少的路径,以获得物品K。如果此任务不可能完成,则输出-1。#include<iostream>#include<algo
2021-08-09 18:37:45
106
原创 盒子与球问题
n个不同球,m个相同盒子第二类斯特林数:表示将n个不同的元素拆分成m个集合的方案数,即f[n]。递推式: 1.如果n个元素构成了m-1个集合,那么第n+1个元素单独构成一个集合。 f[n][m-1] 2.如果n个元素已经构成了m个集合,将第n+1个元素插入到任意一个集合。 m*f[n][m]f[n]=f[n−1][m−1]+f[n−1][m]∗mf[n]=f[n-1][m-1]+f[n-1][m]*mf[n]=f[n−1][m−1]+f[n−1][m]∗mf[1][1]=1
2021-08-02 21:31:20
198
原创 矩阵快速幂
#include<bits/stdc++.h>#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);typedef long long ll;using namespace std;const int mod=1e9+7,N=110;const double eps=1e-8;struct mat{ ll a[N][N];}ans,in;//in输入数组,mat mul(mat A,mat B,int n
2021-07-29 10:49:39
81
原创 关于分解质因数中为什么不用判断i是否为质数
将n得质因数从大到小输出 以及出现次数void divide(int n){ for(int i=2;i<=n/i;i++) { int sum=0; if(n%i==0) { while(n%i==0) { n/=i; sum++; } cout<<i<<" "<<sum<<endl; } } if(n>1) cout<<n<<"
2021-05-31 20:39:55
246
原创 HDU 1022 stack
题目链接题意火车入站给定123 即火车按照123 入站给定321 问火车是否能按321 出站如果能给定入栈出栈方式Sample Input3 123 3213 123 312Sample OutputYes.inininoutoutoutFINISHNo.FINISH思路#include<bits/stdc++.h>typedef long long ll;using namespace std;const int mod=1000000007,N
2021-04-25 17:08:33
62
原创 codeforces 816B Karen and Coffee差分二分
题目链接题意给你n个区间,k,q次询问(1 ≤ k ≤ n ≤ 200000,1 ≤ q ≤ 200000)每次询问给定一个区间,求区间中每个数合法数量,如果每个数满足n个区间的数量>=k,则为合法数;simple input3 2 491 9492 9797 9992 9493 9795 9690 100simple output3304思路利用差分求出合法区间,利用二分找出每次询问区间中在合法区间的边界#include<bits/stdc++.h&g
2021-04-25 16:19:09
239
原创 博弈论 小A的宝藏
题目小A和小B历经千辛万苦,终于在一个洞穴中找到了宝藏。在洞穴深处,他们发现了一颗价值连城的宝石,他们决定做一个游戏以决定宝石属于谁。游戏规则如下:每人在自己的回合必须选择其中一个操作:1.拿走一块或者两块银子;2.拿走一块金子。无法继续进行操作的人被认为失败(即银子和金子都已经拿完)。谁将得到宝石呢?小A先拿。输入31 03 03 1输出AliceBobAlice思路博弈论巴什博弈每次有至多取走 m 个硬币,至少取走 1 个硬币。共有 (m+1) * k +
2021-03-24 15:30:24
181
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人