全排列问题
STL next_permutation函数实现原文链接掌握了next_permutation函数的原理:smile:12345678910111213141516171819202122void inline swap(char *s1,char *s2){ char t=*s1; *s1=*s2; *s2=t;}/***反转字符串函数,s,e分别执行字符串的开始和结尾,不能反转中文 **/void reverse(char *s,char* e){ for(e--;s<e;s++,e--)swap(s,e);}bool next_permutation(char *start,char *end){ char *cur = end-1, *pre=cur-1; while(cur>start && *pre>=*cur)cur--,pre--; if(cur<=start)return false; for(cur=end-1;*cur& ...
简单三维DFS搜索
题目problem link可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。Input输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小NM(1 <= N,M <=10)。T如上所意。接下去的前NM表示迷宫的第一层的布置情况,后NM表示迷宫第二层的布置情况。Output如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。Sample Input15 5 14S#. ...
数状数组求逆序对&&二维树状数组
参考原文:
二维树状数组我们先来讲讲怎么去表示。数组A[][]的树状数组定义为:
C[x][y] = ∑ a[i][j], 其中,x-lowbit(x) + 1 <= i <= x,y-lowbit(y) + 1 <= j <= y.
例:举个例子来看看C[][]的组成。设原始二维数组为:1234A[][]={{a11,a12,a13,a14,a15,a16,a17,a18,a19}, {a21,a22,a23,a24,a25,a26,a27,a28,a29}, {a31,a32,a33,a34,a35,a36,a37,a38,a39}, {a41,a42,a43,a44,a45,a46,a47,a48,a49}};那么它对应的二维树状数组C[][]呢?
记:B[1]={a11,a11+a12,a13,a11+a12+a13+a14,a15,a15+a16,…} 这是第一行的一维树状数组B[2]={a21,a21+a22,a23,a21+a22+a23 ...
数学问题模板
筛选质因子1234567 for(int i=2;i*i<=k;i++){ if(k%i==0){ p[++tail]=i; //p就是储存质因子的数组 while(k%i==0) k/=i; //把k中所有i的质因子全部除去 }} if(k>1) p[++tail]=k;
判断是否为质数123456789bool isp(int n){ if(n==1||n==0) return 0; if(n==2||n==3) return 1; if(n%6!=1&&n%6!=5) return 0; for(int i=5;i*i<=n;i+=6){ if(n%i==0||n%(i+2)==0) return 0; } return 1;}
容斥原理前言:
计算1-n中m的的倍数的数量时,直接n/m
容斥原理是在互质的数的基础上实现的公式:
(A+B+C+D+E……)-(AB+AC+AD……+BC+BD)+(ABC+B ...
如何给Hexo博客添加说说页面
前言
本文已经过期,说说已经更名为artitalk具体百度
最近看了许多大佬的博客,终于明白了我到底有多弱:weary:,不过虽然我菜,但是Chinese还是能看懂的:grin:,直接按照教程往下走,感谢把我教会的原文1和原文2
看看效果吧:
这个和QQ空间里面的说说类似,用来记录自己的生活以及心情都挺好的,请忽略内容里面的表情符号:sleeping:我太菜了,这些原本是要被转成表情的,但说说页面好像不支持,/手动流汗/,如果哪位大佬看到了这篇文章,祈求您留言指教我
好了,废话少说,正文开始:
步骤1.在themes\sakura\languages\zh-cn.yml中增添定义:
shuoshuo: 说说
2.修改导航栏,位置:themes\sakura_config.yml增添:
说说: {path: /shuoshuo/, fa: fa-commenting-o fa-commenting }
这里需要注意的是如果你的说说是添加在导航栏的子页面的,比如说在归档里面,那么需要在最后添加逗号( , )
3.在博客主目录下新建目录:
hexo new page ...
高精加减乘除
加法1234567891011121314string add(string a,string b){ if(a.size() > b.size()) swap(a,b); b.insert(b.begin(),'0'); int t = 0; for(int i = b.size()-1,j = a.size()-1;i>=0;i--,j--){ int cur; if(j>=0) cur = (a[j]-'0') + (b[i]-'0') + t; else cur = (b[i] - '0') +t; b[i] = (cur%10) + '0'; t = cur/10; } int idx = b.find_first_not_of('0'); return idx != -1? b.substr(idx ...
数独
题目题目描述
数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。
芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。
这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。
据介绍,目前数独游戏的难度的等级有一道五级,一是入门等级,五则比较难。不过这位数学家说,他所设计的数独游戏难度等级是十一,可以说是所以数独游戏中,难度最高的等级他还表示,他目前还没遇到解不出来的数独游戏,因此他认为“最具挑战性”的数独游戏并没有出现。输入格式
一个未填的数独
输出格式
填好的数独
输入输出样例
输入 #1
8 0 0 0 0 0 0 0 0
0 0 3 6 0 0 0 0 0
0 7 0 0 9 0 2 0 0
0 5 0 0 0 7 0 0 0
0 0 0 0 4 5 7 0 0
0 0 0 1 0 0 0 3 0
0 0 1 0 0 0 0 6 8
0 0 8 5 0 0 ...
皇后问题
题目题目描述
一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。
上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i 个数字表示在第 i 行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。并把它们以上面的序列方法输出,解按字典顺序排列。请输出前 333 个解。最后一行是解的总个数。
输入格式
一行一个正整数 n,表示棋盘是 n×n 大小的。
输出格式
前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。输入输出样例
输入 #1
6
输出 #1
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
说明/提示
【数据范围】对于 100%100\%100% 的数据,6≤n≤136 \le n \le 136≤n≤13。
题目翻译来自NOCOW。
USACO Training Section 1.5
Code12345678910 ...
离散化加差分求解
题目Covered Points Count
You are given n
segments on a coordinate line; each endpoint of every segment has integer coordinates. Some segments can degenerate to points. Segments can intersect with each other, be nested in each other or even coincide.
Your task is the following: for every k∈[1..n], calculate the number of points with integer coordinates such that the number of segments that cover these points equals k. A segment with endpoints li and ri covers point x if and only if li≤x≤ri.
Input
...
差分
题目题目:
输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。
输入格式
第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。
输出格式
共一行,包含n个整数,表示最终序列。
思路对一个区间内的数加C,如果暴力加,会浪费很多时间,我们可以开一个新数组用于差分操作,数组下标就代表数轴上的每一个数,每次给定一个区间,把以区间左端点未下标的数组值加上C,而以(区间右端点+1)为下标的数组值减去C,进行m次操作后,再求一次前缀和并加上原来数组的值就是进行区间操作后的数组,参考下图:
Code123456789101112131415161718192021222324#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int a[100],b[100]; //例题,开的很小,你可以开大int ...