- 博客(204)
- 收藏
- 关注
原创 简单高精度
L1-6 整除光棍(20 分)这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一...
2018-03-24 19:01:06 208
原创 最长上升子序列模板
// 返回的是最长上升(非严格)子序列的最大长度int lisUpMax(int A[],int n){ int maxn = 1; int Ser[n+10]; //Ser[i] 代表 有i位时的最大元素的最小值 memset(Ser,0x3f,sizeof(Ser)); Ser[1] = A[1]; for (int i = 2;i <= n...
2018-03-20 19:28:06 139
原创 超大容量背包问题
超大背包问题:有n个重量和价值分别为w[i]和v[i]的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值。其中,1 ≤ n ≤ 40, 1 ≤ w[i], v[i] ≤ 10^15, 1 ≤ W ≤ 10^15.这个问题给人的第一感觉就是普通的01背包。不过,看完数据范围会发现,这次价值和重量都可以是非常大的数值,相比之下n比较小。使用DP求解背包为题的复杂度是O(nW...
2018-03-15 18:21:07 2802 5
原创 最小生成树-Kruskal模板 - Prim模板(两个版本)
题目链接畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 34806 Accepted Submission(s): 15429Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交...
2018-03-14 19:15:14 228
原创 想法模拟题——Stack
题目链接 点击打开链接给你两个栈,push操作是压入,pop是弹出栈顶并输出,merge是将后面的栈合并到前面的栈,并且按压入时间排序。 Solution1 前两个仅仅需要模拟就行了,主要是解决merge,倒过来倒过去,很容易超时,可以定义now为A所属的栈,!now为B所属的栈,那么将元素少的栈合并到元素多的栈里,如果merge A B的时候B的元素多,那么我们把A中的倒入B中,now取反即可。...
2018-03-14 12:02:27 117
原创 二进制转换
做了一个题目,如果把十进制的数据转换成二进制的数据会方便很多,于是我经过研究发现了一个非常方便的方法// getnum()把数字a转换成二进制编码,倒序储存在num1中int num1[100];int a,n1;void getnum(){ n1 = 0; while (a){ int t = a&1; num1[++...
2018-03-12 10:47:50 141
原创 枚举的初识
枚举在某些题目中有着非常重要的作用。其中最方便的就是利用位运算来进行枚举,枚举2的n次方例题:这是一道典型的折半枚举例题,通过先枚举其中一半的数据,在通过数组储存起来。这样就可以进行排序后的二分搜索了。空间换时间 int n2 = n/2; for (int i = 0;i < 1 << n2;i ++){ ll sw = 0,sv = 0; ...
2018-03-11 09:31:57 152
原创 尺取法
尺取法经典例题#include <bits/stc++.h>using namespace std;const int MAX_P = 1e6+7;int P;int a[MAX_P];void solve(){ set<int> all; for (int i = 0;i < P;i ++){ all.insert(a[...
2018-03-07 19:22:31 284
原创 二分的研究
二分查找的标准模板 int l = 0,r = len-1; while (l <= r){ int m = (l+r)>>1; if (judge(m))l = m+1; else r = m-1; } cout << l-1 << endl;此模板,主要判断...
2018-03-04 11:08:19 120
原创 填充函数
填充函数,主要有三种方法。我们看一下其算法的速度#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int MAXN = (int)1e8;int a[MAXN];int main(){ int tim = clock(); memset(a,0x3f...
2018-03-04 09:12:06 2005
原创 string的加速及使用
令string加速输入的策略#include <bits/stdc++.h>using namespace std;string s;char a[100007];string read(){ scanf("%s",a); string p = ""; for (int len = strlen(a),i = 0;i < len;i ++){...
2018-02-24 10:33:04 389
原创 线段树
//线段树,基础模板#define lson rt<<1#define rson rt<<1|1const int MAXN = (int)1e6+7;int A[MAXN],N;struct Node{ int sum; int add;}tree[MAXN<<2];void PushUp(int rt){tree[rt]....
2018-02-24 10:22:48 94
原创 树状数组
基础模板树状数组,基础模板const int MAXN = (int)1e6+7;int c[MAXN],N;int lowbit(int x){return x&(-x); }void Update(int L,int val){ while (L <= N){ c[L] += val; L += lowbit(L); }...
2018-02-24 10:20:27 108
原创 最短路——链式向前星,迪杰斯特拉算法的典型例题
HDU 1874:题目链接:点击打开链接大神链接:深度理解链式向前星畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 61960 Accepted Submission(s): 23232Problem Description...
2018-02-24 10:11:16 1755
原创 关于全局变量与递归的进一步理解——加深迭代例题
原来这两个的关系一直没有弄得很清楚,经过一个bug的洗礼,我看透了很多题目链接:点击打开链接迷宫问题Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 28022 Accepted: 16150Description定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, ...
2018-02-12 22:41:25 1311 1
原创 关于C++的小贴士
#include 这个万能头文件,除了一些POJ,无法运行意外,别的地方基本都可以运行。ios::sync_with_stdio(false); cin.tie(0);代码中可以加上这一句话,来关闭cin,cout和printf,的同步系统,来实现输入输出的加速。具体用法看样例#include using namespace std;int main(){
2018-01-26 20:53:07 133
原创 C++中的文件录入,输出
#include <fstream>#include <iostream>using namespace std;void initial(){ ifstream infile; int n; char filename[50]; cout << "请输入目标文件名:" << e...
2018-01-24 21:32:02 484
原创 递推+大数相加
第二种用数组实现大数加法,简洁:#include #include using namespace std;char table[1001][1000] = {0};void BigNumAdd(){ table[1][0] = 1; table[2][0] = 2; table[3][0] = 4; table[4][0] = 7; for(int i = 5;
2017-12-30 13:24:43 172
原创 矩阵快速幂2
#include #include #include using namespace std;struct m { int a[3][3];};typedef struct m matrix;matrix mod(matrix x){ for (int i = 1;i <= 2;i ++) for (int j = 1;j <= 2;j ++)
2017-12-29 20:38:41 155
原创 正宗矩阵快速幂
#include #include #include using namespace std;typedef long long ll;const int MOD = 10000;struct mat{ ll a[2][2];};mat mat_mul(mat x,mat y){ mat res; memset(res.a,0,sizeof(res.
2017-12-29 20:22:02 92
原创 经典约瑟夫 + 类似约瑟夫
题目的链接:点击打开链接习题8.5——初级Time Limit: 1000MS Memory Limit: 131072KTotal Submissions: 2934 Accepted: 1604Description有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退
2017-12-27 16:23:16 300
原创 字符串的常规操作
字符串的筛选选出数字 #include<stdio.h> int main() { char a[80]; int i = 0; gets(a); while(a[i] != '\0') { if('0'<=a[i]&&a[i]<='9') ...
2017-12-27 09:27:54 365
原创 找单词——记录次数的动归,或者母函数
题目:点击打开链接#include #include #include #include using namespace std;int c1[60],c2[60];int a[30],b[30];int main(){ int n; scanf("%d",&n); while(n--) { for(int i = 1; i <= 26; i
2017-12-24 21:23:11 140
原创 母函数的学习
大神的链接经典无限模板#include#includeusing namespace std;#define M 1000int a[M],b[M];//a[M]中存最终项系数;b[M]中存取中间变量;int main(){ int m,n; int i,j,k; cout<<"请输入最初有几项表达式相乘: "<<endl; while (1
2017-12-22 21:32:11 153
原创 母函数的初识——本拉登 hdu 1085
母函数——本拉登#include #include #include using namespace std;int num[10] ;int c1[100000] , c2[100000] ;int main(){ int i,j,k; while(cin >> num[1] >> num[2] >> num[5] && num[1] || num[2] || num[
2017-12-22 20:54:13 257
原创 一道暴力,用数学方法优化
The sum problem相关的整理讲解1讲解2#include #include #include #include using namespace std;int main(void){ //cout<<fixed<<setprecision(2); int N,m; while(cin>>N>>m && N||m) { for(int n=sqr
2017-12-20 10:30:31 168
原创 多重背包有个疑惑点
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 32929 Accepted Submission(s): 13826Problem Description
2017-12-18 20:49:32 173
原创 选课时间——深搜
又是一道完全不一样的深搜题目,绝望ing++http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1150http://acm.hdu.edu.cn/showproblem.php?pid=2079#include #include #include using namespace std;int score[10]
2017-12-15 20:29:25 460
原创 逆波兰表达式 —— 递归专题
#include #include #include using namespace std;double exp(){ //读入一个逆波兰表达式,并计算结果 char s[20]; cin >> s; switch (s[0]){ case '+': return exp()+exp(); case '-': return
2017-12-15 16:31:40 323
原创 N 皇后问题 —— 递归求解
#include #include using namespace std;int N;int queenPos[100];//用来储存皇后的位置,最左上角是(0,0)void NQueen(int k);int main(){ cin >> N; NQueen(0); //从第0行开始摆皇后 return 0;}// 让我自己实现一下void N
2017-12-15 16:17:45 301
原创 一种的多重背包背包——Coin Change
http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1140我的暴力算法这是利用深搜的#include int sum,counter;const int a[5] = {1,5,10,25,50};void dfs(int recoder,int sum,int number){ if (number
2017-12-13 22:50:46 233
原创 大数取模
#include #include #include using namespace std;int main(){ char n[1000]; int m; int ans = 0; scanf("%s %d",&n,&m); for (int i = 0;i < strlen(n);i ++){ int num = n[i]
2017-12-12 15:58:59 306
原创 大数计算优化
// 进行大数的相加#include #include #define LEN 101// 将火星由字符型转换为整型,并且放在数组的尾部void convert (char s[],int intS[]){ int i; int m;// 放在字符串中的位置 for (i = 0;i < strlen(s);i ++){ m = strl
2017-12-11 18:55:28 414
原创 扩展欧几里德的收获,和遗憾
扩展欧几里德问题的研究花了 近10个小时,大致上是懂了,总之存在ax+by=gcd(a,b) ,且只要c/gcd(a,b)能除尽,就一定存在ax+by = c , 如果想要有限制,请查询裸扩展欧几里得算法 其有一部就是神器了: x = (x%b+b)%b y = (y%a -a)%a ...
2017-12-10 20:39:58 199
原创 枚举——三种解
第一种因为只有16种,可以快速枚举 用16个if第二种利用位运算 的 特殊来枚举#include using namespace std;int main(){ int a[6]; int n; cin >> n; while (n --){ for (int i = 1;i <= 5;i ++) cin
2017-12-10 19:00:10 287
原创 埃氏筛法 —— 对素数的使用
#include #include #include using namespace std;int a[1000005];int main(){ a[1] = 1; a[2] = 0; for (int i = 2;i <= 1000000;i ++){ if (a[i] == 0) for (int j = 2;j * i <= 1000000;j ++){ a
2017-12-10 18:03:47 195
原创 快速分解质因子
#include #include using namespace std;int main(){ int n ; while (cin >> n){ for (int i = 2;i*i <= n;i ++){ if (n % i == 0){ while (n % i == 0) n /= i; cout << i << " "; }
2017-12-10 18:02:27 628
原创 扩展欧几里得的 ——要求第一个数为正
#include using namespace std;typedef long long LL;LL e_gcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1; y=0; return a; } LL ans=e_gcd(b,a%b,x,y); LL temp=x;
2017-12-10 18:01:07 173
原创 next_permutation函数初识
#include #define MAX_M 10#define MAX_N 10using namespace std;bool used[MAX_N];int perm[MAX_M];// 生成{1,2,3,4,....,n-1}的n!种排列void permutation1(int pos,int n){ if (pos == n){ cout <
2017-12-09 10:53:36 266
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人