代码模板
ykycode
安徽大学计算机学硕。
两次获得大学生数学竞赛省一等奖,且排名前列。
蓝桥杯C++组省一、国三。
毕业曾被国家电网录用,热爱代码的心让我选择了一家上市公司的C++开发岗。
后来又转行Java开发。
展开
-
【数据结构】字典树(Trie树)算法总结
对于每个数,先插入,然后再找和这个数异或最大的数,找的方法是找已存储在字典树的数,从高位到低位,尽量找和当前数该位不同的数。最终得到的数即为所求。原创 2023-12-07 21:47:26 · 1035 阅读 · 0 评论 -
区间合并算法总结
区间合并使用贪心算法,对于区间问题,通常需要对左端点排序、右端点排序或者左端点和右端点双关键字排序。2. 扫描过程中,每次维护一个当前的区间。1. 按照区间左端点排序。原创 2023-12-01 23:55:21 · 432 阅读 · 0 评论 -
离散化算法总结
其中,unique(alls.begin(), alls.end())将数组中的所有重复元素去重,返回去重后的数组的尾端点。离散化是将大范围的数字映射到小范围的区间内,适用于稀疏的区间。2. 如何算出离散化后的值(离散化后保序,使用二分)。1. 原数组中可能有重复元素,需要去重。原创 2023-12-01 23:49:10 · 583 阅读 · 0 评论 -
位运算算法总结
用到lowbit(x) = x & -x这个公式,它返回的是x的最后一个1以及后面的二进制数字。综合得到:n >> k & 1返回的是n的二进制表示中第k位。1. 先把第k位移到最后一位:n >> k。如何求n的二进制表示中第k位是几?2. 看个位是几:x & 1。原创 2023-11-30 23:27:18 · 450 阅读 · 0 评论 -
双指针算法总结
对于有序数组中的每一个数A[i],在B数组中找到最左边的数B[j],使得A[i] + B[j] >= x。基于这一思想,i从1到n遍历,j从m - 1到0遍历,利用单调性,使用双指针算法,找到第一个满足条件A[i] + B[j] == x的数对即可。遍历区间,对于每一个i,找到最左边的j,使得[j, i]区间中的数不包含重复元素。从左到右遍历a序列,从b序列中找到与a序列相等的数字,找到所有a序列的匹配,则可以输出Yes,否则输出No。种类:快排的划分、归并排序的归并、KMP算法等。原创 2023-11-30 22:37:02 · 724 阅读 · 0 评论 -
差分算法总结
此时,b数组成为a数组的差分,a数组称为b数组的前缀和。= (aij)n*m,差分矩阵为。= (bij)n*m,使得矩阵。中的每个元素依次插入。差分是前缀和的逆运算。原创 2023-11-27 23:41:58 · 403 阅读 · 0 评论 -
前缀和算法总结(例题:激光炸弹)
【代码】前缀和算法总结。原创 2023-11-27 23:37:33 · 718 阅读 · 0 评论 -
快速排序算法总结(例题:第k个数)
【代码】快速排序算法总结(例题:第k个数)原创 2023-11-20 22:04:48 · 261 阅读 · 0 评论 -
数据结构——图的广度优先搜索模板
const int maxn=1000;const int inf=1e9;//邻接矩阵版int n,G[maxn][maxn];bool inq[maxn]={false};void bfs(int u){ queue q; q.push(u); inq[u]=true; while(!q.empty()){ int u=q.fron原创 2017-10-03 09:25:27 · 383 阅读 · 0 评论 -
快速幂模板
快速幂的迭代写法:typedef long long ll;ll pow_mod(ll a,ll b,ll m){ ll ans=1; while(b){ if(b&1) ans=ans*a%m; a=a*a%m; b>>=1; } return ans;}注意:快速幂模板输出结...原创 2017-10-02 23:57:38 · 216 阅读 · 0 评论 -
HDU1086 You can Solve a Geometry Problem too
Problem DescriptionMany geometry(几何)problems were designed in the ACM/ICPC. And now, I also prepare a geometry problem for this final exam. According to the experience of many ACMers, geometry problem...原创 2018-05-17 10:46:31 · 198 阅读 · 0 评论 -
数据结构——图的深度优先搜索模板
const int maxn=1000;const int inf=1e9;//邻接矩阵版int n,G[maxn][maxn];bool vis[maxn]={false};void dfs(int u,int depth){ vis[u]=true; for(int v=0;v<n;v++) if(!vis[v]&&G[u][v]!=inf) df原创 2017-10-02 23:49:27 · 340 阅读 · 0 评论 -
九度OJ题目1172:哈夫曼树
题目描述:哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。输入:输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2输出:输出权值。样例输入:5 1 2 2 5 9原创 2017-10-02 10:02:26 · 404 阅读 · 0 评论 -
堆排序与应用
题目描述堆排序是一种利用堆结构进行排序的方法,它只需要一个记录大小的辅助空间,每个待排序的记录仅需要占用一个存储空间。首先建立小根堆或大根堆,然后通过利用堆的性质即堆顶的元素是最小或最大值,从而依次得出每一个元素的位置。在本题中,读入一串整数,将其使用以上描述的堆排序的方法从小到大排序,并输出。输入输入的第一行包含1个正整数n,表示共有n个整数需要参与排原创 2017-10-02 00:46:09 · 1159 阅读 · 2 评论 -
求解最小生成树——prime算法模板
const int maxn=1000;const int inf=1e9;//邻接矩阵版int G[maxn][maxn];int n,d[maxn];bool vis[maxn]={false};int prime(){ fill(d,d+maxn,inf); d[0]=0; int ans=0; for(int i=0;i<n;i++){原创 2017-10-05 11:39:07 · 307 阅读 · 0 评论 -
求解最小生成树——kruskal算法模板
int tree[N];struct edge{ int u,v; int w;}E[maxn];bool cmp(edge a,edge b){ return a.w<b.w;}int findRoot(int x){ if(tree[x]==-1) return x; else{ int tmp=findRoot(tree[原创 2017-10-05 12:34:42 · 230 阅读 · 0 评论 -
数数字(Digit Counting,ACM/ICPC Danang 2007,UVa1225)
把前n(n#include #include #define maxn 50000char buf[maxn];int main(){ int T; int a[12]; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); memset(a,0,sizeof原创 2016-11-11 23:42:09 · 794 阅读 · 0 评论 -
分解质因数
#include <bits/stdc++.h>using namespace std;int main() { int n; scanf("%d", &n); int flag = 1; for (int i = 2; i * i <= n; i++) { int cnt = 0; if (n % i...原创 2019-05-23 20:53:43 · 1353 阅读 · 2 评论 -
生成随机数(生成整数序列和浮点数序列)
#include <cstdio>#include <cstdlib>/* 该函数生成指定界限a与b之间的一个随机整数(a<b) */int rand_int(int a, int b) { return rand() % (b - a + 1) + a;}/* 该函数生成a和b之间的随机双精度数 */double rand_float...原创 2019-05-23 10:28:52 · 1206 阅读 · 2 评论 -
迷宫问题
#include <bits/stdc++.h>using namespace std;const int maxn=105;char maze[maxn][maxn];bool mark[maxn][maxn];struct N{ int x,y; int t;};const int dx[]={1,-1,0,0};const int dy[]={...原创 2018-06-15 00:47:44 · 190 阅读 · 0 评论 -
HDU1286 找新朋友(欧拉函数)
Problem Description新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。 Input第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数...原创 2018-05-30 22:45:52 · 193 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法模板
const int maxn=1000;const int inf=1e9;//邻接矩阵版int n,G[maxn][maxn];int d[maxn];bool vis[maxn]={false};void dijkstra(int s){ fill(d,d+maxn,inf); d[s]=0; for(int i=0;i<n;i++){原创 2017-10-03 23:44:10 · 342 阅读 · 0 评论 -
枚举题目总结
将数字1~9分别填入9个方框中,每个数字只能使用一次使得等式成立。例如173+286=459就是一个合理的组合,请问一共有多少种合理的组合呢?注意:173+286=459与286+173=459是同一种组合!#include #define rep(i,s,t) for(int i=(s);i原创 2017-10-21 00:20:52 · 2467 阅读 · 2 评论 -
九度OJ题目1448:Legal or Not
题目描述:ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on原创 2017-10-06 09:41:57 · 209 阅读 · 0 评论 -
九度OJ题目1201:二叉排序树
题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入: 输入第一行包括一个整数n(1 接下来的一行包括n个整数。输出: 可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。 每种遍历结果输出一行。每行最后一个数据之后有一个空格。原创 2017-10-01 10:12:36 · 315 阅读 · 0 评论 -
日期差值——一种快速的求解方法(Hash的思想)
#include #define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0int day[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};struct Date{ int原创 2016-10-27 11:00:03 · 389 阅读 · 0 评论 -
胜利大逃亡——广度优先搜索(BFS)
#include #include using namespace std;bool mark[50][50][50];int maze[50][50][50];struct N{ int x,y,z; int t;};queue Q;int go[][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};原创 2016-10-28 09:03:12 · 355 阅读 · 0 评论 -
考研机试真题 Sort——排序的一种快速方法(Hash方法)
题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数。输入:每组测试数据有两行,第一行有两个数n,m(0输出:对每组测试数据按从大到小的顺序输出前m大的数。样例输入:5 33 -35 92 213 -644样例输出:213 92 3#include #define OFFSET 500000int原创 2016-11-01 23:43:24 · 333 阅读 · 0 评论 -
打印极值点下标
题目描述:在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。输入:每个案例的输入如下:有2×n+1行输入:第一行是要处理的数组的个数n;对其余2×n行,第一行是此数组的元素个数k(4输出:每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下原创 2016-11-04 00:19:42 · 459 阅读 · 0 评论 -
得分(Score,ACM/ICPC Seoul 2005,UVa1585)
There is an objective test result such as ``OOXXOXXOOO". An `O' means a correct answer of a problem and an `X' means a wrong answer. The score of each problem of this test is calculated by itself an原创 2016-11-10 08:18:19 · 1450 阅读 · 1 评论 -
分子量(Molar Mass,ACM/ICPC Seoul 2007,UVa1586)
#include #include #include #define maxn 85char s[maxn];double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};int main(){ int T; scanf("%d",&T); while(T--){ scanf("%s",s)原创 2016-11-11 10:54:15 · 791 阅读 · 0 评论 -
约瑟夫环问题(根据算法竞赛入门经典一题改编)
#include #define maxn 1010int n,m,a[maxn];int go(int p,int d,int t){ while(t--){ do{p=(p+d+n-1)%n+1;}while(a[p]==0); } return p;}int main(){ while(scanf("%d%d",&n,&m)==2原创 2016-11-15 16:54:24 · 598 阅读 · 0 评论 -
集合栈计算机(UVa12096)
DescriptionBackground from Wikipedia: "Set theory is a branch of mathematics created principally by the German mathematician Georg Cantor at the end of the 19th century. Initially controversial, s原创 2016-11-20 10:00:36 · 709 阅读 · 0 评论 -
算法竞赛入门经典一书中测试STL的方法(随机数的应用)
#include #include #include #include #include #include using namespace std;void fill_random_int(vector& v,int cnt){ v.clear(); for(int i=0;i<cnt;i++) v.push_back(rand());}voi原创 2016-11-21 21:59:05 · 400 阅读 · 0 评论 -
UVa673(括号匹配)
DescriptionYou are given a string consisting of parentheses () and []. A string of this type is said to be correct:(a)if it is the empty string(b)if A and B are correct, AB is correct,转载 2016-12-18 10:02:59 · 841 阅读 · 2 评论 -
noip2010 数字统计 (统计某一数字区间中,2出现的次数)
【代码】noip2010 数字统计 (统计某一数字区间中,2出现的次数)原创 2017-08-21 10:19:25 · 2275 阅读 · 2 评论 -
ACM中java的使用(二)
Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge :) (2) 对于熟悉C/C++的程序员来说,Java 并不难学,找本书,一两周业余时间就可以搞定了。当然,这里只是指一般编程,想熟悉所有的Java库还是需要些时间的。转载 2017-09-24 19:04:01 · 247 阅读 · 0 评论 -
ACM中java的使用(一)
1. 输入:格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in));例程:import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main {转载 2017-09-24 18:57:26 · 2164 阅读 · 0 评论 -
九度题目1069:查找学生信息(二分查找)
题目描述: 输入N个学生的信息,然后进行查询。输入: 输入的第一行为N,即学生的个数(N接下来的N行包括N个学生的信息,信息格式如下:01 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 19然后输入一个M(M02030104输出: 输出M行,每行包括一个对应于查询的学生的信息。如果没原创 2016-11-03 18:51:05 · 549 阅读 · 0 评论 -
素数表的获取(常规方法与埃氏筛法)
//求解100以内的所有素数,复杂度对n不超过10^5的大小是没有问题的#include #include int prime[101],num=0;int p[101]={0};int is_prime(int n){ int m=round(sqrt(n)); if(n<=1) return 0; for(int i=2;i<=m;i++)原创 2017-09-19 00:18:18 · 403 阅读 · 0 评论