简约而不简单
文章平均质量分 54
一些虽不起眼的程序,但总结起来,有大作用(C++)
红烧肘子肉
我是一个程序员
展开
-
简单数论(1)
【疯狂gcd】的推式子过程∑i=1n∑j=1ngcd(i,j)\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)∑i=1n∑j=1ngcd(i,j)=2∑i=1n∑j=1igcd(i,j)−∑1=1ni=2\sum_{i=1}^n\sum_{j=1}^igcd(i,j)-\sum_{1=1}^ni=2∑i=1n∑j=1igcd(i,j)−∑1=1nif(n)=∑j=1ngcd(n,j)f(n)=\sum_{j=1}^ngcd(n,j)f(n)=∑j=1ngcd(n,j)f(原创 2021-08-02 22:14:25 · 261 阅读 · 0 评论 -
图论5-最短路(II)
Part 2.5.1 负环当一张图中有负环时,这张图中经过负环的两点间最短路就不存在。因为可以无限次经过这个负环,使代价不断减小。在三种最短路算法中,SPFA是唯一一种可以处理负环的算法。由SPFA的过程,每个点最多会被其他点各更新一次,即入队次数不会超过nnn。因此如果一个点的入队次数达到了n+1n+1n+1,就说明图中存在负环。SPFA判负环的复杂度是O(nm)O(nm)O(nm)。例题2.5.1 [FAIOJ30086]判断负环模板题。例题2.5.2 [FAIOJ30085]虫洞本题原创 2021-07-27 18:53:30 · 208 阅读 · 0 评论 -
图论4-最短路(I)
三种最短路算法Floyd可求出任意两点间最短路,适合小规模稠密图(点数不超过500500500)。复杂度O(n3)O(n^3)O(n3)注意:如果nnn超过800800800,且图比较稀疏,可使用nnn次dijkstra代替Floyd。for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dis[i][j]=min(dis[i][j],dis[i][k]+原创 2021-07-27 18:52:39 · 287 阅读 · 0 评论 -
图论3-最小生成树
定义:生成树:无向图包含所有点的生成子图(即边集包含于原图),且是一棵树。最小生成树:边权和最小的生成树。基本性质:如果把边权看做代价,那么最小生成树就是使全图连通的最小代价。最小生成树同时满足整棵生成树上的最大边权最小,任意两点间的最大边权最小(这个性质由kruskal算法的执行过程即可得出)算法:Prim算法适合处理稠密图,算法复杂度O(n2)O(n^2)O(n2)kruskal算法适合处理稀疏图,算法复杂度O(mlogm)O(m\log m)O(mlogm)。另外堆优化Prim原创 2021-07-27 18:48:19 · 287 阅读 · 0 评论 -
图论2-并查集
并查集并查集维护一张无向图,支持以下两种操作:1.连接两个点2.查询一个点所在的连通块并查集的两种优化方式:路径压缩:O(α(n))O(\alpha (n))O(α(n))按秩合并:O(logn)O(\log n)O(logn)Part 1:图的连通性图的遍历也可以求图的连通性,但其复杂度为O(n)O(n)O(n),如果要多次修改并查询,复杂度无法承受。例题1:[JSOI2008][luogu1197][FAIOJ102]星球大战两种操作,删点,求全图连通块个数。并查集只支持连边,不原创 2021-07-27 18:47:27 · 151 阅读 · 0 评论 -
图论1-图的遍历
图的遍历图的遍历,就是在图上DFS/BFSDFS/BFSDFS/BFS。是对图最基本的操作。图的存储方式邻接矩阵:O(n2)O(n^2)O(n2)邻接链表:O(m)O(m)O(m)int e=0,fir[N],to[M],nxt[M],w[M];inline void adde(int x,int y,int z){ to[++e]=y,nxt[e]=fir[x],fir[x]=e,w[e]=z;}for(int i=fir[u];i;i=nxt[i])邻接动态数原创 2021-07-27 18:46:56 · 235 阅读 · 0 评论 -
二分和分治
Part 1:二分查找二分法找零点lower_boundLIS数据结构上的二分注意:二分查找可行的前提条件是序列有序!例题1:[FAIOJ2333]乐谱直接在前缀和数组上lower_bound即可。复杂度O(nlogn)O(n\log n)O(nlogn)。二分法求LIS最长不下降子序列问题可以使用树状数组解决。但有时序列范围很大或序列不是整数序列,此时树状数组的做法需要加一步离散化。但二分法可以直接解决。设fif_ifi为长度为iii的不下降子序列末尾的最小值。原创 2021-07-27 18:46:27 · 289 阅读 · 0 评论 -
动态规划整理
例题1组成平方数题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。输入输出描述输入描述一个整数n,表示要组成的数字输出描述一个正数表示最少需要几个完全平方数才能组成输入输出样例输入格式#1:4输出格式#1:1输入格式#2:10输出格式#2:2输入格式#3:19输出格式#3:3输入格式#4:245输出格式#4:2输入格式#5:328原创 2021-02-16 20:00:26 · 137 阅读 · 0 评论 -
拦截导弹问题
题目描述某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统,但是这种拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于该系统还在试用阶段。所以一套系统有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度不大于30000的正整数)。计算要拦截所有导弹最小需要配备多少套这种导弹拦截系统。输入格式n颗依次飞来的高度(1≤n≤1000).输出格式要拦截所有导弹最小配备的系统数k。样例Sample Inp原创 2021-01-21 19:35:55 · 243 阅读 · 0 评论 -
删数问题
题目描述输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。 输出新的正整数。(N不超过240位)输入数据均不需判错。输入格式n s 输出格式最后剩下的最小数。样例Sample Input 1754384Sample Output 13#include <bits/stdc++.h>using namespace std;int main(){ st原创 2021-01-21 19:35:22 · 162 阅读 · 0 评论 -
均分纸牌
题目描述有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。 例如 N=4,4 堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从原创 2021-01-21 19:34:35 · 115 阅读 · 0 评论 -
排队接水
题目描述有N个人排队到R个水龙头去打水,他们装满水桶的时间为T1,T2,…,Tn为整数且各不相等,应如何安排他们的打水顺序才能使他们花费的时间最少?输入格式输入文件共两行,第一行为n,r;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。输出格式一行,总共花费时间样例Sample Input 4 2 //4人打水,2个水龙头2 6 4 5 //每个打水时间Sample原创 2021-01-21 19:33:40 · 147 阅读 · 0 评论 -
2020-10-19
#1 新手村关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里 小玉买文具(洛谷-P1421):点击这里 小鱼的游泳时间(洛谷-P1425):点击这里关卡1-2 顺序与分支小玉家的电费(洛谷-P1422):点击这里 不高兴的津津(洛谷-P1085):点击这里 津津的储蓄计划(洛谷-P1089):点击这里 买铅笔(洛谷-P1909):点击这里关卡1-3 循环!循环!循环!三连击(洛谷-P1008)...原创 2020-10-19 22:05:25 · 539 阅读 · 0 评论 -
day1
day1 DS1堆堆是一棵树,其每个节点都有一个键值,且每个节点的键值都大于等于/小于等于其父亲的键值。每个节点的键值都大于等于其父亲键值的堆叫做小根堆,否则叫做大根堆。STL 中的 priority_queue 默认是一个大根堆。堆的操作所有堆都(高效地)支持:插入一个数(push)、查询最小/最大值(top)、删除最小/最大值(pop)。有一些堆(高效地)支持:合并两个堆(merge)、减小一个元素的值、……堆的时间复杂度不同的堆在执行不同的操作时时间复杂度各不相同,这里只介绍二叉堆(普原创 2020-08-25 08:04:17 · 153 阅读 · 0 评论 -
luoguP1001~P1005
这是一个标准代码的模板#include<iostream>using namespace std;int main(){ return 0;}下面有一些例题1. P1001 A+B题目描述输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤10^9)。输入格式两个整数以空格分开。输出格式一个整数。输入输出样例输入 #11 2输出 #13代码#include <iostream>using namespace std;int mai原创 2020-08-24 09:41:05 · 183 阅读 · 0 评论 -
二维前缀和
全部数据点击查看代码#include <iostream>#include <cstdio>using namespace std;long long a[1005][1005];long long f[1005][1005];int main() { long long n, m, k; cin >> n >> m >> k; for (long long i = 1; i <= n; ...原创 2020-08-20 11:23:18 · 159 阅读 · 0 评论 -
一维前缀和
全部数据点击查看代码#include <cstdio>#include <algorithm>#include <iostream>using namespace std;const int maxn = 1e5 + 5;int n, q, sum[maxn];int main() { scanf("%d%d", &n, &q); int x, y; for (int i = 1; i <= n; +..原创 2020-08-20 11:18:59 · 136 阅读 · 0 评论 -
大规模排序
全部数据点击查看代码、#include <cstdio>#include <algorithm>using namespace std;int a[100005], n;int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } sort(a + 0, a + n); for (i...原创 2020-08-20 11:15:03 · 184 阅读 · 0 评论 -
最大公约数和最小公倍数
原题全部数据点击下载代码#include <iostream>using namespace std;long long gcd(long long a, long long b) { if (a % b == 0) { return b; } else { return gcd(b, a % b); }}int main() { long long T; cin >> T; .原创 2020-08-20 11:08:05 · 95 阅读 · 0 评论 -
数字三角形
原题目如下FJ and his cows enjoy playing a mental game. They write down the numbers from 11 to N(1≤N≤10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. They r...原创 2020-03-01 14:10:50 · 444 阅读 · 0 评论 -
Have Fun with Numbers
Have Fun with NumbersNotice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be ano...原创 2020-01-31 14:33:05 · 150 阅读 · 0 评论 -
月饼
1020 月饼 (25分)月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我...原创 2020-01-28 14:22:36 · 246 阅读 · 0 评论 -
铺设道路
题目描述春春是一名道路工程师,负责铺设一条长度为n的道路。铺设道路的主要工作是填平下陷的地表。整段道路可以看作是n块首尾相连的区域,一开始,第i块区域下陷的深度为di。春春每天可以选择一段连续区间[L,R],填充这段区间中的每块区域,让其下陷深度减少1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为0。春春希望你能帮他设计一种方案,可以在最...原创 2020-01-27 12:43:34 · 535 阅读 · 1 评论 -
机器翻译
题目背景小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。题目描述这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。...原创 2020-01-26 21:28:41 · 256 阅读 · 0 评论 -
神奇的幻方
题目描述幻方是一种很神奇的N∗N矩阵:它由数字构成,且每行、每列及两条对角线上的数字之和都相同。当N为奇数时,我们可以通过下方法构建一个幻方:首先将1写在第一行的中间。之后,按如下方式从小到大依次填写每个数若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列; 若(K−1)在最后一列但不在第一行,则将K填在...原创 2020-01-26 20:56:10 · 1077 阅读 · 0 评论 -
数楼梯
题目描述楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编一个程序,计算共有多少种不同的走法。输入格式一个数字,楼梯数。输出格式走的方式几种。输入输出样例输入 #14输出 #15说明/提示60% N<=50100% N<=5000f数组是高精,其实就是斐波拉契数列加一个高精#include<iostrea...原创 2020-01-25 19:00:39 · 703 阅读 · 0 评论 -
高兴的津津
题目描述津津上高中了。她在自己的妈妈的魔鬼训练下,成为了一个神犇,每次参加一次OI比赛必拿Au虐全场。每次她拿到一个Au后就很高兴。假设津津不会因为其它事高兴,并且她的高兴会持续T天(包包含获奖当天。就算在高兴的时候再次拿到Au,他的高兴也只能维持包括这次拿奖之日起T天,而不是额外增加T天的高兴时间,除非之后再拿奖)。请你帮忙检查一下津津接下来的的日程安排,要参加N场比赛,看看接下来的几天,津...原创 2020-01-25 13:33:45 · 458 阅读 · 0 评论 -
最大子段和
最大子段和原创 2020-01-23 19:48:31 · 174 阅读 · 0 评论 -
B进制星球
题目背景进制题目,而且还是个计算器~~题目描述话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。输入格式共3行第1行:一...原创 2020-01-22 20:10:25 · 530 阅读 · 0 评论 -
幂次方
题目描述任何一个正整数都可以用2的幂次方表示。例如同时约定方次用括号来表示,即a^b可表示为a(b)。由此可知,137可表示为:进一步:7= 2^2+2+2^0(2^1用2表示),并且 3=2+2^0所以最后137可表示为:又如:所以1315最后可表示为:输入格式一个正整数n(n≤20000)n(n≤20000)。...原创 2020-01-20 21:04:38 · 283 阅读 · 0 评论 -
二维数组搜索
二维数组搜索练习!!!原创 2020-01-11 20:58:01 · 214 阅读 · 0 评论 -
计算天数
题目描述输入年份与月份,求该月共有多少天。输入输出描述输入描述输入两个空格隔开的正整数year和month,分别表示年份和月份输出描述输出对应year这一年month这个月的天数。输入输出样例样例输入2000 2样例输出29数据范围限制1000<=year<=3000,1<=month<=12代...原创 2019-07-25 20:46:28 · 273 阅读 · 0 评论 -
回文中的回文
题目描述有一个字符串,如果它是回文串,那么把他截成两段,再判断是否是回文串,直到长度为2输入输出格式输入格式:第一行输入一个字符串输出格式:输出是否是回文串输入输出样例输入样例#1: 输出样例#1:abbaabba YES输入样例...原创 2019-07-25 18:48:19 · 187 阅读 · 0 评论 -
a?b?c
题目描述输入a,b,c三个整数(0≤a,b,c≤10000000),输入两个符号x,y,为(+,-,*,/)输入输出格式输入格式:第一行a,b,c三个整数第二行x,y两个符号输出格式:输出a?b?c,保留整数位输入输出样例输入样例#1: 输出样例#1:...原创 2019-07-25 18:48:09 · 214 阅读 · 0 评论 -
点子盲文
点子盲文XXX在1825年发明了一种由六个点子组成的点子盲文,从而使盲人的阅读和书写更加方便快捷多了。题目描述输入一个m行n列的矩阵如果是“a”输出:1如果是“b”输出:2如果是“c”输出:3如果是“d”输出:4输入输出格式输入格式:第一行m和n两个整数下面m行字符为矩阵输出格式:数字矩阵,规则如上⬆输入输出样例...原创 2019-07-25 18:47:54 · 375 阅读 · 0 评论 -
三个数相加等于0
题目描述输入一个数组,他有n个元素,如果其中有三个数和为零,那么输出Yes,否则输出No输入格式第一行一个整数n表示数组元素个数第二行a数组输出格式Yes或No输入样例4-2 1 1 2输出样例Yes参考代码#include<bits/stdc++.h>using namespace std;int ...原创 2019-07-25 18:47:35 · 1939 阅读 · 0 评论 -
小明的问卷
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入输出描述输入格式两行,第一行一个数n,表示随机数的个...原创 2019-07-13 20:55:44 · 269 阅读 · 0 评论 -
喝汽水
题目描述有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝。...原创 2019-07-13 20:19:02 · 131 阅读 · 0 评论 -
P1534 不高兴的津津(升级版)
题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。这次与NOIp2004普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后...原创 2019-07-01 21:32:03 · 450 阅读 · 0 评论 -
2019 年海淀区青少年程序设计挑战活动复赛初中组 试题4:组合树(tree)
2019 年海淀区青少年程序设计挑战活动复赛初中组C++语言试题第四题输入文件:tree.in输出文件:tree.out时间限制:4s空间限制:512MB【题目描述】Bob想要和Carrol玩游戏。但Carrol觉得玩游戏太无聊,就和Tuesday去写歌了。于是现在Bob来找你玩游戏。这个游戏是这样的:给定一棵n个节点的树, 1号点为根节点,设v的父亲是f(v) 。其中每个节点有一...原创 2020-01-29 18:46:37 · 954 阅读 · 0 评论