
小白书
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
小白书贪心之区间选点问题
本质上是和前面那个选择尽量多的区间,使的俩俩没有公共点一样的。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const double eps=1e-5;struct node{ int原创 2016-03-03 22:37:04 · 453 阅读 · 0 评论 -
小白书之八皇后问题回溯法
恰好每行每列各放置一个皇后。如果用C[x】表示第x行皇后的列编号,则问题变成了全排列生成问题;不加剪枝,直接利用横纵坐标判断是否和法:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#in原创 2015-09-11 19:42:38 · 364 阅读 · 0 评论 -
小白书暴力之除法,最大乘积,分数拆分,双基回文数
除法;输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL原创 2015-09-09 11:19:24 · 666 阅读 · 0 评论 -
小白书之拓扑排序
将小于关系转化为一条有向边,则所有关系组成一张图,dfs这张图,有环则直接退出不存在拓扑排序,否则将元素加入拓扑序首部。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using nam原创 2015-08-17 14:56:26 · 469 阅读 · 0 评论 -
小白书之迷宫最短路径bfs
vis标记,以免更改了值和路径,同时打印路径时用递归同样会有溢出的危险,改成非递归即可。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using namespace std;cons原创 2015-08-17 11:32:17 · 558 阅读 · 0 评论 -
小白书之迷宫八连块的递归写法和栈写法
如果用递归的话,如果图过于大,有栈溢出的危险,所以这里用个栈写法。#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using namespace std;const int maxn=10原创 2015-08-17 10:03:17 · 643 阅读 · 0 评论 -
小白书之根据二叉树的先序遍历和中序遍历得出后序遍历
可以类似的写一下根据后序遍历和中序遍历得出先序遍历,只要理解函数递归调用的过程就很好写,函数递归调用的过程只要记住一句话,只有递归返回条件满足才会返回,只有当前的所有问题都解决了,才会递归回到上一层。#include#include#include#include#include#include#include#include#include#include#inc原创 2015-08-17 08:31:05 · 521 阅读 · 0 评论 -
小白书之二叉树指针法构建二叉树以及二叉树先序遍历
#include#include#include#include#include#include#include#include#include#include#include#include#define LL __int64using namespace std;const double pi=4*atan(1.0);const int MAXN=1001;/*原创 2015-08-16 21:02:17 · 465 阅读 · 0 评论 -
二叉树之小球下落
可以直接暴力模拟,不过不出意外会超时,所以找一下规律,这个规律很简单,自行思考#include#include#include#include#include#include#include#include#includeusing namespace std;/*const int maxn=(1<<20)+5;int a[maxn];int main(){原创 2015-08-15 10:11:13 · 924 阅读 · 0 评论 -
小白书之栈的调用过程
注意使用栈的时候的栈的调用过程,以及栈的函数等等。注释的代码是我乱搞的,也不知道对不对。正确的姿势,是非注释部分模仿栈的调用过程写的代码。#include#include#include#include#include#include#include#include#includeusing namespace std;const int MAXN=1000+10;int原创 2015-08-14 19:25:39 · 457 阅读 · 0 评论 -
小白书之困难的串回溯
如果一个字符串包含俩个相邻的重复子串,则称它是“容易的串”,其他串称为"困难的串“,输入正整数N和L,输出由前L个字符组成的,字典序第k小的困难的串。我们只需要判断当前串的后缀,而非所有的子串是否满足条件即可.#include#include#include#include#include#include#include#include#include#include原创 2015-09-11 21:20:23 · 649 阅读 · 2 评论 -
小白书之求无重复元素集合的子集
1:增量构造法:一次选出一个元素放到集合中。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace st原创 2015-09-11 18:49:31 · 622 阅读 · 0 评论 -
小白书贪心之选择不相交区间
这里贪心的原则就是选择一个区间之后留出更大的空间,给后面的去选择,所以先按照右区间b从大到小排序,这里选择的代码也比较巧妙,通过平移右区间去进行选择,排除。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1原创 2016-03-03 22:09:19 · 450 阅读 · 0 评论 -
小白书贪心之乘船问题
俩个坐标了l,r标记最轻的和最重的,每次r往左移动,直到i和j可以坐同一艘船,然后l++,r--;#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const double eps=1e-5;i原创 2016-03-03 21:28:28 · 370 阅读 · 0 评论 -
连续序列分成m段,最大值最小化,二分经典
这题比较巧妙地去猜答案,二分,重点是怎么求m段的连续和是否满足,这里用了一个贪心,不大于x,就一直把线往后移,大于的话就加一条线。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const原创 2016-03-03 19:58:32 · 2498 阅读 · 2 评论 -
小白书隐式图搜索之八数码问题
这题也是一个隐式图的问题,bfs即可,既是简单bfs的结构体办,用一个二维数组去存储每次可到达的点的状态,这题既是一个二维数组去存储九个数的状态,另外记得要写初始化函数look_up_table()和判重函数insert(),(即简单那bfs中的vis数组),俩个条件均满足方可插入队列,由于要存储状态这里用数组去代替队列更容易,而且可以增加二维数组的第二维的维数用来存储距离或者父节点原创 2015-09-14 19:59:30 · 753 阅读 · 0 评论 -
小白书之最优程序
这题是一个隐式树的bfs,注意输入n对数,n对数公用同一个程序去计算结果,相当于一个程序同时去计算几对数,然后用一个二维数组存下每次计算的值,bfs的时候注意判断下一步需要所有对数都满足可以计算的条件才能加入队列,不过感觉他写的代码比较繁琐,而且bfs写的有些奇怪,自己不怎么想写,看了好久才看懂这个代码,主要理清俩点:1:同一个程序去计算所有的点对数,同时计算。2:每步计算要满足条原创 2015-09-13 21:23:26 · 566 阅读 · 0 评论 -
小白书之隐式图的bfs
可以把三杯水各个时候的状态想象成一个点,能到达的点画一条有向边,这样就出现一个图,对这张图进行dfs,这里注意要用一个set去掉重复的状态,以免陷入死循环。同时这题用一个数组同时存储了三个杯子的状态并且顺带储存了父亲节点的状态,比较巧妙,但是好像一般bfs都是手写的队列,但是我习惯了用queue容器。#include#include#include#include#includ原创 2015-09-14 14:01:40 · 780 阅读 · 0 评论 -
小白书埃及分数之加深迭代搜索
首先说一下什么事加深迭代搜索:其实就是控制深度的dfs,至于这个深度控制在多少根据题来定。然后讲一下这个题。控制深度之后,枚举第k个分数然后dfs下去,第k个分数要确定上下界,上界即为a/b+1,下界首先要符合剩下的还有几个分数,然后不能超INT,具体的代码中查看,由于加深迭代搜索已经控制了题目中说的是分数数目最小,然后就是每次找到符合的,在某个第k项分数更小的话就更新an原创 2015-09-14 10:58:39 · 392 阅读 · 0 评论 -
小白书之回溯法求素数环
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=101;int A[原创 2015-09-11 20:14:30 · 538 阅读 · 0 评论 -
小白书之求排列
生成1—n的排列:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=原创 2015-09-11 17:03:14 · 345 阅读 · 0 评论 -
小白书之移动小球哈希表的链式结构
这题怪我脑子笨,掉进了当初学数据结构链表的黑洞中去了,想了好久没想明白,而实际上是个哈希表而已,#includeusing namespace std;const int MAXN=1000;int n,left[MAXN],right[MAXN];void link(int X,int Y){ right[X]=Y;left[Y]=X;}int main(){ in原创 2015-08-14 21:33:20 · 553 阅读 · 0 评论 -
UVA10361转化思想使代码更加简洁
自己写的代码不够简洁,使用转化思想把以及\n转化为\0将会使代码更加简单,把重点放在输出上,当输入改变对于输出没有影响时可以任意改变输入,甚至可以一边输入一边改变,下面给出自己的代码,和转化思想代码:#include#include#include#include#include#include#include#include#include#include#inclu翻译 2015-07-20 10:09:17 · 375 阅读 · 0 评论 -
UVA10010使用数组和一个for循环控制前进路径方向不变
注释部分为自己写的,想不到如何控制前进方向不变,只记得以前学dfs时每次方向都要改变,其实想控制方向不变加个for循环就行了#include#include#include#include#include#include#include#include#define LL long longusing namespace std;char s[60][60];string翻译 2015-07-19 23:48:09 · 479 阅读 · 0 评论 -
小白书84页100!的素因子个数
#include#include#include#include#include#includeusing namespace std;int is_prime(int n){for(int i=2;i*iif(n%i==0) return 0;return 1;}int prime[100],ccount=0;int main(){翻译 2014-10-05 08:13:25 · 547 阅读 · 0 评论 -
小白书79页对字符串和字符的排序
#include#include#include#include#include#includeusing namespace std;int n;char word[2000][10],sorted[2000][10];int cmp_char(const void* _a,const void* _b){char* a=(char*)_a;ch翻译 2014-10-05 08:11:44 · 477 阅读 · 0 评论 -
小白书55页水题的小技巧
#include#include#include#include#includeusing namespace std;int is_prime(int x){int i,m;assert(x>=0);if(x==1) return 0;m=floor(sqrt(x)+0.5);for(i=2;iif(x%i==0) return 0;re翻译 2014-10-04 21:49:17 · 390 阅读 · 0 评论 -
小白书73页bign类
const int maxn=1000;struct bign{int len,s[MAXN];bign(){memset(s,0,sizeof(s));len=1;}bign opetator=(const char* num){len=strlen(num);for(int i=0;is[i]=num[len-i-i]-'0';return *t翻译 2014-09-28 20:29:26 · 481 阅读 · 0 评论 -
小白书70页水题
#includechar *s="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";int main(){int i,c;while((c=getchar())!=EOF){for(i=1;s[i]&&s[i]!=c;i++);if(s[i]) putchar(s[i-1]);elseputchar(c);翻译 2014-10-04 21:48:35 · 404 阅读 · 0 评论 -
小白书21页阶乘之和
#include#include#include#include#include#includeusing namespace std;int main(){const int MOD=1000000;int i,j,n,s=0;scanf("%d",&n);if(n>25) n=25;for(i=1;i{int factorial=1;翻译 2014-10-04 21:48:10 · 418 阅读 · 0 评论 -
小白书41页最长回文字串
#include#include#include#include#include#include#include#define MAXN 5000+10using namespace std;char buf[MAXN],s[MAXN];int p[MAXN];int main(){int n,m=0,max=0,x,y;int i,j;翻译 2014-10-04 21:46:59 · 312 阅读 · 0 评论 -
小白书39页sprintf与格式控制
#include#include#include#include#include#include#includeusing namespace std;int main(){int i,ok,abc,de,x,y,z,count=0;char s[20],buf[99];scanf("%s",s);for(abc=111;abcfor(de=翻译 2014-10-04 21:46:33 · 448 阅读 · 0 评论 -
小白书77页
//#include#include#include//#include//#include//using namespace std;int get_next(int x){int a,b,n;char s[10];sprintf(s,"%d",x);n=strlen(s);for(int i=0;ifor(int j=i+1;jif(s[翻译 2014-10-05 08:11:29 · 509 阅读 · 0 评论 -
求字符串的最小周期
没什么说的,但是注意l%i==0,周期串的长度肯定是周期的倍数,不要忘记这个条件:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusin翻译 2015-07-15 10:29:59 · 1122 阅读 · 0 评论 -
Cantor的数表,注意一些题中数学的应用
本题主要注意平时做题的时候注意使用数学简化时间复杂度,贴上自己敲的不用解方程求n得代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include翻译 2015-07-15 16:47:38 · 569 阅读 · 0 评论 -
UVA489查找到的字符可以变成不可能会查找到的
这题注意已经猜测成功的字母,再次猜测是按照错的处理,另外对于同一个字母猜错俩次是按照俩次算的,被提议误导了,加了一个flag2数组,然而并不需要,另外这题为了判断已经猜对的题目再次猜是错的,可以把猜对的字母变成字母外的可打印字符,例如*,这样还可以去掉flag数组。#include#include#include#include#include#includeusing nam翻译 2015-07-19 16:46:45 · 463 阅读 · 0 评论 -
uva488题意的理解和空格的控制
此题一定要注意每个wave中间仅且只有一个空格,每个case之间也仅且只有一个空格,另外注意最后写成i!b||!t并不能AC,能不简化还是不要简化#include#include#include#include#include#includeusing namespace std;int main(){ int t; cin>>t; while(t--)翻译 2015-07-19 15:39:20 · 493 阅读 · 0 评论 -
uva445string与字符串数组和单个字符逐个输入
这题刚开始用string写的,貌似string不能输入回车,或者说string字符串里不能包含回车一样,用string时会少输出yi翻译 2015-07-19 14:59:41 · 564 阅读 · 0 评论 -
小白书86页欧拉公式,椭圆边界上n个点最多能把椭圆分成多少块
这题虽然代码比较简单,但是分析比较困难,注意分析理解欧拉公式,以及一些分析的方法:不难发现,最优方案不会让任何三条线段交与一点。为了计算出答案,我们先要学习欧拉公式:V+F-E=2。其中,V是顶点数(即所有线段的端点数加上交点数),E是边数(即n段椭圆弧加上这些线段被切成的段数),F是面数(即土地数加上椭圆外那个无穷大的面)。换句话说,只需求出V和E,答案就是E-V+1。不管是翻译 2015-07-18 09:01:14 · 1040 阅读 · 0 评论 -
UVA490注意字符串后面内容,不要想当然
起初没有加后面for循环中的if语句,而且没有上面的双重for循环一直WA,注意些就行,字符串太神奇了,一不小心就错了。#include#include#include#include#include#includeusing namespace std;int main(){ char s[105][105]; for(int i=0;i<105;i++)翻译 2015-07-19 00:49:54 · 949 阅读 · 0 评论