随笔分类 - ACM-总结
摘要:基础线段树是一些基本操作之间的组合:基本操作:单点更新、单点查询、区间更新,区间求和、区间最值1、单点增减,区间求和http://acm.hdu.edu.cn/showproblem.php?pid=1166View Code #include<algorithm>#include<cstring>#include<cstdio>#define MAXN 500000using namespace std;struct SegTree{ int left,right; int anssum;}tree[MAXN<<2];void build(in
阅读全文
摘要:欧拉路径和欧拉回路欧拉路径:从某结点出发一笔画成所经过的路线叫做欧拉路径。欧拉回路:在欧拉路径的基础上又回到起点。a、凡是由偶点组成的连通图,一定可以一笔画成。画时可以把任一偶点为起点,最后一定能以这个点为终点画完此图。 b、凡是只有两个奇点的连通图(其余都为偶点),一定可以一笔画成。画时必须把一个奇点为起点,另一个奇点终点。 c、其他情况的图都不能一笔画出。(有偶数个奇点除以2便可算出此图需几笔画成。)欧拉回路和欧拉路径的判断欧拉回路:无向图:每个顶点的度数都是偶数,则存在欧拉回路。有向图:每个顶点的入度都等于出度,则存在欧拉回路。欧拉路径:无向图:当且仅当该图所有顶点的度数为偶数 或...
阅读全文
摘要:1、vector的基本用法#include<vector>(1)定义:vector<int>S;定义一个空的vector对象,存储的是int类型的元素。vector<int>S(n);定义一个含有n个int元素的vector对象。(2)基本操作:S[i];直接以下标方式访问容器中的元素。S.front();返回首元素。S.back();返回尾元素。S.size();返回表长。S.empty();当表为空时返回true,否则返回false。S.pop_back();删除表尾元素。S.begin();返回指向首元素的迭代器。S.end();返回指向尾元素的迭代器
阅读全文
摘要:最短路Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),
阅读全文
摘要:http://61.187.179.132/JudgeOnline/problemset.php特点:中学oj 、题目都是中文的http://www.rqnoj.cn/特点:中学oj、题目都是中文的、官方已经分好类http://acm.hust.edu.cn:8080/judge/problem/t...
阅读全文
摘要:字符串的输入的主流函数:一、scanf(); 二、cin; 三、gets(); 四、getline(); 五、sscanf()。一、scanf("%s",str);遇见空格或换行就停止。#include<stdio.h>int main(){ char str[100]; while(true) {scanf("%s",str); printf("%s\n",str);} return 0;}输入:123 456输出:123 456二、cin>>str;与scanf();相似遇见空格或换行就停止;以文件结束。三
阅读全文
摘要:一、hash函数基础1 1、一个简单的hash函数:/*key为一个字符串,nTableLength为哈希表的长度该函数得到的hash值分布比较均匀*/long long getHashIndex(char *key,long longnTableLength ){long longnHash = 0; while (*key) { nHash = (nHash<<5) + nHash + *key++; } return ( nHash % nTableLength );}2、一个完整测试程序: 哈希表的数组是定长的,如果太大,则浪费,如果太小,体现不出效率。合适的数组大小是哈.
阅读全文
摘要:求f(n)%p描述:f(0)=1;f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2);输入:两个整数n和p;输出:f(n)%p;方法一:矩阵快速模幂struct SS{int S[2][2];}A;A.S[0][0]=0;A.S[0][1]=1;A.S[1][0]=1;A.S[1][1]=1;A=A^n;f(n)=A.S[1][1];1、C++递归实现(这个方法是我常用的):View Code 1 #include<iostream> 2 using namespace std; 3 4 struct SS{int S[2][2];}; 5 int n=2,p; 6
阅读全文
摘要:方法一:递归求解(1)、从 n 个元素中,选择 m 个元素的组合 #include<iostream> using namespace std; int ans[10],a[20],m,n; bool visited[20]; void output() { int i; for(i=1;i<m;i++) cout<<ans[i]<<" "; cout<<ans[i]<<endl; } void work(int i,int k) { if(i==m+1) { output(); return ; } fo.
阅读全文
摘要:View Code #include<cstring>#include<cstdio>#include<string>#include<iostream>#define N 1010using namespace std;int main(){ string s;char ss[N]; //while(sscanf(gets(ss),"%[^\n]",ss)) //能重复读入但是不是文件结束 while(cin.getline(ss,N))//以文件结束 { int t; s=ss; //直接赋值 t=s.find("
阅读全文