大学ACM记录
大学参加ACM做过的一些题和算法的一些记录
傲节
这个作者很懒,什么都没留下…
展开
-
细节(水)题codeforce#378C
题目网址http://codeforces.com/contest/733/problem/C大概题意给你N个数,然后再给你经过合并操作后的K个数,求中间合并操作?AC代码#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#incl原创 2016-11-04 01:17:06 · 656 阅读 · 0 评论 -
贪心51nod1099
题目http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1099思路猜的, 根据 计算占用空间 与 实际占用空间 的差排序。 差大的先入,差相同的,计算占用空间大的先入。AC代码#include<iostream>#include<cstring>#include<string>#include<cstdio>原创 2016-04-11 20:30:40 · 397 阅读 · 0 评论 -
dfs全排列
#include#include#includeconst int maxn=1000;int a[maxn],book[maxn],n,ans=0;void dfs(int step){ int i; if(step==n+1) { for(i=1;i<=n;i++) printf("%d ",a[i]); print原创 2016-03-24 15:11:49 · 487 阅读 · 0 评论 -
hdu5373
题先附上:水题,但是思路不对,特容易超时(TLE)The shortest problemTime Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1084 Accepted Submission(s): 534原创 2015-08-14 01:12:06 · 743 阅读 · 0 评论 -
poj3169(差分约束系统)
题目网址:http://poj.org/problem?id=3169大概题意:有N个点,其中有ml个限制条件:点a,点b,的最长距离为d,有md个限制条件,点a,点b,的最短距离为d;点按序号顺序排,求第一个点到最后一个点的最长距离。解题思路:差分约束,其实我也不太清楚什么是差分约束,大概就是将各种限制条件,逐个加入,先假设N个点间的距离都为无穷大,然后,按下列顺序,(循环)N(N,ml,m原创 2016-11-08 12:24:18 · 607 阅读 · 1 评论 -
51nod 1416两点DFS
题目网址http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1416简单的深搜直接上代码#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define ll long long #define DEBUG printusing原创 2016-11-01 21:25:29 · 314 阅读 · 0 评论 -
Dijkstra
51nod第一道基础题:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459最短路径加点权。#include#include#include#include#define ll long long#define INF 9999using namespace std;void dijkstra()原创 2016-03-23 20:36:51 · 337 阅读 · 0 评论 -
优先队列(priority_queue)
优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~ 百度百科上这样描述的: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素 优先队列的类定义 优先队列是0个或多个元素的集合,每个元素都有一个优先权或值转载 2016-04-15 11:47:13 · 700 阅读 · 0 评论 -
list
各个容器有很多的相似性。先学好一个,其它的就好办了。先从基础开始。先看看他们的分类吧标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。非标准关联容器hash_set、hash_multiset、hash_m转载 2016-04-08 21:09:04 · 304 阅读 · 0 评论 -
全排列permutation
dfs版:#include#include#include#include#include#include#define ll long long#define MAX 0x3f3f3f3fconst ll MOD=1e+9+7;using namespace std;char c[10];int s[10];int book[10];int len,min原创 2016-03-24 22:04:37 · 350 阅读 · 0 评论 -
VECTOR
详解vector操作#include<iostream>#include<vector>#include<list>using namespace std;int main(){ //1 vector<int> a; for(int i=0;i<10;i++){ a.push_back(i); } //2 int arr[6]原创 2016-03-15 15:15:29 · 323 阅读 · 0 评论 -
判断三角形与圆是否相交
#include#include#includeusing namespace std;struct P{ double x,y;};struct circle{ P c; double r;};int cmp(double x){ if(fabs(x)<1e-15) return 0; if(x>0) return原创 2016-03-28 21:35:47 · 1566 阅读 · 0 评论 -
哈夫曼树(POJ3253)
题目POJ3253大概题意:XX想修补东西,然后需要用木板。可以认为XX有一根无限长(长度=他需要的木板长度总和)的木板,但是他需要N块长度为Li的木板,所以他需要把这块无限长的木板锯成他需要的。每次锯木板的花费与锯之前木板的长度相等。求最小花费! 测试案例: 3 8 5 834sum=0; 开始木板长度21(8+5+8),sum+=21,要锯成13+8; 然后,需要锯的木板长度13,原创 2016-04-14 22:31:47 · 804 阅读 · 0 评论 -
HASH表(高效查找)
POJ3349http://poj.org/problem?id=3349暴力(TLE)#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<algorithm>#include <set>#include <map>#include<list>#incl原创 2016-04-11 22:30:45 · 1048 阅读 · 0 评论 -
并查集
并查集初步练习POJ1611 http://poj.org/problem?id=1611AC代码#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<algorithm>#include <set>#include <map>#include<list>原创 2016-04-09 18:16:35 · 315 阅读 · 0 评论 -
线段树
线段树初步练习HDU1166 http://acm.hdu.edu.cn/showproblem.php?pid=1166AC代码#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<algorithm>#include <set>#include <map原创 2016-04-09 13:17:57 · 282 阅读 · 0 评论 -
高斯消元(混合颜料)
题目(网易2017内推编程题(二)的第一题)你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的原创 2017-01-05 12:33:55 · 550 阅读 · 0 评论 -
hdu5912 简单公式迭代
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5912代码#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define ll long long#define DEBUG printfusing namespace std;ll GCD(ll aa,原创 2016-11-02 10:41:53 · 327 阅读 · 0 评论 -
欧拉函数
小结论:好多数学概念,都牵扯到欧拉,到底什么是欧拉,仔细思考这些用 欧拉 命名的概念,都有一个共同点:利用现有的通过迭代,求出后来的。题目地址:http://hihocoder.com/contest/hiho96/problem/1欧拉函数:小Hi:刚刚我所描述的φ(n),一般被称为欧拉函数。其定义为:小于n的正整数中与n互质的数的原创 2016-05-07 16:27:34 · 505 阅读 · 0 评论 -
大数类
C++大数类模版#include<iostream> #include<string> #include<iomanip> #include<algorithm> using namespace std; #define MAXN 9999#define MAXSIZE 10#define DLEN 4class BigNum{ private: int a[500];转载 2016-03-15 09:20:59 · 334 阅读 · 0 评论 -
神奇的pow()函数
#include#includeusing namespace std;int main(){ double n,p; while(cin>>n>>p){ cout<<pow(p,1/n)<<endl; } return 0; } poj2109:c=pow(a,b);c=a^b;b为整数时,表示一般的乘方;b为1/n时 , 表示开方;原创 2015-10-24 23:30:54 · 575 阅读 · 0 评论 -
欧几里得&扩展
先配上欧几里得的模版:// 欧几里得//求两个数的最大公约数 int gcd(int a,int b){ return b==0 ? a:gcd(b,a%b); } 扩展欧几里得的模版:int extend_gcd(int a,int b,int &x,int &y){ if(b==0){ x=1;y=0; return a; } else{原创 2015-09-08 00:30:57 · 343 阅读 · 0 评论 -
C几几
ll C(int a,int b){ int i=0; double Cans=1; if(a==0)return 0; if(b==0)return 1; while(i<b){ Cans*=(a-i); Cans/=i+1; i++; } return (ll)Cans;}/*55为界 求C几几 20为界 */ ll C(int a,int b){原创 2015-08-19 22:56:08 · 881 阅读 · 0 评论 -
最大公约数和最小公倍数
int GCD(int aa,int bb){ int i,t; if(aa<bb){ t=aa; aa=bb; bb=t; } while(aa%bb!=0){ i=aa%bb; if(bb>i){ aa=bb; bb=i; } else aa=i; } return bb; } ll LCM(int aa,int bb){ int原创 2015-08-19 22:51:50 · 645 阅读 · 0 评论 -
快速幂
转载自百度百科:快速幂快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。库中pow函数的时间复杂度就是O(N);原理以下以求a的b次方来介绍[1] 把b转换成二进制数。该二进制数第i位的权为例如11的二进制是10111转载 2015-08-16 02:00:09 · 759 阅读 · 0 评论 -
hdu5391威尔逊定理
威尔逊定理在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大。hdu5391用到了这一数论定理。Zball in Tina TownTime Limit: 3000/1500 MS (Java/Others) Me原创 2015-08-16 01:37:57 · 1592 阅读 · 0 评论 -
判断素数ISprime
bool ISprime(int n){int i,isqrt=(int)sqrt(n);if(nreturn (n==2);else if(n%2==0)return false;else for(i=3;iif(n%i==0){return false;}}return true;}/*#include是素数返回tru原创 2015-08-16 01:21:44 · 4462 阅读 · 0 评论 -
数论小知识更新ING
1.(1).能被3整除的特征:一个数各位数字之和是3的倍数,这个数就能被3整除。(2).能被7整除的特征:一个数,末三位与前几位之差(注意哦,这里应当是大数减小数)是7的倍数,这个数就能被7整除。判断一个数能否被7整除,有两种方法:①割尾法:若一个整数的个位数字截去,再从余下的数中,减去个位数的2倍,如果差是7的倍数,则原数能被7整除。如果差太大或心算不易看出是否7的原创 2015-08-14 01:32:50 · 739 阅读 · 0 评论 -
数论第一题HDU1164
题目Eddy's research ITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7625 Accepted Submission(s): 4632Problem DescriptionEddy原创 2015-08-07 22:18:25 · 360 阅读 · 0 评论 -
第二步开始:计算几何 数论
首先,要精通C++,然后,刷这两类题:数论:hdoj:计算几何:记得做笔记,写博客。参见:http://blog.csdn.net/qq_27803491/article/details/47041725原创 2015-08-06 00:23:31 · 1260 阅读 · 0 评论 -
我要准备的算法
一、数论数论1.中国剩余定理2.欧拉函数3.欧几里得定理4.欧几里德辗转相除法求GCD(最大公约数)5.扩展欧几里得6.大数分解与素数判定7.佩尔方程8.同余定理(大数求余)9.素数测试(1) 一千万以内:筛选法(2) 一千万以外:米勒测试法10.连分数逼近11.因式分解12.循环群生成元13.素数原创 2015-07-24 15:45:20 · 537 阅读 · 0 评论 -
markdown 语法
欢迎使用Markdown编辑器写博客本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用原创 2017-02-08 22:19:58 · 268 阅读 · 0 评论 -
AC必备
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>#include <string>#include <set>#include <cmath>#include <map>#include原创 2016-11-03 23:50:06 · 262 阅读 · 0 评论 -
二分查找
int BSerach(int *a,int len,int n)//若返回值为x,则a[x]>=n>a[x-1] { int left=0,right=len,mid=(left+right)/2; while(left<=right) { if(n>a[mid]) left=mid+1; else if(n<a[mi原创 2016-04-07 21:56:07 · 293 阅读 · 0 评论 -
杭电题分类
杭电ACM试题分类TJUT_20145534因为信念坚定,才激起了美丽的浪花;青春因为追求崇高,才格外地绚丽多彩。因为年轻,所以自信; 因为自信,所以年轻。 1001 这个就不用说了吧1002 简单的大数1003 DP经典问题,最大连续子段和1004 简单题1005 找规律(循环点)1006 感觉有点BT的题,我到现在还没过100转载 2015-07-07 12:24:21 · 711 阅读 · 0 评论 -
优先深度搜索和广度搜索
dfs模版DFS: /* 该DFS 框架以2D 坐标范围为例,来体现DFS 算法的实现思想。 */ #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxn=100; bool vst[maxn][maxn]; // 访问标记 int map[m转载 2016-01-31 21:34:18 · 470 阅读 · 0 评论 -
精度计算——乘法(大数乘大数)
语法:mult(char a[],char b[],char s[]); 参数: a[]:被乘数,用字符串表示,位数不限 b[]:乘数,用字符串表示,位数不限 t[]:结果,用字符串表示 返回值:null 注意: 空间复杂度为 o(n^2) 需要 string.h 源原创 2015-08-10 11:40:51 · 493 阅读 · 0 评论 -
精度计算——乘法(大数乘小数)
语法:mult(char c[],char t[],int m); 参数: c[]:被乘数,用字符串表示,位数不限 t[]:结果,用字符串表示 m:乘数,限定10以内 返回值:null 注意: 需要 string.h 源程序: void mult(char c[],char t原创 2015-08-10 11:39:02 · 1005 阅读 · 0 评论 -
1.精度计算——大数阶乘
语法:intresult=factorial(int n); 参数: n:n 的阶乘 返回值:阶乘结果的位数 注意: 本程序直接输出n!的结果,需要返回结果请保留long a[] 需要 math.h 源程序: int factorial(int n) {原创 2015-08-10 11:35:14 · 434 阅读 · 0 评论