随笔分类 - NOIP/CSP
摘要:拿个单调队列的题做试验: 使用STL的代码 #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int n,m,x,f[N]; deque<int>q; int main(){ freopen("test.in","r",
阅读全文
摘要:OI界都说,STL速度很慢,很多STL内部的函数常数很大,运行速度都很不理想,很多时候都是手写数组来模拟的。 但是实际上,STL的速度并非那些人所说的那样,运行速度很慢,这篇文章就来破解掉这个谣言。 1.关于泛型 STL的库都是用泛型来写的,应该不用举例了吧: stack<int>s; deque<
阅读全文
摘要:#1000位斐波那契数 描述 斐波那契数列是按如下递归定义的数列: F1=1 F2=1 Fn=Fn−1+Fn−2 因此斐波那契数列的前12项分别是: F1=1 F2=1 F3=2 F4=3 F5=5 F6=8 F7=13 F8=21 F9=34 F10=55 F11=89 F12=144 第一个包含
阅读全文
摘要:题目描述: 215=32768,而3276832768的各位数字之和是3+2+7+6+8=263+2+7+6+8=26。 21000的各位数字之和是多少? 解法:高精度模拟 #include<bits/stdc++.h> using namespace std; int ans[1000]; int
阅读全文
摘要:先看题目 物品不能分隔,必须全部取走或者留下,因此称为01背包 (只有不取和取两种状态) 看第一个样例 我们需要把4个物品装入一个容量为10的背包 我们可以简化问题,从小到大入手分析 weight value 2 1 3 3 4 5 7 9 先考虑物品数量为1的情况: 把前1件物品放入容量为1的背包
阅读全文
摘要:由于原书的代码中API针对作者自制的系统,这里为适应C语言标准做了修改。 #include<bits/stdc++.h> using namespace std; const int INVALID=-0x7fffffff; char *skipspace(char *p) { for (; *p
阅读全文
摘要:2520是最小的能够被1到10整除的数。 最小的能够被1到20整除的数是多少? 题目意思: 求1-20之间所有数的最小公倍数。 题目分析: 1.我们知道,多个数之间的最小公倍数,可以使用分解质因数的方法进行。 例如我们要求1,2,3,4,5,6的最小公倍数,先分解质因数 然后,把每个质因子(2,3,
阅读全文
摘要:1.前序遍历 根-左-右的顺序遍历,可以使用递归 void preOrder(Node *u){ if(u==NULL)return; printf("%d ",u->val); preOrder(u->l);preOrder(u->r); } 2.中序遍历 左-根-右的顺序遍历,可以使用递归 vo
阅读全文
摘要:#前言 闲着没事写写玩玩的。 #目录 1.十进制转二进制/八进制/十六进制 2.二进制/八进制/十六进制转十进制 3.二进制/八进制/十六进制之间的互相转换 #1.十进制转二进制/八进制/十六进制 ##1.1.十进制转二进制 数学上的方法是除以2,倒取余数,例如: 按照从下往上的顺序写,就是1010
阅读全文
摘要:1.暂不支持处理负数 2.以A+B Problem为背景 #include<bits/stdc++.h> using namespace std; int num; int read(){ int res=0; int f=0; char c; while(c<'0'||c>'9')c=getcha
阅读全文
摘要:在前面的文章我提到过,如果想要多次求和,可以使用前缀和,通过预处理的手法,可以使得求和的复杂度是O(1)。 但是,如果我们把题目改一下: 现在有一些操作: 操作A 输入1 L R,输出L-R区间的和 操作B 输入2 P X,使得A[P]+=X A[P]+=X就是对A数组进行修改。 如果使用前缀和,求
阅读全文
摘要:题目描述: 数字“4”和“7”是幸运数字,那么仅用幸运数字组成的整数就是幸运整数,请你帮忙找出第 k 个幸运整数。输入 k,输出第 k 个整数。 思路: 使用模拟的方式,像高精度一样,把每个位模拟一下做+1的操作例如一开始是4,下一个就是7,再下一个需要进位,变为44,以此类推 我们可以使用一个数组
阅读全文
摘要:表达式求值:一个只有+,-,*,/的表达式,没有括号 一种神奇的做法:使用数组存储数字和运算符,先把优先级别高的乘法和除法计算出来,再计算加法和减法 int GetVal(string s){ int A[10000]; int Num=0,Pos=0; for(int i=0;i<s.size()
阅读全文
摘要:【算法】前缀和 题目 先来看一道题目:(前缀和模板题) 已知一个数组A[],现在想要求出其中一些数字的和。 输入格式: 先是整数N,M,表示一共有N个数字,有M组询问 接下来有N个数,表示A[1]..A[N]的数字 接下来是M组询问,每组询问包含两个X,Y,表示想要求出A[X]..A[Y]的和 输出
阅读全文
摘要:#include<stdio.h> int a[10],used[10]; int n=0; void dfs(int nth){ if(nth==n){ for(int i=0;i<n-1;i++)printf("%d,",a[i]); printf("%d\n",a[n-1]); return;
阅读全文
摘要:1.统计一个整数x中二进制1的个数 while(x){ if(x&1)k++; x>>=1; } while(x){ x-=x&-x; cnt++; } (x>>0&1) //0号位 (x>>1&1) //1号位 (x>>2&1) //2号位 //... for(int i=0;i<31;i++){
阅读全文
摘要:a23 = a16 * a4 * a2 * a^1 res=a^1 res*=a^2 res*=a^4 res*=a^16 ... #include<bits/stdc++.h> #define ll long long using namespace std; int main(){ ll a,b
阅读全文
摘要:如果我们已知一些有序的数字,在其中需要查找给定的数字,如何解决这个问题? 最简单的方法是挨个查找,使用循环,O(n)的复杂度。 int a[]={1,2,5,6,9,12,35,60,89,125}; int k=89; for(int i=0;i<10;i++){ if(a[i]==k){ cou
阅读全文
摘要:解题方法 这题使用模拟的方法。 模拟行走,如果走到红绿灯的位置,就做余数的判断。红绿灯的红色和绿色都是周期问题 代码 #include<bits/stdc++.h> using namespace std; int n,l,ans; int d[100],r[100],g[100]; int mai
阅读全文
摘要:#题目描述 假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。 输入格式 一行:表达式 输出格式 一行:“
阅读全文