自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 LQB-近似 GCD

题意:给出长度为 n 的数组 A 和一个整数 g ,问有多少个长度不小于2的子数组(下标连续)满足 “至多修改其中的一个数,使得数组的最大公约数等于g”。思路: 将数组处理为新的01数组,如果数组元素和g的最大公约数等于g,标记为1,否则标记为0。问题转化为求有多少个长度不小于2的子数组最多包含一个零。单个0的贡献 = 右边紧邻连续1的最大长度 + 左边紧邻连续1的最大长度*(右边紧邻连续1的最大长度 +1)。对于每个长度不小于2的连续“1”片段,求其贡献,累加求和得sum2。(2)统计仅有1参与的贡献。

2023-06-03 19:52:28 239

原创 蓝桥杯省赛小记

类似动态规划吧,求以数末位x(0 < x < 10 )结尾的最长接龙序列 len,n - len。先求外海域,与外海直接相通的岛屿就是真岛屿,否则就是岛内湖心岛。打表23年日期,逐一查验。最小堆set维护链表的增删操作。直接并查集,骗分(30%)试题 B: 01 串的熵。试题 A: 日期统计。试题 C: 冶炼金属。试题 D: 飞机降落。试题 E: 接龙数列。试题 F: 岛屿个数。试题 G: 子串简写。试题 H: 整数删除。试题 I: 景区导游。

2023-04-08 20:47:34 195 1

原创 牛客小白月赛68

牛客小白月赛68A Tokitsukaze and New OperationB Tokitsukaze and Order Food DeliveryC Tokitsukaze and Average of SubstringD Tokitsukaze and Development TaskE Tokitsukaze and Colorful ChessboardF Tokitsukaze and New RenKinKama

2023-03-11 11:51:43 576

原创 Codeforces Round #750 (Div. 2) E. Pchelyonok and Segments

链接首先将整个数组逆置dp[i][j] 表示前i个数能产生长度 j 结尾的片段的最大和 , 只有结尾段尽可能地大 , 才能更好地保证后续拼接的片段相对前面的片段降序 。 dp[i-1][j]到dp[i][j]产生不超过500种新的状态。用dp[i][j] = 0 表示所有不合法状态。code:#include <bits/stdc++.h>#define int long longusing namespace std ;//数组逆置得到新数组//dp[i][j] 表示从i的前缀

2021-10-25 20:24:27 319 6

原创 Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build

在有限集合内贪心地枚举答,答案必然产生于最接近某个ban序列的前10个最优解。这样就穷举一下每个ban序列的前10个较优序列。O(mnlgm)code:#include <bits/stdc++.h>#define int long longusing namespace std ;int n , m ;struct Node{ int ls[15] ;};Node L[200005] ;int a[15][200005] ;int len[15] ;set<

2021-10-25 20:09:05 94

原创 J. MUV LUV EXTRA (KMP求最小循环节)

原题链接枚举后缀,KMP求每种后缀的最小循环节,更新最优解。#include <bits/stdc++.h>#define int long longusing namespace std ;int a , b ;char s[10000007];char str[10000007] ;int nxt[10000007] ;int n = 0 ;signed main(){ //freopen("in","r",stdin); scanf("%d%d",&a

2021-10-22 18:16:30 166

原创 2021 RoboCom 世界机器人开发者大赛-本科组(复赛) 7-4 塔防游戏 (30 分)

把大本营作为起点,跑一遍Dij , 求出每队僵尸到大本营的路径。然后跑秒,每一秒都更新僵尸队伍的状态和地图的状态。有个点需要注意:当3个队同时攻打某个防御值为2的堡垒,该堡垒消失的同时,3个队都会减员1人,也可以理解成 ”堡垒可能减为负值“ , 有点牵强,开始一直被这个点卡住。 还有一个要注意的点是最外围点(僵尸老窝)之间互不相通。code:#include <bits/stdc++.h>#define x first#define y secondusing namespace st

2021-10-20 21:27:03 1771

原创 Codeforces Round #745 (Div. 1) A. Portal

原题链接二维前缀和+枚举优化。原题链接提前预处理出前缀和,并将当前前缀优化为比当前前缀更靠右的更优前缀。这样先枚举U,D,枚举L的同时,对应已经根据预处理那里获得了,即取L右侧距离L足够的最优前缀。再利用前缀和a - 前缀和b获得当前ans,不断更新答案//提前预处理出前缀和,并将当前前缀优化为比当前前缀更靠右的更优前缀。//这样先枚举U,D,枚举L的同时,对应已经根据预处理那里获得了,即取L右侧距离L足够的最优前缀。再利用前缀和a - 前缀和b获得当前ans,不断更新答案#include

2021-10-20 20:48:45 177

原创 D. The Number of Imposters

对于每个言论,可以确定一个关系,如果是x y im ,则说明x和y是同一类人,如果是x y cr ,则说明x和y不是一类人。可以把所有有联系的人放在一个图中,对图中的点进行染色,那么图中的点各自有着直接或间接地联系,那么每个点的颜色非黑即白。为了方便实现,若x , y是同一类人,那么x,y之间有一条权为1的边,若x,y不是同一类人,那么x,y之间有一条权为0的边。根据已有的边,就可以对点进行染色了。若染色过程中存在冲突,那就无解code:#include <bits/stdc++.h>.

2021-10-15 17:33:22 225

原创 2021CCPC网络赛 Monopoly

s[j]表示前缀和,S = s[n]若S为负数,对所有输入数据取相反数,从而使得S为正。(若存在重复前缀,仅保留靠左的)这样只需要找到与x同余的前缀中最大的那个数,同时保证sj <= x!!!数组判越界,输出看long long!!!数组判越界,输出看long long!!!数组判越界,输出看long longcode:#include <bits/stdc++.h>#define int long longusing namespace std;const int..

2021-10-12 23:05:55 226

原创 Jumping Monkey

特殊并查集:按点权从小到大枚举结点 u ,并将 u作为所有与u相连的(已经枚举过的)连通块的根。从而建立一棵新树,每个结点的深度(根的深度为1)即是答案。code:#include <iostream>#include <vector>#include <algorithm>using namespace std ;const int N = 1e5+10 ;bool vis[N] ;int T , n;int p[N];vector<int.

2021-10-11 12:13:52 88

原创 The 2021 ICPC Asia Regionals Online Contest (II) G Limit

这是一道数学题求极限要用到的泰勒展开式:code:#include <bits/stdc++.h>#define int long long using namespace std ;const int N = 1e5+10 ;int t , n ;int a[N] , b[N] ;int up[N] , down[N] ;signed main(){ scanf("%lld%lld",&n,&t) ; for(int i = 1 .

2021-09-29 17:02:27 246

原创 The 2021 ICPC Asia Regionals Online Contest (I) D Edge of Taixuan (补题)

原题链接题意:给出n,m。n代表村庄的个数(村庄编号1~n),接下来进行m次操作。每次操作给出l,r,w,给[l,r]内所有村庄两两连边,每连一条边的代价是w。进行m次操作后,可能仍然存在不所有村庄不连通的情况,或者所有村庄都连通了。若所有村庄实现连通,现在让你删除尽可能多权重的边,使得删除这些边后所有村庄均保持直接或间接连通,输出被删除边的总权重,否则输出一行错误提示。思路:线段树上贪心。对所有操作按边的权重降序排列,然后依次给线段树的区间赋新值(更小的值),这样总能保证线段树中的点是一直变小的。c

2021-09-27 22:08:52 156

原创 The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function (补题)

原题链接题目描述:官网题解:附:欧拉函数总结my code:#include <bits/stdc++.h>using namespace std ;const int N = 1e5 + 10;const long long int Mod = 998244353 ;struct Node{ int l , r ; bool ex[100]; long long mul ; long long sum ;};Node tr[N*4] ;

2021-09-27 19:51:17 169

原创 A Busiest Computing Nodes

A Busiest Computing NodesYou have a computing cluster with a total of k computing nodes, labelled from 0 to k−1. The cluster can handle multiple requests at the same time, but each node can process at most one request at the same time.The rules for reque

2021-09-21 20:47:17 361 4

原创 洛谷 P3901 数列找不同(“求区间[L,R]中不重复元素的个数”模板)

求区间[L,R]中不重复元素的个数。思路:可持久化线段树,即对于每个历史版本,仅保留每个元素最靠右的位置。这样,对于每个历史版本有效位置在线段树中被标记为1,无效位置被标记为0,这是一种单点修改+区间查询的基本操作,线段树整体记录区间和。code:#include <bits/stdc++.h>using namespace std;const int N = 1e5+10 ;struct Node{ int l , r , sum ;};Node tr[N*40] ;

2021-09-10 15:17:20 225

原创 HDU 7123 City

题意:给出一个带权非联通图,图中有若干联通分量,图中的点代表城市,有一些城市可以互相到达。试去掉边权小于x的所有边,试问去掉这些边后,还有多少对城市可以互相到达?并查集+离散化思路:可以先对每个连通分量进行预处理,即保留权值尽可能大的边使得连通分量保持原有连通性,对于连通分量中一些无用(权值较小)的边直接删除。优化连通分量的具体操作是对按照权值进行排序,优先选用权值较大的边,这样总能生成一颗更健壮的树。建树的同时记录每种权值的边所能连接的点对数,这样破坏某些边时就能快速获取这些边能影响的点对数。最后.

2021-09-05 12:59:05 119

原创 HDU 7116 Lowbit

原题链接题意:给出一个长度为n的数组a,每次可以进行如下操作。①选择一段区间[L,R] ,令[L,R]中每个数ai = ai + lowbit(ai) , lowbit同树状数组基本操作。②选择一段区间[L,R] ,输出区间和。思路:很容易想到要用线段树 ,难点在于对于线段树的任一子区间是否满足“区间内的任意数都等于它的lowbit值”,满足上述条件的区间我们称之为win(理想)区间。这样,如果一个区间中存在不理想的数,那就要进行必要的单点更新,否则直接对区间整体乘2就是新的区间和。code:

2021-09-05 11:35:16 151

原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛 Command Sequence

离散化 + 前缀和用long long的低位和高位分别表示(x ,y)。#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e5 + 10 ;int x , y ;int t , n ;char s[100005] ;unordered_map<int,int>ex1;signed main(){ //freopen("in","r",st.

2021-08-29 17:41:26 276

原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛 Function

可以发现gx的范围很小[1,54] 。可以通过枚举gx求解关于x的二次函数。讨论二次项系数是否非正。若二次项系数为正,就转化成了求距离对称轴-b/(a*2)最近的x。x必须同时满足x∈[1,n] ,并且x各位数字之和等于gx。预先打出gx的表并对行内元素排序。实现过程有点坎坷,补题过程交了N遍。code:#include <bits/stdc++.h>#define int long longusing namespace std;vector<int>v[60] ;.

2021-08-29 17:35:07 367

原创 问题 K: Painting the Fence

Farmer John has devised a brilliant method to paint the long fence next to his barn (think of the fence as a one-dimensional number line). He simply attaches a paint brush to his favorite cow Bessie, and then retires to drink a cold glass of water as Bess

2021-08-27 11:21:24 146

原创 问题 D: 老死不相往来

马孔多是一个奇怪的小镇,镇上的房子沿着一条河流的南岸而建,而且镇上的居民一辈子都只在自家附近一个固定半径的范围内活动,有些居民永远不会相互接触,即使他们生活一辈子也老死不相往来。马孔多小镇一共有n座房子,以到镇子的西端的距离算,居民家的位置为p,他们活动的范围为r,请问马孔多小镇一共会有多少对住户之间老死不相往来。第1行:一个数N,表示房子的数量(1 <= N <= 50000)第2 - N + 1行:每行2个数P, R中间用空格分隔,P表示房子的位置,R表示这家住户的活动范围半径(1 &

2021-08-26 21:11:58 210

原创 D - Forest

题意:给出一个由n个点m条边构成的森林,每个点有个权值val[i],额外加一条边(u,v)的花费是val[u] + val[v],且u、v只能被用到一次,添加一些边使得图连通,求最小花费。思路:先找连通块的个数x,那么需要(x-1)条边使这些块连通,因为不能重复选点,所以需要2(x-1)个点使其连通,要生成一棵树,则至少要有2(x-1)个点。先在每个连通块中找一个最小点,这样一共找了x个点,再从剩余(n-x)个点中找 [2(x-1) - x] 个最小点。对这2(x-1)个点的权求和。特判一开始就是一棵树.

2021-08-15 17:12:05 102

原创 D - Sum of Maximum Weights

思路:①把所有点合并为一颗树的过程:任选两个点集做合并,对两个点集中的点做笛卡尔积形成若干新的点对。最后生成的点对个数也是组合枚举的全集,这点毋庸置疑。②按边权升序,每次合并两个点集,都以最大边作为连接条件,这也是这条边能发挥的最大效益。code:#include <bits/stdc++.h>#define int long longusing namespace std;struct Node { int x, y, w; bool operator&l.

2021-08-15 10:08:57 170 2

原创 LCM of GCDs

官方题解:枚举所有可能的数对,即答案的父集,一一验证,并取最优。1500ms,4s能过//枚举答案的所有可能情况取最优。//拆分a1和b1的约数。//关键点:一组数最大公约数一定是某个数的约数。#include <bits/stdc++.h>#define int long longusing namespace std;int a[55] ;int b[55] ;int n ;vector<int>v[2]; void Split(int x , int .

2021-08-14 11:59:04 177

原创 AcWing 456. 车站分级

对于每条线路,所有经过的点,由停靠站点向未停靠点发出一条出边。最后呈现出一个有向无环图,对该图拓扑排序求层级。构造边时需要采用“虚点优化”,不然会超内存。code:#include <bits/stdc++.h>using namespace std;int n, m;bool vis[2005];int a[2005];int in[2005];int depth[2005];vector<int> v[2005];int main() { //.

2021-08-13 10:28:50 124

原创 [USACO12FEB]Cow IDs

题意:输出第n个不含前导0且1的个数为k的二进制串。这题和之前一道题类似:G:aab aba baak=1的情况比较容易考虑,对于任意的n只要在1后面添加若干个零。对于k>1的情况,先把首位的1拿出来,再讨论剩余k-1个1的分布。可以枚举串长度为k,k+1,k+2,k+3… L。要解决这个题,首先要知道这个串的长度,也就是说至少多少位01才能表示出第n种情况。也不难想,直接判断前面组合数的前缀和,直到某个前缀不小于n。#include <iostream>#include.

2021-08-12 20:28:10 120

原创 G: Cow Coupons

官方题解:There are several different ways to approach this problem.One of them stems from the initial idea of picking the lowest-cost cow each time: use all coupons on the cheapestcows, then buy as many cows as possible without coupons. However, this does.

2021-08-12 13:29:34 175

原创 Mountain Climbing

题意:农场主约翰发现他的奶牛剧烈运动后产奶的质量更高,所以他决定让N头(1 <= N <= 25,000)奶牛去附近爬山再返回来。第i头奶牛用时U(i)爬上山,用时D(i)下山。作为家畜,奶牛们每段路都要有农夫的帮助,可是由于经济疲软,农场里只有两个农夫John和Don。John计划引导奶牛爬山,Don引导奶牛下山。虽然每个奶牛都需要向导,但每段旅途只有一名农夫。所有任何时刻只有一头奶牛爬山也只能有一头奶牛下山,奶牛爬上山后,可以暂时停留在山顶上等待Don的帮助。奶牛上山的顺序和下山的顺.

2021-08-11 11:56:41 376

原创 问题 C: 粉兔爱女装

分析:绝对值不等式code:#include <bits/stdc++.h>using namespace std;struct Node{ int x , t ; bool operator < (Node no1){ return x < no1.x ; }}; int b[20000100] ;vector<Node>v[2]; //绝对值不等式模块long long Dis(const int *.

2021-08-10 20:03:59 245

原创 B: Grazing Patterns

题意:给出5x5的方格,’.'能走,其它不能走。求从起点出发,不重复地走每一个点,最终能到达终点的方案数。#include <bits/stdc++.h>using namespace std;int a[5][5] = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}};boo..

2021-08-10 19:59:41 140

原创 问题 K: number nowcoder

题意:统计能被300“整除”的子串数量。分析:长度为1且能被300整除的只有“0”;长度为2且能被300整除的只有“00”;长度不小于3且且能被300整除的一定是“…x00”,其中前缀’…x‘能被3整除。也就是既能被3整除又能被100整除。统计过程前缀和优化:对每位数字求取余3的前缀和。对于每个“…x00”,统计与x前面与“x处的前缀%3”具有相同值的前缀个数。code:#include <bits/stdc++.h>#define int long longus..

2021-08-10 11:06:09 98

原创 问题 F: Bale Share

题意:把n个物品装入3个等体积的背包,在能装下所有物品的前提下,使背包体积尽可能地小。分析:如果去掉限制条件尽可能地小,那么答案将会是[MinV,+∞),相对的,[0,Minv-1]都不存在解。就把解地分布作为二分条件。二分过程给出一个背包的任意容量X,让A,B尽可能地被装满,然后再看C中装的是否不超过X。如果满足,是可行解,但不一定是最优解。不满足的情况同样分析就行。//题意:把n个物品装入3个等体积的背包,在能装下所有物品的前提下,使背包体积尽可能地小。//分析如果去掉限制条件尽可能..

2021-08-09 21:34:29 93

原创 问题F:跳石头

这个有特殊处理,自己的逻辑太不严谨,老想不全面。详细见代码注释code:#include <bits/stdc++.h>#define int long longusing namespace std;int a[100005] ;int L , n , M ;bool check(int x){ int nowat = 0 ; int remov = 0 ; for(int i = 1 ; i <= n ; i++) { if(.

2021-08-08 21:03:55 58

原创 ARC Wrecker 2

通过观察发现:这种可以实现的区间满足奇数位的和等于偶数位的和。因此可以将所有偶数位赋值为其相反数,这样区间和为0的区间就是想要的区间。利用前缀和优化一下统计的过程。code:#include <bits/stdc++.h>#define int long longusing namespace std;unordered_map<int,int>ex;int n ;int a[300005];signed main(){ //freopen("in",.

2021-08-07 17:14:34 73

原创 ACM 任务

区间dp,滚动优化枚举大学的先后顺序,分配前j个任务给前两所大学,考虑最优分配,维护二者共同构成的最优前缀,后缀始终是个定值。code:#include <bits/stdc++.h>using namespace std;int pos[3][150005] ;int pre[3][150005] ;int a[3][150005] ;void getPos(int n , int idx){ for(int i = n ; i >= 1 ; i--) p.

2021-08-07 16:49:02 108 1

原创 Electric Board

最终要获得S=T,S和T一旦全等,S中的‘0’和T中的‘0’是完全对齐的,当然‘1’也是。对于给出的字符串S,T。如果S中的第i个‘0’与T中的第i个‘0’恰好对齐,那么就可以以此位置为界限,向左分出一个字串,同时向右分出一个子串(S和T同步分割)。当然,这种特殊的对齐可能有存在多处,那就以这些特殊点为界分解为若干个子串。很明显,分割产生的子串不再有这种特殊位置,不然还能继续分割。接下来对每个子串分别处理,对于某个子串,设法构造出一个这样的特殊位置:这时候一定存在S中的第i个0和T中的第i个0通过题中提到.

2021-08-07 13:31:19 83

原创 upc高校排名

有向图上多源点最长路问题code:#include <stdio.h>#define int long long#define Fmin(x,y) x < y ? x : yconst int MinS = 1e9 ;int n , m ;int D[105][105];int a[105] ;int ex[105][105];signed main(){ //freopen("in","r",stdin); scanf("%lld%lld",&a.

2021-08-06 21:30:43 116

原创 Longest Common Subsequence

如果一个字母每次都出现在另一个字母前面,那么这两个字母之间存在一条有向边,边权为1,偏指一方。问题就转化成了求有向图上最长路(多源点最长路)。可以用Floyed:code:#include <stdio.h>#include <math.h>#define int long long#define Fmin(x,y) x < y ? x : y //unordered_map<int,int>ex[100005] ;const int MinS =.

2021-08-06 21:25:43 62

原创 Roadblock

RoadblockM最大是n*n级别,稠密图,n的范围很小,考虑直接朴素版最短路。求出初始最短路径,再修改该路径上的某一条边,并实时更新答案。code:#include <bits/stdc++.h>#define int long longusing namespace std;int n , m ;int a[102][102] ;int path[105] ;int dis[105] ;int vis[105] ;void init(){ for(i

2021-08-06 11:18:18 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除