- 博客(11)
- 收藏
- 关注
原创 2021-10-14
生成字符串太离谱了,本来以为是搜索,结果却是组合数学!!!,简单来说,就是这样:(嫖张图)然后就相当于从(0,0)走到(n+m,n-m),不考虑限制时有C(n+m,m)种走法然后我们考虑不可以的情况,就是m少走了一步,就是C(n+m,m-1)种,所以总共就是**C(n+m,m)-C(n+m,m-1)**种,然后就简单起来了先处理阶乘,再用快速幂计算逆元#include <bits/stdc++.h>#define LL long long#define M 20100403usin
2021-10-15 16:27:41
933
原创 2021-10-13
完了,不知道从哪天开始了,所以会有点长逃亡的准备(hallows)经典的多重背包。#include<bits/stdc++.h>using namespace std;int n, m, V[5010], W[5010], C[5010];int f[50010], q[50010];int calc(int i, int u, int k) { return f[u + k*V[i]] - k*W[i];}int main() { scanf("%d%d",&
2021-10-15 11:31:14
237
原创 2021-10-7pm
松鼠聚会???什么东西?,建议直接暴力枚举,然后n^2的效率告诉你过不了,于是我反手打开百度 意识到这个题是将切比雪夫距离(点它) 转成曼哈顿距离,然后就是把(x,y)变成了(x+y,x-y)要除2的,但是可能会有小数,所以先不除,就最后距离除2就ok,然后分别对每个点的x,y排序(有个前缀和),处理为递增的,然后找下标,就可以快速求距离和了#include <bits/stdc++.h>#define LL long long#define MAXN 100005using name
2021-10-08 11:51:08
112
原创 2021-10-7
Sightseeing Cows首先,我们要明白,这道题可能有负环,因此,我们要用SPFA来做,别问,问就是不会,然后可以二分,因为是个0/1分数规划,所以对于任意的环,求出一个mid并且判断二者关系后就可以二分了。**注意!!!**每次我们要建一个新图跑SPFA求最短路。(在pd()里面)#include<bits/stdc++.h>#define N 1006#define M 5006#define eps 1e-6using namespace std;int n,m,c
2021-10-08 10:32:42
92
原创 2021-10-06
数学知识反素数合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入反素数首先,该题数据范围较大,10910^9109,因此不能朴素枚举,又因为相当于是求围内约数最多的数,可以想到:n=2a×3b……n=2^a \times 3^b……n=2
2021-10-06 21:12:35
101
原创 2021-09-30
聪明的质检员额,这道题刚开始给我整蒙了,看这数据就……会T掉。所以:前缀和+二分:在二分W参数的函数中计算能算入的矿石的前缀和,在w[i]>=W时这个i矿石会在统计里(若<W就不管它了直接pre[i]=pre[i-1]矿石价值和是:pre_v[i]=pre_v[i-1]+v[i],前面的和加上当前这一个i矿石;矿石数量和是:pre_n[i]=pre_n[i-1]+1。就可以愉快的写出for(int i=1;i<=n;i++){ if(f[i].val>=x)pre_
2021-09-30 16:27:38
260
原创 2021-09-28
扫雷初看题目……熟悉而简单恶心然后看到m=2……嗯,简单起来了还是不会啊所以,想了个暴力……W了(其实暴力是可以过的……因为暴力加点优化很快就能回溯的,有时暴力其实是一种好方法然后快乐摆烂#include<bits/stdc++.h>#include<cstdlib>#include<ctime>#define LL long longusing namespace std;int random(int n){ return (LL)rand()*
2021-09-28 21:07:45
108
原创 2021-09-26
自然数拆分完全背包???笑死,刚开始根本没想到,以为是组合数学行了,既然是背包,就很简单了。不过还是写一下数学:转移方程: for(int j=1;j<=i;j++) f[i][j]=((LL)f[i-1][j-1]+(LL)f[i-j][j])%mod;然后我发现书(《算法进阶》)上还有原码……背包的:f[0]=1;for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ f[j]=(f[j]+f[j-1])%mod
2021-09-26 21:15:49
300
原创 前k大的数
笑死,如果能直接用sort,谁要学qsort附上链接,原地学习:qsort函数使用方法总结(详细全面+代码)_嵌入式与Linux那些事的博客-CSDN博客_qsortOK,学懂了就好了代码:#include<bits/stdc++.h>using namespace std;//priority_queue<int>q;//其实开始想用优先队列的,数据太大溢出了int n,m,x,maxx,f[6000001];template <typename T
2021-09-24 17:02:50
80
原创 灯泡——一个数学题
额就是相似+对勾函数如图然后附上代码#include<bits/stdc++.h>using namespace std;int n;double H,h,D,a;int main(){ scanf("%d",&n); while(n--){ scanf("%lf%lf%lf",&H,&h,&D); a=H-sqrt(D*H-D*h); if(a<0)printf("%.3f\n",D*h/H); else.
2021-09-24 16:54:27
95
原创 2021-09-24
大神排队题目描述现在共有n个同学要排成一列,每个同学有两个属性:影响力和承受能力。给一个同学造成的心理创伤指数等于所有在他前面同学的影响力之和减去他的承受能力。请安排一下排队顺序,尽量使受到心理创伤最大的同学少受创伤。输入第1行是整数n,表示同学人数。第2~n+1行,每行两个自然数,分别是该同学的影响力和承受能力。输出输出1行1个整数,为你安排的顺序中受到心理创伤最大的同学受到的创伤。思路:(贪心)对于所有的人,所受伤害为总伤害-自己创伤-承伤。又总伤害一定,所以就把伤害和承伤能力作为指
2021-09-24 16:34:20
702
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人