牛客多校训练补题记录
white Era
这个作者很懒,什么都没留下…
展开
-
牛牛的数列
https://ac.nowcoder.com/acm/problem/13134解题思路:a表示数列,dp表示到当前位置的严格递增子序列长度,例如下面这个例子a : 7 2 3 1 5 6dp:1 1 2 1 2 3仔细观察,发现有两种情况第一种情况就是断点前的数改变(例如7 2 3,其中的2就是断点,代码表示i-dp[i]+1)如果断点前面的那个数改变,并且能够小于断点的值,还要两段和起来子序列仍然保持严格递增的,那么这两个子序列就可以连接起来,转换成代码就是 a[i-dp[i]+1]原创 2022-05-18 16:23:17 · 286 阅读 · 1 评论 -
牛客上海理工大学选拔赛D
思路:看到数据大小想到dfs肯定暴了,看题中给的数列,化成二进制,发现与n有某种关系,剩下的就可以敲代码了。。一般看到这样的数据大小要先想到位运算#include <iostream>#include <algorithm>#include <map>#include <set>#include <string>#include <sstream>#include <vector>using names.原创 2022-03-26 17:36:07 · 285 阅读 · 0 评论 -
牛客(基础位运算)起床困难症
这道题有个问题希望有大佬能解答一下,(在后面,下面思维表达不太好,大家忽喷)采用贪心策略,题目要我们从0-m中选一个数使得经过一系列位运算后的结果最大那就分别用两个bitset表示每一位初始为0,每一位初始为全1,方便下面表示一个用zero,一个用one表示zero,one根据输入的数据都进行相应的位运算考虑zero全0时,初始值就不会超过m,经过位运算后,那就把不为0的位化成十进制加到答案上如果zero第i位上为0,one第i位上为1就要看(1<<i)<=m满不满足,满足也把.原创 2022-03-23 22:06:57 · 290 阅读 · 0 评论 -
牛客最短哈密顿路径(位运算)
通过dp位运算来解决思路:第一想到状态dp,用二进制位表示每个节点那么(1<<n) -1表示全1情况也就是包含所有节点dp[1<<n][n]第一维表示走过0,1,2,3.。。。。n-1个点的所有情况第二维表示最后一个点到达的的点弄清楚这几点之后代码就很简单了菜鸡的我想不到,只能看大佬的题解。。#include <iostream>#include <algorithm>#include <cstring>using nam原创 2022-03-21 17:00:00 · 193 阅读 · 0 评论 -
64位数相乘
诶,我怎么没想到把一个数分解成二进制,再用二进制化十进制的方法相加,那不就等于一个数乘以多个数了嘛,就不会越界了,,,还傻乎乎的开平方找约数。。。。#include <iostream>#include <cmath>using namespace std;typedef long long ll;ll x,y,mod;int main(){ ios_base::sync_with_stdio(false); cin.tie(0),cout.tie(原创 2022-03-20 21:02:00 · 260 阅读 · 0 评论 -
牛客练习赛97_D
…深搜老以为会爆。。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1000010;const ll mod = 998244353;struct edge{ int to,next;}edges[N<<2];int head[N],tot=0;int n;ll x,y;void add(int u,int v){ edges[++.原创 2022-03-13 21:58:09 · 246 阅读 · 0 评论 -
牛客练习赛97_C
比赛时题意没理解到位,没想到 vt.push_back(-p[j] - max(a[j],0));这一步。。#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long ll;const int N = 100010; int a[N],p[N],b[N];int main(){ ios_base::sync_wi.原创 2022-03-11 22:54:17 · 452 阅读 · 0 评论 -
湖南ACM第6届D
在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。如果球的速率为v,s个时间单位之后球心在什么地方?Input输入文件最多包含25组测试数据,每个数据仅一行,包含8个正整数L,W,x,y,R,a,v,s(100<=L,W<=105, 1<原创 2022-03-02 21:48:15 · 120 阅读 · 0 评论 -
四川大学(新生赛)羊工八刀(为解决)
题目:https://ac.nowcoder.com/acm/contest/25625/E#include <bits/stdc++.h>#define int long longusing namespace std;const int maxn=1e6+5;const int mod=1e9+7;int t,n,cnt;char a[maxn];vector<int> v;int sum[maxn];signed main(){ cin>&原创 2021-12-12 20:21:41 · 625 阅读 · 0 评论 -
四川大学(新生赛)papaya的传送门
题目:https://ac.nowcoder.com/acm/contest/25625/L解题思路:这就是一道水题。。。求出点到圆心的距离,然后减去半径就是从起点到机场的距离d,需要判断当前是否在机场,还有就是k是否大于d,如果大于那么就需要两次传送,第一次到一个机场外的点,第二次从这个点到机场。,如果k<d,那么直接d/k,如果有小数,那么答案再加1#include <iostream>#include <cmath>using namespace std;原创 2021-12-12 20:16:50 · 473 阅读 · 0 评论 -
SCOI2005最大子矩阵和
题目:https://ac.nowcoder.com/acm/problem/20242链接:https://ac.nowcoder.com/acm/problem/20242来源:牛客网题目描述这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵 不能相互重叠。输入描述:第一行为n,m,k(1 ≤ n ≤ 100,1 ≤ m ≤ 2,1 ≤ k ≤ 10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。原创 2021-11-28 23:13:16 · 193 阅读 · 0 评论 -
NC23486(小A和小B)
题目:https://ac.nowcoder.com/acm/problem/23486链接:https://ac.nowcoder.com/acm/problem/23486来源:牛客网题目描述小A与小B这次两个人都被困在了迷宫里面的两个不同的位置,而他们希望能够迅速找到对方,然后再考虑如何逃离迷宫的事情。小A每次可以移动一个位置,而小B每次可以移动两次位置,小A移动的方向是上下左右左上左下右上右下8个方向,小B移动的方向是上下左右4个方向,请问他们最早什么时候能够找到对方,如果他们最终无法相遇,原创 2021-11-27 20:53:32 · 297 阅读 · 0 评论 -
xay loves count(第七场H题)
开始写这个题的时候没有考虑i*j越界。。。就一直段错误因为数据<=1000000所以可以把每个数出现的次数存起来,那么通过ai * aj == ai*j就可以求出每种可能AC代码:#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef long long ll;const int N = 1000010;inline int rea.原创 2021-08-08 16:27:51 · 134 阅读 · 0 评论 -
xay loves or
位运算位运算。。。AC代码:#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>using namespace std;typedef long long ll;int main(){ ll x,s; while(~scanf("%lld%lld",&x,&s)){ ll ans = .原创 2021-08-08 15:01:06 · 70 阅读 · 0 评论 -
Intervals on the Ring(多校6 I题)
每次比赛都被我弄成了,牛客补题比赛。。英文题总是读不通顺,,也没想到是德摩根律AC代码:#include <iostream>#include <stdlib.h>#include <algorithm>#include <string.h>using namespace std;struct Interval{ int l,r; bool operator < (const Interval &b){ .原创 2021-08-06 17:03:31 · 70 阅读 · 0 评论 -
Hamburger Steak(第六场F题)
感谢这位大哥写的题解,,看懂了,,,花了一个小时慢慢的把它写出来,写完还是放了两个地方的错误,第一点是能完全煎完一块牛排的时候没有求煎完这块牛排的时候当前煎锅还剩多少,第二是忘了下标是从1开始AC代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long ll;const int N = 100050;struct .原创 2021-08-06 17:00:32 · 99 阅读 · 0 评论 -
Boxes
原来就是道简单的概率计算题。。。根据题目意思那我们知道可以分为两种情况第一种,不要提示,我直接把所有盒子打开,那么就知道都是什么球了,这时候概率就是1,所有费用加起来乘上1就是期望。。。第二种,我找小G要了提示需要成本c,那么我现在知道黑球有多少了,如果如果黑球=n个盒子,那么就说明不用开盒子了,如果黑球=0那么也不要开盒子了,如果黑球!=n个,那么我们开盒子,因为是最小期望,那么我们优先开当前花费最小的盒子,知道了当前盒子的球的颜色,那么就可以知道后面球的概率,接下来数学期望的就是了。。AC代..原创 2021-08-05 11:10:39 · 86 阅读 · 0 评论 -
King of Range
看到大佬的题解都是懵的,啥是st表??马上百度看了下,发现原来是用来求区间最值的。。下面是根据百度得到的st表讲解和大佬的题解写出来了。。。菜了AC代码:#include <iostream>#include <algorithm>#include <stdio.h>using namespace std;typedef long long ll;const int N = 1e5+10;int st_max[N][22],st_min[N][2.原创 2021-08-04 17:56:47 · 57 阅读 · 0 评论 -
https://ac.nowcoder.com/acm/contest/11255/C
看了大佬的给的思路,然后敲出一个不能说一样,只能说毫无差别的代码。。。一道简单题让我想的有多复杂,看到最长公共子序列以为就是用那个经典dp,,于是想啊想,发现这样搞一遍下来直接超时。。。。真是菜。。。被各种题打击到了连签到题都做不出来。。AC代码:#include <iostream>#include <string>#include <string.h>using namespace std;int main(){ int a,b,c.原创 2021-08-04 15:51:02 · 787 阅读 · 0 评论 -
Average
原来这题是用前缀和加浮点二分做的。。都没学过。。。菜了菜了这里有位大佬写的很详细——》https://www.acwing.com/solution/content/1148/AC代码:#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[100050],b[100050];double sum[100050];int n,m,x,y;b.原创 2021-08-04 15:11:10 · 93 阅读 · 0 评论 -
Inverse Pair
有没有大佬能帮我解释一下,为什么可以通过树状数组求出答案?归并排序AC代码:#include <iostream>using namespace std;long long ans = 0;int a[200050],b[200050],mp[200050];void Sort(int l,int r){ int mid = (l+r) >> 1; if(l == r) return; Sort(l,mid); Sort(mid+1,r); .原创 2021-08-04 14:22:15 · 68 阅读 · 0 评论 -
Just a joke
题目说了两种操作:删除一条边删除一个联通分量(包括节点)可以观察到,每次做一次操作都会出现奇偶性的变化,那么就通过n+m%2来判断,,AC代码:#include <iostream>using namespace std;int main(){ ios_base::sync_with_stdio(false); int n,e; cin >> n >> e; int ans = 0;.原创 2021-08-04 09:54:47 · 106 阅读 · 0 评论 -
E-Math
比赛的时候,看的一脸懵,,题目那个表达式是干啥的,也不是等式,,看到题解公式的时候才知道是把它写成k(xy + 1) = x^2 + y^2 ,然后根据韦达定理知道y1 + y2 = -b/a,就得出这个(x,kx - y),,在就是打表出来找到规律。。但是还是不明白题目中给的表达式,怎么就变成等式了。。数学没学好(写代码时,不知道为什么我用vector直接报内存溢出)AC代码:// #include <iostream>// #include <algorithm>/..原创 2021-08-03 17:06:36 · 106 阅读 · 0 评论 -
Black and white
大佬竟然可以用最小生成树做,我是没想到,,写个笔记记录下来。。虽然程序可能求不出最优解,,但是可以求出最优值也是不错了。。AC代码:#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N = 3e7+10;const int M = 10100;int n,m,a,b,c,d,p;int f[M];struct node{ int.原创 2021-08-03 14:53:43 · 98 阅读 · 0 评论 -
Rise of Shadows
题目:https://codeforces.com/gym/103202/problem/IAzeroth is a world full of fantasy. In Azeroth, there are H hours in a day and M minutes in an hour.You found a clock made from Azeroth. The clock has two hands — the hour hand and the minute hand. The two ha原创 2021-08-02 16:22:47 · 819 阅读 · 0 评论 -
Scholomance Academy
这题还是没懂题意,只会根据例子大致推测,具体为什么是这样还是没懂。。希望有大佬能在下方评论一下AC代码:#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;struct node{ char op; int s;}a[100050];int cmp(node a,node b){ if(a.s == b.s){ return a.op &.原创 2021-08-02 15:36:03 · 470 阅读 · 0 评论 -
Kobolds and Catacombs
一个简单的排序问题没看出来。。AC代码:#include <iostream>#include <algorithm>using namespace std;int a[2000020],b[2000020]; //一个用来存放原来的数,一个用来存放排好序的数int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >>.原创 2021-08-02 10:24:06 · 414 阅读 · 0 评论 -
Penguins
这题知道是个迷宫问题,我既然广度半天广度不明白,,,看了大佬的代码才知道原来自己有多菜。。。。。(虽然一直很菜)AC代码:#include <bits/stdc++.h>using namespace std;const int N = 20;int d[4][2] = { {1,0},{0,-1},{0,1},{-1,0} }; //D,L,R,Uint mirror(int i) { if (i == 1 || i == 2) { return i ^ 3; }.原创 2021-08-02 10:05:05 · 79 阅读 · 0 评论 -
Stack
构造解的问题太难了,,,看了好久没有注释的大佬代码,才大概清楚了,,根据题目给的伪代码,我们可以知道,栈中的元素个数是单调不减的,并且栈中元素个数绝对不会超过遍历的下标i(下标从1开始),如果超过就不存在解,那么这又有什么用呢,,既然是单调不减的,那么我们可以把位置的栈元素个数求出来,剩下的看代码,不太好表达出来。。其实就是还没完全懂AC代码:#include <iostream>#include <vector>using namespace std;int mai.原创 2021-08-01 20:48:42 · 97 阅读 · 0 评论 -
Girlfriend
想不到竟然是用初高中的数学知识,,,我都忘得差不多了,,看了某位大佬的博客,知道原来是求两球体的交集。。我的博客纯属学习笔记,没有抄袭干啥的,记录我学了那些知识,解决了哪些题目,同时给和我一样的小白参考的下面大佬的写证明看得清晰一些,感谢大佬写得这么好,不过图里面有一点错误,那个D也要除以(k*k - 1) 如下图所示:感兴趣的可以去看看原文···>https://www.cnblogs.com/cyhforlight/p/15033780.html,当时看到可以推出园的标准方程,于是我自.原创 2021-08-01 17:43:55 · 78 阅读 · 0 评论 -
Draw Grids
思路:在n行n列里面给相邻的两个点画边,不能有圈,可以在草稿纸上面画一下,那么你就知道最多只有nm-1条边可以画,如nm-1是奇数的话那么你必胜,否则必输AC代码:#include <iostream>using namespace std;int main(){ int n,m; cin >> n>> m; puts((n*m-1)%2 == 1? "YES":"NO"); return 0;}.原创 2021-08-01 11:47:29 · 85 阅读 · 0 评论 -
Game of Swapping Numbers
看了大佬的解释还是没真没看懂为什么可以怎么计算,,写个笔记回头看证明:看到这题想到的是如果我能定量的知道每次交换带来的收益就好了,如果每次交换的收益都是最优的那么结果也是最优的这就是经典的贪心算法,下面对交换的贡献进行讨论:对于(a1,b1)(a2,b2)由于绝对值的存在无论a1,b1大小其值都等与大数减小数,理解到了这一点其实对a操作也可以视为对b操作,我们一定可以满足(a1>b1&&a2>b2)(不满足将其对应位置的ai,bi互换结果保持不变)有小伙伴可能不明白为什么可.原创 2021-07-31 19:56:20 · 118 阅读 · 0 评论 -
Find 3-friendly Integers
思路:打印1-99的数没看出什么规律,但是到100以上的数就一定有连续的子序列mod3==0,根据直播听的鸽舍原理,以及同余原理可以知道,可以把每一位看成0,1或2,那么他们任意组合都满足 mod3 == 0所以,一百及一百以上的所有数都是3的friendly IntegerAC代码:#include <iostream>#include <stdio.h>using namespace std;int main(){ int t; sc.原创 2021-07-31 17:13:50 · 100 阅读 · 0 评论 -
Ball Dropping
思路:首先我们要知道相似三角的概念,就是两个相似三角形每条对应的边成比例剩下的看图:AC代码:#include <iostream>#include <math.h>#include <stdio.h>using namespace std;int main(){ double r,a,b,h; scanf("%lf%lf%lf%lf",&r,&a,&b,&h); .原创 2021-07-31 15:12:22 · 214 阅读 · 0 评论 -
Alice and Bob
题目:https://ac.nowcoder.com/acm/contest/11166/A思路:由于题目数据发我在5000左右,那么我们可以通过打表来判断输赢,用f[i][j]存储转态,i表示第一堆石子,j表示第二队石子,我们可以把所有的必胜状态给找出来,如果两堆石子一样我们可以一次性拿完是必胜状态,如果第一堆石子是k第二堆石子是s*k,那么也是必胜状态,说要如果是必胜状态那么一定是Alice胜,那么来考虑一开始Alice面对f[i][j] = 0的状态,如果存在一个f[i1][j1] = 0,且原创 2021-07-31 11:28:56 · 104 阅读 · 0 评论