
高中笔记
高中初学编程写的简单代码
liaoooi
去吧姆明!
展开
-
2017-03-03
内容:1.广搜OJP226;2.高精度1.广搜: 队列:queue<int> qx,qy;x=qx.front();//x等于qx队首qy.pop();//删除qy队首qx.push(x);//加入x到qxwhile(qx.empty()==0)//qx不为空,为空返回1,不为空返回0;2.高精度(刘雨薇压位代码,徐鸿图看不懂代码)原创 2017-03-02 17:18:28 · 234 阅读 · 0 评论 -
2017-02-24
1.pair用法: queue<pair<int,int>> q; q.first=1; q.second=2; 意思:pair内只有两个存储,第一个叫first,第二个叫second; 也可以自定义函数: struct node{ int x,y; }edge[100000]; 2.大根堆 priority_原创 2017-02-24 20:34:55 · 270 阅读 · 0 评论 -
2017-02-23(map函数)
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! 1. map最基本的构造函数; map<string , int >mapstring; map<int ,string >mapint; map<sring, char>mapstring; map< char转载 2017-02-23 16:44:50 · 198 阅读 · 0 评论 -
2017-02-23
内容:上周六考试二三题题解。 第二题: 1.srand(time(0)); 这是用于初始化随机函数发生器的,计算机中的随机函数在生成一个随机数时需要用到一个称为随机数发生器的东西,如果不对其进行初始化,每次生成的随机数就会是相同的。 srand函数就用来初始化这个发生器,参数time(0)能够生成从1970年1月1日到当前机器时间的秒数,这个数在你每次执行程序原创 2017-02-23 16:37:55 · 270 阅读 · 0 评论 -
2017-02-19
1.long long 类型用scanf读入: 用lld还是i64d看测评环境,win用 i64d unix用 lldwindows:scanf("%I64d",&a);printf("%I64d",a);linux:scanf("%lld",&a);printf("%lld",a);2.128MB,int开30000000 3.当两个int相乘存在long long里时 max原创 2017-02-19 22:41:58 · 195 阅读 · 0 评论 -
2017-02-18
1.字符串: str为char类型,(str,15)中的15为长度不超过15; 判断为首个字符不是跳行,即此行不为空; char str[15]; while(cin.getline(str,15) && str[0]!='\0') create(); char str[15]; while(gets(str) && str[0]!='\0')原创 2017-02-18 10:25:03 · 207 阅读 · 0 评论 -
2017-02-16
http://hzwer.com/原创 2017-02-16 17:06:58 · 176 阅读 · 0 评论 -
sort关键字排序
#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct example{ int elem1; int elem2;}example;//这个comparison函数很重要.//如果希望升序排序,就是"<",降序排列就是">"号//这样便于直原创 2017-01-30 10:08:10 · 1118 阅读 · 0 评论 -
sort按vector元素排序
#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct example{ int elem1; int elem2;}example;//这个comparison函数很重要.//如果希望升序排序,就是"<",降序排列就是">"号//这样便于直观原创 2017-01-30 10:06:00 · 5194 阅读 · 0 评论 -
2017-01-30
1.注意设数组不要超空间,再三检查输入输出格式,文件名,定义是否超空间或不足。 举例:昨天晚上将一个应设为x[10002]的数组设为x[1002]。 2.最后十分钟不要再写代码,检查!!!检查!!!从文件名到定义数组大小到输入输出格式。 1000000*4/1024/1024原创 2017-01-30 10:01:34 · 193 阅读 · 0 评论 -
高斯消元
//高斯消元(SOJ- P514 解方程) #include<iostream> #include<cstdio>#include<cstdlib>#include<cmath>using namespace std;int n;double mem[1001][1002];void Init() //读入数据{ cin>>n; for(int i=1;i<=n;i原创 2017-01-24 13:38:06 · 184 阅读 · 0 评论 -
2017-01-22
1.double 类型: 读入:scanf("%lf",&n); 输出 : printf("%f",n);2.四舍五入取整:cout<<floor(n+0.5); 四舍五入保留两位小数cout:cout<<floor(n*100+0.5)/100; 四舍五入保留两位小数 printf:printf("%0.2f",n);原创 2017-01-22 15:54:09 · 204 阅读 · 0 评论 -
2017-01-22(2017-01-21测试)
2017-01-21测试原创 2017-01-22 09:44:17 · 408 阅读 · 0 评论 -
P934字符串匹配
KMP资料: 小蓝P297-299 大黑P588-593 徐鸿图讲稿网址: https://blog.xehoth.cc/2016/11/08/KMP%E7%AE%97%E6%B3%95%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/#KMP算法学习总结重点内容: 1.next数组性质 2.思路: ·next[1]=0原创 2017-01-20 15:50:46 · 499 阅读 · 0 评论 -
强连通-割边(曾老代码)
割边模板,邻接矩阵实现O(N^2),最好改为邻接表O(N+M)原创 2016-12-24 22:05:18 · 234 阅读 · 0 评论 -
强连通-割点(曾老代码)
//割点模板,邻接矩阵实现O(N^2),最好改为邻接表O(N+M) #include#include#include#include#include#include#includeusing namespace std;struct Edge { int u,v,next; }e[101];int原创 2016-12-24 22:01:22 · 251 阅读 · 0 评论 -
线段数-最大值-I Hate It(曾老代码)
/HDU1754-线段树模板(区间最大值):曾贵胜#include#include#include#include#include#include#include#define N 200001using namespace std;int num[N];struct Tree{ int l; //左端点 int原创 2016-12-24 21:58:27 · 250 阅读 · 0 评论 -
线段树-区间和-敌兵布阵(曾老代码)
//HDU1166-线段树模板(区间和):曾贵胜#include#include#include#include#include#include#include#define N 50005using namespace std;int num[N];struct Tree{ int l; //左端点 in原创 2016-12-24 21:56:30 · 209 阅读 · 0 评论 -
2016-12-24
学习内容:上午:线段树下午:Tarjan、割点割边注意事项:1. 乘2 >>1 除2—————————————————————————————————————————————————————2.if(a)==if (a !=0) if(!a)==if (a==0)————————————————————————————————————————————原创 2016-12-24 21:50:24 · 282 阅读 · 0 评论 -
2016-12-10
1.把vector当做一个容器原创 2016-12-10 19:26:13 · 195 阅读 · 0 评论 -
取整小数
省略小数点几位之后的数,取整小数原创 2016-11-15 21:09:23 · 326 阅读 · 0 评论 -
2016-11-12(虚拟机使用)
考试注意事项原创 2016-11-12 20:43:59 · 284 阅读 · 0 评论 -
读入优化
//读入优化1 #include#include#includeusing namespace std;int Readint(){ int i=0,f=1; char ch; for(ch=getchar();(ch'9') && ch!='-';ch=getchar()); if(ch=='-') {原创 2016-11-12 14:04:40 · 173 阅读 · 0 评论 -
2017-07-22:考试(最小生成树求最短距离+哈希)
第一题:错误原因:每次会有值更新,但是考试的时候的代码没有将更新的值覆盖掉原来的值(低级错误) 第二题:因为每条边长度都为2的某次方,且长度都不一样,2^i>2^(i-1)+2^(i-2)··· 所以用最小生成树,将边从短到长加进去,后加的边一定不是最短路 最后是一个二进制的高精度 for (int i=0;i<=m+100;i++){ cost[i+1]+=cost[i原创 2017-07-22 16:43:09 · 346 阅读 · 0 评论 -
2017-07-20:考试(组合数、杨辉三角)SOJP1796
1.杨辉三角:从上到下为下标由0开始,从从左到右为由上标由0开始 for (int i=0;i<=4000;i++) c[i][0]=c[i][i]=1; for (int i=2;i<=4000;i++) for (int j=1;j<i;j++){ c[i][j]=c[i-1][j]+c[i-1][j-1];原创 2017-07-21 11:14:36 · 348 阅读 · 0 评论 -
2017-07-19:NOIP2016Day1
二题的差分思想: 一个队列,要在红色区间加1,转化为在红色区间的第一位上加1,在红色区间结束的后一位减1 由此每一位的数即是包含它自己的前缀和 树上的差分: 要在橙色区域加1,就在其起点和终点处加1,LCA处减1,LCA的父亲处减1 由此每个子节点的数即是它与它所有儿子的和 遍历的时候记下刚到这个点的时候某个数出现的次数,然后往下搜索再回来,记下改变后的个数 用改变后的个数减去原来的个原创 2017-07-19 15:21:33 · 275 阅读 · 0 评论 -
2017-07-18:哈希表(POJ1200:Crazy Search)
题中所述字符串中出现的字符个数为NC,则可以将其所有长度为N的子串Hash为NC进制的数,最后统计Hash的个数即可。 STEP1:记录没有出现过的字符所转化的数字,注意数字从0开始for (int i=1;i<=len;i++){ if (id[w[i]]!=-1) continue; id[w[i]]=cnt; cnt++; if (cnt>nc) break;原创 2017-07-18 12:03:28 · 236 阅读 · 0 评论 -
2017-07-18:最小生成树(Prim&&Kruskal)
Prim:用于点少的情况1.初始minn[1]=0,更新所有与1号点相连的边,由此更新此边的另一端点的minn值(所有点的minn都这么更新) 2.更新之后再寻找最短的minn值加入树,bool标记已经入树,最后把每个点的minn值相加Kruskal:用于边少的情况1.用自定义结构体存储边的信息struct node{ int from,to,len;}edge[M];2.以len的大小原创 2017-07-18 09:53:56 · 207 阅读 · 0 评论 -
fill
用法类似memset #define N 100005 long long d[1000]; fill(d,d+n,INF);原创 2017-07-17 15:35:21 · 285 阅读 · 0 评论 -
2017-07-17:考试
第一题:很简单的DP:找按1807顺序出现的子序列 举例:找怎么加入一个0,max这个0之前以0结尾的最长子序列和这个0之前以8结尾的最长子序列 for (int i=0;i<len;i++){ if (c[i]=='1') f[0]++; if (c[i]=='8' && f[0]!=0) f[1]=max(f[1],f[0])+1; if原创 2017-07-17 15:00:16 · 176 阅读 · 0 评论 -
2017-07-15:考试
第三题:Floyd思想的最短路 1. 把点(如a[i])倒着加进去 2. 更新所有点与点(a[i])之间的最短路 3. 以点(a[i])为媒介更新所有点之间的最短路#include<cstdio>#include<algorithm>#define N 510using namespace std;int n,f[N][N],a[N];long long ans[N];int原创 2017-07-15 15:21:06 · 227 阅读 · 0 评论 -
空间限制
1. #define N 40005 int f[40005][16]; for (int i=1;i<=15;i++) for (int j=1;j<=N;j++) if (!f[j][i-1]) f[j][i]=f[f[j][i-1]][i-1];问题所在:f数组所开大小为40005,但是有0的存在,实原创 2017-07-14 21:11:22 · 303 阅读 · 0 评论 -
2017-07-14:Tarjan(受欢迎的牛)
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<ctime>#include<cctype>#include<string>#include<algorithm>#include<iostream>#define MM 50002#define NN 10002using nam原创 2017-07-14 16:10:18 · 242 阅读 · 0 评论 -
写不来的算法代码
1.分数规划 2.莫对算法原创 2017-07-14 15:39:27 · 274 阅读 · 0 评论 -
2017-07-14:加速
1.使用读入优化 2. 将: if (x!=0);if (x==0); 改变为: if (x);if (!x);原创 2017-07-14 11:15:58 · 175 阅读 · 0 评论 -
2017-07-14:树状数组(多组数据要先清空)
树状数组: 找x的二进制末尾有几个0inline int lowbit(int x){ return x&(-x);}加入数(减去数就是加入它的负数)inline void add(int x,int v){ while(x<=n){ e[x]+=v; x+=lowbit(x); }}查询区间:cout<<query(h)-query(g原创 2017-07-14 09:57:36 · 332 阅读 · 0 评论 -
2017-07-13:考试:检查读入优化(LCA)
一题:发生了一件很玄幻的事,删除读入优化就可以过,但是读入优化是没有问题的原创 2017-07-13 12:51:12 · 262 阅读 · 0 评论 -
2017-07-12:分块(SOJ1939)+中位数(SOJ1938)
2017-07-11考试第三题:一道不断加数,删数,查数的题 1.在集合中加入数字 s ; 2.在集合中删除数字 s ,保证 s 存在,如果有多个 s,只删除一个即可; 3.查询满足 a&s=a 条件的 a 的个数; 第一眼以为是线段树,但实际上并不是。 思想是分块处理: 由于数据大小是2^16,于是分为2^8*2^8,把一个数分为前八位和后八位 pre=x>>8; suf原创 2017-07-12 10:09:28 · 330 阅读 · 0 评论 -
2017-07-11:考试逆序对(读题仔细)
一题:逆序对 错误原因:题意理解错误 求由1到n一共n个数字组成的所有排列中,逆序对个数为k的有多少个 题意是一个数列(一串数),数列中的数都不重复,找这个数列中的逆序对 错误理解成一个很长很长的数,找这个数中的逆序对 方法:开两个数组:f[i][j]:从长度为1到长度为i的数列中逆序对个数为j的排列组数的积累和g[i][j]:仅是长度为i的数列中逆序对个数为j的排列组数f[i][j]=原创 2017-07-11 21:24:11 · 745 阅读 · 0 评论 -
2017-07-10:考试(再次爆int,记住用long long)
Now the commencement speakers will typically also wish you good luck and extend good wishes to you. I will not do that, and I’ll tell you why. From time to time in the years to come, I hope you will b原创 2017-07-10 13:00:12 · 984 阅读 · 0 评论