- 博客(39)
- 收藏
- 关注
原创 “蔚来杯“2022牛客暑期多校训练营1部分题解(待补)
思路贪心,因为发电站就一个,每个建筑物都会有一个影响区间和收影响区间,将建筑物分为在发电站左侧和发电站右侧,不断的维护和更新发电的影响区间,即最大的L,R,若建筑物的受影响区间不在L,R就对ans加上贡献,不断的更新L,R。那么多余每个dp[j][i],如果没有取到我想要的牌,可以由dp[j-1][i]转移过来,并且再算上此时的概率,如果取到了我想要的牌,可以由dp[j-1][i-1]转移过来,同时算上此时的概率。由样例的启发,Q点到圆心的连线为L,与L垂直的方向最优,然后画图作解。...
2022-07-18 21:38:59
706
1
原创 Educational Codeforces Round 112 (Rated for Div. 2) A-D
A. PizzaForces 可以发现每个披萨都是2片5分钟,那么对于偶数的情况ans=n/2*5/。 对于奇数的情况需要多给一片,那么让n++ 后,成为偶数再处理。 #include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int t; cin>>t; while(t--) { ll n; cin>>n; ll ans=0; if(n<=6
2021-07-31 10:05:14
305
原创 Codeforces Round #735 (Div. 2) A-D
这场上分场,早知道用大号打了。。 A. Cherry 区间肯定越小越好,那就找一个相邻乘积最大的。 AC #include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[100010]; int n; void get() { ll anss=-1; for(int i=1;i<n;i++){ anss=max(anss,a[i]*a[i+1]); } cout<<anss&l
2021-07-30 10:41:13
322
原创 Codeforces Global Round 15 A、B、D
A. Subsequence Permutation 思路: 直接排序再统计相同的个数,答案是长度-相同的个数 #include<bits/stdc++.h> using namespace std; string s; string c; int ans; int main() { int t; cin>>t; int n; while(t--) { cin>>n; cin>>s; c=s; sort(c.begin(),c.end
2021-07-26 10:34:19
217
原创 Codeforces Round #721 (Div. 2) C. Sequence Pair Weight
如图: AC代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+10; typedef long long ll; ll a[N]; map<ll,ll> mp; int main() { int t; cin>>t; while(t--) { int n; cin>>n; mp.clear(); ll ans=0;
2021-05-21 14:28:12
341
1
原创 【动态规划】数字三角形模型 AcWing 1027. 方格取数 275. 传纸条
思路: 不能分开走 分开两次走(贪心):第一次走到(n,n)求除最大值并记录路径上点收益为0后再走一次。 第一次走为局部最优并且也对第二次走造成了影响,第二次走是在第一次影响下所能走的局部最优,不具备“无后效性”,因此分开两次走并不是全局最优解。 解法: 代码如下: //方格取数 #include<bits/stdc++.h> using namespace std; const int N=100; int f[N][N][N]; int n; int g[N][N]; int main(
2021-05-11 14:35:34
153
原创 Codeforces Round #720 (Div. 2)题解
题目链接: https://codeforces.com/contest/1521 A. Nastia and nearly Good Numbers 一开始题意看错了。。。。 思路: 直接构造。 首先三个数都是A的个数 既然两个不能被B整除。 那么就直接构造 ans1=A* B* 2 ans2=A*(B-1) ans3=A*(B+1) 然后 按顺序输出,最大的在后面!!。 (比赛的时候这里WA了,幸好是test1) 再特判一下 B=1的时候 输出NO AC代码 #include<bits/stdc
2021-05-08 01:07:37
898
6
原创 Codeforces Round #719 (Div. 3) A-G题解 G题详细注释
题目链接: https://codeforces.com/contest/1520 A. Do Not Be Distracted! 思路: 数据范围小,直接暴力。 AC代码 #include<bits/stdc++.h> using namespace std; const int N=100; typedef long long ll; typedef pair<int,int> PII; map<char,int> mp; int main() { int t;
2021-05-07 15:34:34
410
2
原创 洛谷P2853 [USACO06DEC]Cow Picnic S 题解
题目连接: https://www.luogu.com.cn/problem/P2853 题意: 有n个奶牛在不同牧场,牧场之间有m条路。 求所以奶牛都能共同到达的牧场的数量 思路: dfs每一个奶牛可以到的牧场。 开一个d[N]数组记录d[i] i这个牧场能来的奶牛的个数,如果d[i]==n,就符合题意。 AC代码: #include<bits/stdc++.h> using namespace std; const int N=101000; vector<int> p[N];
2021-04-30 16:29:58
364
1
原创 Educational Codeforces Round 108 (Rated for Div. 2) ABCD题解
题目连接: https://codeforces.com/contest/1519 A.Red and Blue Beans 题目思路: 1.构造最优的状态,即一个是1,一个是1+d 2.先比较r,b的大小,让小的是r,那么最多需要(1+d)*r个 b。 3.最多的和b比较一下就行了 AC代码: #include<bits/stdc++.h> using namespace std; const int N=1; typedef long long ll; map<int,int>
2021-04-30 15:01:33
278
原创 Codeforces Round #717 (Div. 2)A-B详解
题目链接:https://codeforces.com/contest/1516 A.Tit for Tat 题意:给定一个数组,然后再给定n和k。你可以执行操作如下: 给任意两个不同的元素(下标不同)一个加上1,一个减掉1。 最多执行k次这样的操作,请你给出一个字典序最小的数组。 ...
2021-04-22 23:28:29
333
原创 Divide by Zero 2021 and Codeforces Round #714 (Div. 2) C Add One题解(预处理)(详细注释)
题目链接: https://codeforces.com/contest/1513/problem/C 题目大意: 给定一个数n和一个m,每一个的操作,让n的每一位加上1,求出执行m次操作后,n的长度。 思路: 1.开一个k数组和一个ans数组 2.ans[x]存的是,让执行x次后,0这个数字产生的长度。 3.k[x]存的是当执行i次后,x这个数字的个数。 4.然后每一次的遍历,ans[i]的计算就是0到9的个数 5.具体见代码。 AC代码: #include<bits/stdc++.h> #d
2021-04-12 09:52:58
528
原创 Educational Codeforces Round 96 (Rated for Div. 2)C. Numbers on Whiteboard
题目链接:https://codeforces.com/problemset/problem/1430/C 思路:(贪心) 1.一开始想的是头尾相加,结果是中间的值,后来发现不对,最优的方法应该是从后面最大的相加/2,最终答案都是2 AC代码: #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int a[N]; int ans; int t,n; int main() { cin>>t; whil
2021-04-01 14:54:51
163
原创 Codeforces Round #677 (Div. 3)D. Districts Connection
题目链接: https://codeforces.com/problemset/problem/1433/D 思路: 因为只要相连的城市不是属于同一个帮派,可以间接相连。 所以只要找到两个不同的即可。 AC代码 #include<bits/stdc++.h> using namespace std; const int N=5010; int t; int a[N]; int k; int main() { cin>>t; while(t--) { int n; ci
2021-04-01 14:51:09
169
原创 Codeforces Round #682 (Div. 2)B. Valerii Against Everyone
题目链接: https://codeforces.com/contest/1438/problem/B ** 题目大意: 给定bi,会生成一个ai,ai=2^bi。 然后要求找出4个数,l1,r1,l2,r2.满足 1≤l1≤r1<l2≤r2≤n; al1+al1+1+…+ar1−1+ar1=al2+al2+1+…+ar2−1+ar2. 输出YES or NO 思路: 看到bi范围那么大肯定就不是暴力了。想半天结论竟然没推出来。。 1.要想让两个区间相等,那么最好的就是找两个数相等。所以,如果有两个数
2021-03-31 22:31:28
134
原创 Codeforces Round #683 (Div. 2, by Meet IT)B - Numbers Box
题目链接: https://codeforces.com/problemset/problem/1447/B ** 思路: ** 既然要使答案结果最大,那么就是要让矩阵中的数尽可能的是正数。 很明显的可以推出来,如果二维数组中<=0的数的个数为偶数,那么答案就是数组的绝对值的总和,如果是奇数,那么让数组中最小的数变成负,其他都是整数。 AC代码: #include<bits/stdc++.h> using namespace std; const int N=15; int a[N][N]
2021-03-31 21:34:31
240
原创 Educational Codeforces Round 100 (Rated for Div. 2)A. Dungeon
题目链接: https://codeforces.com/contest/1463/problem/A (贪心) * 思路: 每一个周期发射的攻击是9,所以要使相同的增强的攻击击杀,三个数的总数一定要是9的倍数,同时,3个数都要撑过sum/9,即多少个周期,每个周期最少减一次。 AC代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll t; ll a[4]; map<ll,ll> mp;
2021-03-31 21:15:29
115
原创 CodeCraft-21 and Codeforces Round #711 (Div. 2)A-D题解
题目链接: https://codeforces.com/contest/1498 A. GCD Sum 题意 给定一个数n,求这个数和他每个位上的数的和的GCD。如果这个GCD是1,那么找比n大的,且最近的满足这个GCD>1的数。 思路: 按照题意模拟后发现,最坏的情况也是n+2的时候就找到了,所以,n最多加2。然后按照题意模拟即可 AC代码 #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(0); cin.tie(0);
2021-03-31 15:39:49
332
1
原创 Codeforces Round #708 (Div. 2) B - M-arrays
题目链接: https://codeforces.com/contest/1497/problem/B 思路:根据同余模定理,把数组当中每个数对m取模,然后放在一个vis数组中, 余数为x的和m-x的相匹配,而且这两个数如果相差小于等于1,那么组数加一即可,因为 x ,m-x, x 只需要一组,如果大于1 那么多余的就需要单独一组。 AC代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef p
2021-03-22 08:53:59
196
原创 牛客练习赛78
太菜了 就写了A和B,B还卡半天。。。 写贴代码 思路明天写 A #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); using namespace std; typedef long long ll; const int N=1e4+10; char s[N][4]; char s2[3]; int n; int q; int main() { cin>>n
2021-03-12 22:17:55
119
原创 Educational Codeforces Round 92 (Rated for Div. 2) C. Good String
题目链接: https://codeforces.com/problemset/problem/1389/C 思路: 自己写的时候也推出来了。 要么两个数字周期出现。并且长度必须为偶数 要么一个数字。 自己写的时候一直想直接构造出来… 没想到直接是暴力枚举。 对于字符串0-9这种范围还不太敏感。。 直接枚举第一个数字和第二个数字 取最少的就好。 注意: 第一个和第二个字母不同时,长度不能为奇数。如果是奇数,要-1。 AC代码 #include<bits/stdc++.h> using names
2021-03-12 17:08:55
174
原创 Codeforces Round #693 (Div. 3)D. Even-Odd Game(博弈)
题目链接: https://codeforces.com/problemset/problem/1472/D 思路: 博弈题,一开始把想难了,wa了一发后,就去排序了。 从大到小排序即可,奇数的时候A拿,如果是偶数,sumA+=a[i], 偶数的时候B拿,如果是偶数,sumB+=a[i]. AC代码 //D. Even-Odd Game #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2
2021-03-12 15:20:28
178
原创 1470A - Strange Birthday Party(贪心)
题目链接: https://codeforces.com/problemset/problem/1470/A 选的标签是dp… 思路: 将k数组从大到小排序即可,用一个h记录 1-ki 个数前面最小的数的位置,如果没有被用过就拿,用过了直接加 Cki。 AC代码: //A. Strange Birthday Party #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+10; ll
2021-03-12 14:47:15
254
原创 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(补题)
前言: 第一场团队赛,和队友没配合好,成绩不太理想。应该几个人开一道的,都管自己想了。想法应该汇总一下,每个人都差一点点… A 思路: 签到题,队友理解题意理解错了WA了好几发。我一发A了。。。。 1.小于k的增加到它可以增加的最多数量 2.大于等于h的不变 3.最后有一次增加h的机会,总数ans加个k就ok了 AC代码 : #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e6+5;
2021-03-11 21:11:38
494
原创 Codeforces Round #706 (Div. 2) A-D题解
题目链接: https://codeforces.com/contest/1496 A 思路: (1).对k的大小进行考虑。如果k=0,直接YES;如果2*k+1>n,直接NO。 (2)字符串是以ABA形式存在,所以判断字符串前半段与后半段是否对称。并且,对称的长度,num>=k。 AC代码: #include<bits/stdc++.h> using namespace std; char s[110]; int n,k,t; int main() { cin>
2021-03-11 16:44:13
2452
9
原创 Codeforces Round #704 (Div. 2) B
水题。 B. Card Deck time limit per test1 second memory limit per test512 megabytes inputstandard input outputstandard output You have a deck of n cards, and you’d like to reorder it to a new one. Each card has a value between 1 and n equal to pi. All pi are p
2021-03-06 19:53:17
157
原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南) G Xor Transformation
题目大意: 给X 和Y , X>Y。求在5步内,X xor 到Y的方案。 1.xor的意思是异或。 2.异或运算可以用^实现。 3.异或运算是可逆的。 A^B=C. C^A=B ,C^B=A; 了解这些后,解题思路就很清晰了。 1.求X^Y=Z, 如果Z<X,则只需要1步即可,因为可逆,X^Z=Y; 2.如果Z>X,则先让X^Y,得到Z,则X变成Z,再 Z^X=Y; AC代码如下: (记得开long long) #include<bits/stdc++.h> using na
2021-03-06 19:18:04
234
原创 Codeforces Round #690 (Div. 3) B
题目链接:https://codeforces.com/contest/1462 B. Last Year’s Substring time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Polycarp has a string s[1…n] of length n consisting of decimal digits. Polycarp perf
2021-03-04 14:25:58
91
1
原创 2021牛客寒假算法基础集训营1 A-串
思路:DP思想 实现代码: #include<bits/stdc++.h> using namespace std; const int N=1000010; const int M=1e9+7; int n; long long f[N][3]; int main() { cin>>n; f[1][0]=25; //f[i][0] 前面没有u f[1][1]=1; //f[i][0] 有一个或者多个u (没有us) f[1][2]=0; //f[i][..
2021-02-02 22:51:45
245
原创 2021牛客寒假算法基础集训营1 C 红和蓝
打比赛的时候没来得及看这道题,赛后发现这道题和我之前总结的数组模拟邻接表和图等很有关系。赛后花了蛮长时间理解。 思路: 判断是否染色后,再用异或的计算,相同为0,不同为一,染上R和B AC代码: PS(因为是有两条边,所以e和ne记得开N*2) #include<bits/stdc++.h> using namespace std; const int N=100010; int n,h[N],e[N*2],ne[N*2],f[N],col[N],idx; int son,cnt; int .
2021-02-02 20:52:09
348
原创 AcWing 850. Dijkstra求最短路 II
#include<bits/stdc++.h> using namespace std; const int N=150010; typedef pair<int,int> PII;//<离起点的距离,节点编号> int h[N],e[N],ne[N],idx,w[N]; int dist[N]; bool st[N]; int n,m; //在a结点之后插入一个b节点,权重为c void add(int a,int b,int c) { e[idx]=b;
2021-01-31 23:42:12
99
原创 搜素与图论总结(一)
DFS模板 以全排列为例子 #include<bits/stdc++.h> using namespace std; int a[10]; int n; bool st[10]; void dfs(int u) { if(u==n) { for(int i=0;i<n;i++) cout<<a[i]<<' '; cout<<endl; return ; } for(in
2021-01-31 23:41:53
153
转载 (转载)AcWing 849. Dijkstra求最短路 I (超级详细的题解)
Dijkstra求最短路 作者:z林深时见鹿 链接:https://www.acwing.com/solution/content/23358/ 来源:AcWing 最短路问题 朴素版本的 Dijkstra算法 Dijkstra算法 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点
2021-01-31 09:48:00
353
原创 AcWing 849. Dijkstra求最短路 I
见代码 #include<bits/stdc++.h> using namespace std; const int N=510; int dist[N];//用于存储每个点到起点的最短距离 bool st[N];//用于在更新最短距离时 判断当前的点的最短距离是否确定 是否需要更新 int g[N][N];//为稠密阵所以用邻接矩阵存储 int n,m; int dijkstra() { memset(dist,0x3f,sizeof(dist)); //初始化距离,0x3
2021-01-30 23:37:03
122
原创 Acwing 848. 有向图的拓扑序列 (拓扑排序-模拟队列和链表-模板题)
拓扑排序 只适用于有向无环图 思路: 用队列来执行,初始化所有入度为0的顶点入队 主要由以下两步循环执行,直到不存在入度为0的顶点为止 1.选择一个入度为0的顶点,并将它输出; 2.删除图中从顶点连出的所有边 判断: 循环结束后,如果输出的顶点数小于图中的顶点数,则表示该图存在回来,即无法拓扑排序 否则,输出的就是拓扑排序(不唯一) 模板: #include <iostream> #include <cstring> #include <algorithm> using
2021-01-30 20:59:15
268
原创 数组模拟队列在BFS中的运用(1)AcWing 844. 走迷宫
AcWing 844. 走迷宫 BFS思路伪代码: #include<bits/stdc++.h> using namespace std; const int N=110; typedef pair<int,int> PII; int n,m; int g[N][N]; int d[N][N]; PII q[N*N]; int bfs() { int hh=0,tt=0; q[0]={0,0}; memset(d,-1,sizeof(d)); d[0][0]=0;
2021-01-27 23:10:59
179
原创 用数组模拟队列和链表
用数组模拟队列和链表 1.用数组模拟队列 在队尾插入元素,在队头弹出元素 定义方式: int q[N],hh,tt=-1;//hh是队头,tt是队尾,令tt=-1 插入元素x:(push操作) q[++tt]=x; 弹出队头元素(pop) hh++; 取出队头元素 q[hh]; 判断队列是否为空 if(hh<=tt) not empty else empty 理解方式: 当hh++时,即弹出元素,tt++时插入元素。 2.用数组模拟链表 时间复杂度分析:链表在插入的时候可以达到
2021-01-27 22:48:48
179
1
原创 AcWing.271杨老师的照相排列【动态规划】
2020/12/20 10.02 浙江安吉 题目链接:https://www.acwing.com/problem/content/273/ 题目: 有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk) 第1排站在最后边,第 k 排站在最前边。 学生的身高互不相同,把他们从高到底依次标记为 1,2,…,N。 在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。 问一共有多少种安排合影位置的方案? 下面的一排三角矩阵给出了当 N=6,k=3,
2020-12-20 10:02:28
275
1
原创 ACwing 动态规划总论
ACwing 动态规划总论 看lyd视频总结 2020.12.18 19:41 动态规划题目特点 1.计数 有多少种方式走到右下角 有多少种方法选出k个数使得和是Sum 2.求最大值最小值 从左上角到右下角路径的最大数字和 最长上升子序列长度 3.求存在性 取石子游戏,先手是否必胜 能不能选出K个数使得和是Sum 经典例题1.LIS(求最长上升子序列) 题目描述: 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示...
2020-12-18 20:40:55
337
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅