算法方法总结
学习
小齐不怕小韩
学习、努力、改变
展开
-
栗酱的连通图
本题若要使每组数据中边权和最大,则需使该组数据最大值位于中心,而其它值均与该最大值连接即可链接:https://ac.nowcoder.com/acm/problem/14678来源:牛客网题目描述萌萌哒栗酱有n个点,第i个点有点权ai(ai为偶数),你可以在任意两点之间添加一条边,每一条边的边权为连接它的两个点的点权之和除以2。现在她需要添加n-1条边,使任意两点相互连通,并且连通后的边权和最大。输入描述:第一行一个数T,表示有T组数据。对于每组数据,第一行输入一个数n,表示点的数量,接原创 2021-01-31 19:50:16 · 154 阅读 · 0 评论 -
一元三次方程求解
本题采用二分思想和暴力做法,不断的去枚举-100到100之间的数去判断零点的位置#include <bits/stdc++.h>using namespace std;double a,b,c,d;double f(double x){ return (x*x*x*a+x*x*b+x*c+d);}int main(void){ double x1,x2,mid; cin>>a>>b>>c>>d; for(double原创 2021-02-01 22:36:07 · 303 阅读 · 0 评论 -
小杰的签到题
链接:https://ac.nowcoder.com/acm/problem/14680来源:牛客网题目描述小杰组织了一场比赛,在比赛前需要安排队伍签到,但他不确定签到要花多久时间,现在他来请求你的帮助。已知签到是在一个体育馆,该体育馆布置有三个桌子以供不同队伍的队伍同时签到,一个桌子最多只能有一支队伍签到,一支队伍只需在一张桌子前完成签到即可。如果三个桌子都有队伍在签到,其它需要签到的队伍就需要在任意一个桌子前排队,等待签到。我们假设在t=0的时刻开始接受签到,n支队伍分别在a1,a2,…,an时原创 2021-02-01 15:57:13 · 663 阅读 · 0 评论 -
一堆点
链接:https://ac.nowcoder.com/acm/problem/15592来源:牛客网题目描述这个问题很简单,有n个三维点(x,y,z),要求按照它们距离原点的距离来排序,若距离相等,则按照x的顺序递增,若x也相等,则按照y递增的顺序递增(依次类推,不会输入重复点)输入描述:第一行输入一个正整数n(1<=n<=10^7),表示有n个三维点随后n行,每行包含3个实数x,y,z表示一个点的坐标(均在double类型内)。输出描述:按照排序之后的结果,每行输出一个三维点的原创 2021-02-01 17:08:50 · 760 阅读 · 2 评论 -
多源最短路和单源最短路
多源最短路例题:[USACO08OPEN]Clear And Present Danger S#include <bits/stdc++.h>using namespace std;int n,m,a[110][110],b[10010];int main(void){ cin>>n>>m; for(int i=1;i<=m;i++) cin>>b[i]; for(int i=1;i<原创 2021-02-05 19:26:25 · 447 阅读 · 2 评论 -
例题1:整数解
Problem Description有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。例如:x + y = 9,x * y = 15 ? 找不到这样的整数x和y1+4=5,14=4,所以,加起来等于5,乘起来等于4的二个整数为1和47+(-8)=-1,7(-8)=-56,所以,加起来等于-1,乘起来等于-56的二个整数为7和-8Input输入数据为成对出现的整数n,m(-10000&l原创 2021-01-27 21:32:43 · 358 阅读 · 0 评论 -
链表及其基本操作
1.链表的定义链表:由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。//我们用结构体去存储每一个节点//此处进行结构体的定义并进行重命名typedef struct Node{ int data; struct Node*next;}Node;2.创建单链表创建单链表常见的有头插法和尾插法两种,下面我们进行简单介绍:(1).头插法步骤:(假设要加入的新节点的数据域是x)1.创建头节点head,并且将头结点hea原创 2021-05-30 09:17:34 · 595 阅读 · 18 评论 -
c/c++中读入字符串
1.scanf scanf函数一般格式为scanf(“%s”,st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格,tab或者回车的字符串是不可以的。可以用scanf(“%[^/n]”,str)//遇到回车结束,/n换成c则表示遇到字符c结束。 2. c...转载 2021-02-07 15:34:51 · 1379 阅读 · 0 评论 -
蛇形矩阵
acwing756题输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数n和m。输出格式输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。数据范围1≤n,m≤100输入样例:3 3输出样例:1 2 38 9 47 6 5#include <bits/stdc++.h>using namespace std;int res[110][110];int原创 2021-02-07 11:53:23 · 100 阅读 · 0 评论 -
完全数(优化解法)
在写这一题的过程中,我前几次提交的结果全部 tle,后来我发现x<=1亿,而在c++中每秒大约可进行1亿次操作,因为此次用常规写法会超时,必须要对解法进行优化。我们知道一个数的因数是成对存在的,所以可以在1~sqrt(x)的范围中进行循环求因数,若在1到sqrt(x)中存在因数 i,则在sqrt(x)到 x 中也必定存在因数 x/i;否则不存在因数,经过此优化,则会将循环次数降低为约一百万次,不会超时。一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。例如,6就原创 2021-02-06 14:06:12 · 1715 阅读 · 6 评论 -
while的一些用法
" while(cin>>n,n<=0); "用法:当n<=0时会一直读取n;直到n>0时,读取n,然后才退出此while循环读入两个整数值A和N,计算从A开始的N个连续整数的和。注意,如果读入的N为0或负数,则继续读取数字直至读入N值为正整数为止。输入格式共一行,包含整数A和若干个整数N。输出格式一个整数,表示从A开始的N个连续整数的和。数据范围1≤A≤100,−100≤N≤100输入样例1:3 2输出样例1:7输入样例2:3 -1 0 -2原创 2021-02-03 18:46:48 · 1446 阅读 · 0 评论 -
曼哈顿距离的应用之打印N阶菱形
在本题中可以应用曼哈顿距离进行解题,即当平面上各点到菱形中心点的横、纵距离之和小于等于n/2(也即|Xi-Xz|+|Yi-Yz|<=n/2)时,输出" * ",否则输出空格((Xz,Yz)为待打印菱形的中心点)输入一个奇数n,输出一个由‘*’构成的n阶实心菱形。输入格式:一个奇数n。输出格式:输出一个由" * "构成的n阶实心菱形。样例1:输入样例:5输出样例: * *** ***** *** * #include <bits/stdc++.h&g原创 2021-02-03 16:53:51 · 496 阅读 · 4 评论 -
进击吧!阶乘(高精度)
在写这一道题的过程中我发现了一个有趣的现象,就是下面的两种写法本质上是相同的,但为什么第一种做法正确,而第二种做法错误呢?我仔细想想,N是0<=N<=10000,所以我感觉第二种做法中当最后一次for循环结束时所得的 t 可能是非常大的数,有可能会超过int的范围,所以可能不能直接push_back()到数组中,所以我们采用第一种写法较为稳妥。链接:https://ac.nowcoder.com/acm/problem/15064来源:牛客网题目描述给定一个整数N(0≤N≤10000),原创 2021-02-02 11:35:19 · 142 阅读 · 0 评论 -
回文数与回文字符串的判断方法
判断一个数是否为回文数,就是要判断当这个数反向排序时所得的自然数是否与原数相等,若相等则为回文数。例题如下:链接:https://ac.nowcoder.com/acm/problem/22169来源:牛客网题目描述今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。输入描述:输入一个整数n(1 <= n <= 100000)输出描述:从1开始按从小到大的顺序输出所有回文原创 2021-01-31 16:47:33 · 1140 阅读 · 2 评论 -
printf输出时字段宽度的设定方法
让我们通过一个小例子进行理解,看看字段宽度在打印时的效果#include <bits/stdc++.h>using namespace std;#define lz 683int main(void){ printf("*%d*\n",lz); printf("*%2d*\n",lz); printf("*%9d*\n",lz); printf("*%-9d*\n",lz);}//输出如下:*683**683** 683**6原创 2021-01-31 11:24:00 · 4555 阅读 · 0 评论 -
&与&&有什么区别?
一、简要说明 按位与:a&b是把a和b都转换成二进制数然后再进行与的运算; 逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。 例如: a&b 9&8 1001 1000 结果是1000 a&&b &...转载 2021-01-30 12:21:19 · 973 阅读 · 0 评论 -
通过定义一个函数实现判断素数的方法
素数的定义:质数(又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。 大于1的自然数若不是素数,则称之为合数(也称为合成数)。如果我们想判断一个数n是素数,则我们只需要证明当2<=i<=sqrt(n)时,任意的n%i ! = 0即可我们通过下边的例题理解例题如下(hdu2098):Problem Description把一个偶数拆成两个不同素数的和,有几种拆法呢?Input输入包含一些正的偶数,其值不会超过1原创 2021-01-27 19:33:57 · 7535 阅读 · 0 评论 -
关于输出时末尾不加空格的方法以及“%d“和“%02d“等类型的printf的格式修饰符的使用方法
在写的时候关于有一些题目输出时要求末尾不加空格,我发现可以通过bool类型去解决。例如hdu2099题:Problem Description一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?Input输入数据有若干组,每组数据包含二个整数a,b(0< a<10000, 10< b<100),若遇到0 0则处理结束。Output对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没原创 2021-01-27 18:08:20 · 2173 阅读 · 3 评论