
AMC&&算法
文章平均质量分 70
俊雪恋
本科生在读,17年9月份去电子科大读研
展开
-
3n+1问题
大三下了,马上要出去参加夏令营了,就开始复习算法和数据结构了。这是第一个简单的题目。原创 2016-03-23 15:07:58 · 546 阅读 · 1 评论 -
c语言实现求组合数(带点优化的思想,防止溢出)
这是大家都知道的组合数,思想也很简单,但是里面的阶乘,容易溢出,让m!/n!先约分,减小数的大小,m!/n! = (n+1)(n+2)(n+3)···(m-1)(m);如果m-n > n的话,我们就让n = m-n.j尽可能让乘起来的数小一点。代码打印的是25里面选12个的组合数 5200300.#include long long factorial(int m, int n){原创 2017-04-02 22:10:19 · 7896 阅读 · 0 评论 -
刽子手游戏
刽子手游戏其实是一款猜单词游戏, 游戏规则是这样的:计算机想一个单词让你猜,你每次可以猜一个字母。 如果单词里有那个字母,所有该字母会显示出来;如果没有那个字母,则计算机会在一幅“刽子手”画上填一笔。 这幅画一共需要7笔就能完成,因此你最多只能错6次。 注意,猜一个已经猜过的字母也算错。在本题中,你的任务是编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了(You win.)、 输了(You原创 2017-04-05 13:30:16 · 675 阅读 · 0 评论 -
救济金发放
n(n几个注意点:从1开始数,把1包含里面,所以从n开始数,从n开始数,为了把n包含在里面,从1开始。p = (p + d + n-1)%n + 1,为了把顺时针的合并所以加上了n-1,因为逆时针d = 1,d+n-1=n.对于顺时针来说没有用。#include #define maxn 25int n, a[maxn];int go(int p, int q, int t){ w原创 2017-04-05 16:03:23 · 1375 阅读 · 0 评论 -
解释下关于数状数组区间更新、单点查询和区间更新、区间查询
首先说明一点,HDU - 1556 Color the ball (一维树状数组 + 区间修改 + 单点求值),比如给区间[a, b]加1,就直接用,add(a, 1),add(b+1, 1),那是因为这个题本来就满足前缀和,可以这么用,对于其他的序列这样用肯定是错的。现在来讲一下树状数组正确的区间更新,好坑啊!网上找了很多博客和文章,讲的都不清楚,有的还以为像气球涂色一样,这样做就是正确的区间更原创 2017-06-14 21:03:26 · 1213 阅读 · 0 评论 -
保卫方案(京东2017笔试题)
战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都位于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。 一旦发生外地入侵事件,山顶上的岗哨将点燃烽烟,若两个岗哨所在的山峰之间没有更高的山峰遮挡且两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小山处于环上,原创 2017-10-01 23:31:41 · 1020 阅读 · 0 评论 -
全排列的实现字典序写法,递归也给附带写了
1、字典序的实现import java.util.Arrays;public class Main { public static void Permutation(int[] nums) { Arrays.sort(nums); while (true) { for (int i = 0; i < nums.length; i++) { System.out.prin原创 2017-11-28 20:30:48 · 1676 阅读 · 0 评论 -
KMP算法实现C和java版本
网上代码很多,不过也有很多都是错的。至于原理,我也讲不清,首先明白next数组是怎么求,至少你要先明白求最长公共前缀和后缀,人为规定前缀不包含最后一个字符,后缀不包含第一个字符,然后利用next数组就不用暴力匹配,pattern会滑动一段距离。#include #include #define N 100using namespace std;int next[N]; void ge原创 2017-09-21 10:30:30 · 213 阅读 · 0 评论 -
出现次数的TOP K问题
【题目】给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印出现次数前k名的字符串。【要求】如果strArr长度为N,时间复杂度请达到O(Nlogk)。#include #include #include #include #include #define MinData -100000 using namespace std;typede原创 2017-09-16 13:14:14 · 693 阅读 · 0 评论 -
详解manacher算法,及其扩展
public class ManacherAlgorithm {/*详解manacher算法,及其扩展*/ public static char[] manacherString(String str) { char[] charArr = str.toCharArray(); char[] res = new char[str.length() * 2 + 1]; int i原创 2017-09-22 09:48:27 · 337 阅读 · 0 评论 -
环状序列
题目:长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,图3-4的环状串有10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为"最小表示"。输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT,CGAGTC原创 2017-03-31 13:02:09 · 734 阅读 · 0 评论 -
求最小生成元
如果x+x的各个数字之和得到y,就是说x是y的生成元。给出n(1利用打表法,提前把1到100000的最小生元给存下来,你要知道谁的最小生成元,直接输出就行了。#include #define N 100005int a[N];int main(){ int n; scanf("%d", &n); for(int i = 1; i <= 100000; i++) { in原创 2017-03-30 15:39:43 · 1674 阅读 · 3 评论 -
倒三角形
水题#include int main(){int n;scanf("%d",&n);for(int i = n; i >= 1; i--){for(int k=1; k printf(" ");for(int j = 1; j {printf("#");}printf("\n");} return 0;}原创 2016-03-29 10:18:12 · 452 阅读 · 1 评论 -
printf中占位宽和小数点控制
#include int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); printf("%.*f\n", c, (double)a/b); return 0; } 变量c就是制定输出的小数点的位数的。原创 2016-03-29 10:42:47 · 1234 阅读 · 1 评论 -
c语言把一个数组里面的部分值直接复制到另外一个数组
头文件是#include ,如果要从数组a复制k个元素到数组b,可以这样做memcpy(b,a,sizeof(int)*k);#include #include int main() { int a[5]={0,1,2,3,4}; int b[5]; memcpy(b,a,sizeof(int)*3); for(int i = 0; i < 3; i++) printf(原创 2016-03-29 11:14:56 · 48684 阅读 · 2 评论 -
scanf输入时候的\n问题
当我们使用scanf输入时候,非控制符一定要原样输入,不然就会跟自己预期结果不一样。下面我们来看一下实际的例子。#include int main(){ int n; scanf("%d\n",&n); //注意此处的\n printf("%d",n); return 0;}直到输入\n回车后才会输出,这就是scanf输入时候,非控制字符一定要原样输入,使用scanf一定原创 2016-07-18 09:54:54 · 1709 阅读 · 0 评论 -
素数距离题目
好久没有刷题了,于是去南阳理工的oj上从刷入门题,练练手,题目如下:素数距离问题时间限制:3000 ms | 内存限制:65535 KB难度:2描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出0原创 2016-07-18 14:53:31 · 327 阅读 · 0 评论 -
最长递增子序列动态规划求解和利用二分查找去优化动态规划,优化成n*logn
自从保研后,就找个兼职做财务,闲的时候就看各种技术贴和面经,发现想进大型互联网公司,算法和数据结构就必须过关了。借用左神说的,国内好公司爱考算法和数据结构,国外互联网公司几乎只考算法和数据结构。所以我就决定好好刷算法了。上题了:给定数组arr,返回arr的最长递增子序列。解法一:常规的dp。#include int main(){ int n, max, m, k; scanf("原创 2017-01-03 15:21:58 · 1454 阅读 · 0 评论 -
如何写出一个返回多个值的c语言子函数
今天跟以往一样刷水题,因为水题没有刷完。我发现刷水题还是有用的,自己没有理解清楚的c的知识,等你写的代码报错后,你就能都弄懂了。结果今天这题目引发我了我的一个问题,题目如下:5个数求最值时间限制:1000 ms | 内存限制:65535 KB难度:1描述设计一个从5个整数中取最小数和最大数的程序输入输入只有一组测试数据,为五个不大于1万的原创 2016-07-22 10:23:35 · 14019 阅读 · 2 评论 -
开灯问题
有n盏灯,编号为1~n。第一个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。看k样例输入:7 3样例输出:1 5 6 7原创 2016-04-04 12:46:14 · 483 阅读 · 0 评论 -
蛇形填数
蛇形填数时间限制:3000 ms | 内存限制:65535 KB难度:3描述在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4输入直接输入方阵的维数,即n的值。(n输出输出结果是蛇形方阵。样例输入3样例输出7 8 16 9 25原创 2017-03-28 14:29:17 · 237 阅读 · 0 评论 -
39. Combination Sum
这类题太多了,换零钱,寻找多少个数和为定值,大同小异。class Solution { public List> combinationSum(int[] candidates, int target) { List> res = new ArrayList>(); if (candidates == null || candidates.length ==原创 2017-12-04 14:18:12 · 189 阅读 · 0 评论