有多少个等差数列? 序号:#20难度:困难时间限制:500ms内存限制:10M 描述 等差数列是常见数列的一种,如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列就叫做等差数列,而这个常数叫做等差数列的公差,公差常用字母d表示.即对于数列S,它满足了(S[i]-S[i-1]) = d (i \gt 1)(S[i]−S[i−1])=d(i>1). 显然,一个数字无法构成等差数列,而任意两个数字可以形成一个等差数列. 这里给出了一个长度为N (0 \lt N \lt 200)N…
题目链接 https://code.mi.com/problem/list/view?id=20 代码 #include <bits/stdc++.h> using namespace std; ; void getNumVec(vector<int>& v, string s) { , flag = ; ;i < s.length(); ++i) { if (s[i] == ' ') { v.push_back(temp * flag); temp = ; flag…
 有多少个公差为 2 的等差数列 序号:#31难度:有挑战时间限制:1000ms内存限制:10M 描述 给出一个正整数N(2<= N <=10000000),统计有多少公差为2的正整数等差数列,使得数列的和为N. 举例: 正整数 15,可以写为 15 和 3,5,7 两个等差数列. 其中 15 自身就是一个等差数列,3+5+7=15 也是一个符合条件的等差数列,所以输出为 2,表示有两个符合条件的等差数列. 请注意时间复杂度限制 输入 一个正整数,表示等差数列中所有数的和,范围为 [2, 10…
dp 另: 小米oj上的测试样例是错的 ; ) function solution(line) { if (line == 0) return 0; if (line == 1) return 1; var dp = new Array(line + 1); dp[1] = 1; dp[2] = 2; for (let i = 3; i <= line; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[line]; }…
 硬币比赛 序号:#47难度:困难时间限制:1000ms内存限制:10M 描述 有 n 个不同价值的硬币排成一条线.有 A 与 B 两个玩家,指定由 A 开始轮流(A 先手,然后 B,然后再 A..)从左边依次拿走 1 或 2 个硬币(不能不拿,也不能拿其他个数),直到没有硬币为止.最后计算 A 与 B 分别拿到的硬币总价值,价值高的人获胜. 请依据硬币的排列情况来判定,先手的玩家 A 能否找到必胜策略? 输入 使用逗号(,)分隔的一个正整数数组,表示这排硬币的排列情况与对应价值 输出 true…
[题目]1055 最长等差数列 [题意]给定大小为n的互不不同正整数集合,求最长等差数列的长度.\(n \leq 10000\). [算法]动态规划 两个数之间的差是非常重要的信息,设\(f_{i,j}\)表示以i和j开头的最长等差数列长度,初始化为2,那么: \[f_{i,j}=f_{j,k}+1 \ \ , \ \ |A_i-A_j|=|A_j-A_k|\] 怎么快速找i,j,k?从后往前枚举j,然后双指针i和k向两边移动判断即可. 复杂度\(O(n^2)\). 注意:这题卡时间和空间,f数…
Description zyf不小心得了一种怪病,为了维持一天的精力他必须不停跳动.于是他买了一条跳舞毯,每天跳上几小时.众所周知,跳舞毯是给定一个序列,让你在指定时间踏指定的按钮,但zyf似乎不怎么擅长,为此他写了个外挂,以修改它的输入序列,得到满分! 这个外挂的厉害之处在于它能等到zyf跳完.输入序列后再进行修改,修改的方式有三种,在任意位置插入.删除或替换一个指令,每次插入需要a时间,删除需要b时间,替换需要c时间,现在zyf想用最短时间去修改他输入的序列得到满分(即与给定序列一样),但这…
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾.突然,有一天出操负责人想了一个主意,想要变换一下队形,就是当大家都从楼上跑下来后,所有的学生都随机地占在一排,然后出操负责人从队伍中抽取出一部分学生,使得队伍中剩余的学生的身高从前往后看,是一个先升高后下降的"山峰"形状.据说这…
拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以到达随意的高度.可是以后每一发炮弹都不能高于等于前一发的高度.某天.雷达捕捉到敌国导弹来袭.因为该系统还在试用阶段.所以仅仅用一套系统.因此有可能不能拦截全部的导弹. 输入 第一行输入測试数据组数N(1<=N<=10) 接下来一行输入这组測试数据共同拥有多少个导弹m(1<=m<=20)…
虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 $f[i][j]$表示第一个队列匹配到了$i$位置,第二个队列匹配到了$j$位置是否可行 转移的时候分两种情况讨论 9. 移除 K 位得到最小值 显然左边的数比右边大的时候删了左边的是更优的, 然后特判一坨情况即可 14. 在一个有序的经过旋转的数组里查找一个数 排序后枚举 22. 找到第 N 个数…
思路: 大概思想如下: 1. 动态规划求解,构造dp[][] 二维数组: 2. 设dp[i][j], i 为 第一个字符串的第i个字母:j 为 第二个字符串的第j个字母  3. dp[i][j] 如果为 1 ,表示 s1[i] 等于 s3[i+j] 且 dp[i−1][j] 等于 1,同理s24. 简单的说 dp[i][j] 为 1 就表示这个点可达,以 dp[0][0] 为起点, dp[len1][len2] 为终点,dp数组中值为 1 的点为路径,向下走表示取 s1 的字符,向右走表示取 …
 不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一份代码,那么就会被感染,无关改动的先后顺序. 这个病毒病的潜伏期很长,码农感染后仍然能像正常人一样 coding,但一旦被传染,就必死无疑. 正巧这段时间小王也瞎改了一通别人的代码,这里有一份整理好的 git 修改历史,记录在品罗线装便携笔记本上,借着 Yeelight 智能护眼台灯温柔的灯光,赶快帮小王看看…
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/C 题目: Description The people of Mohammadpur have decided to paint each of their houses red, green, or blue. They've also decided that no two neighboring houses will be painted t…
题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的.由于小明马上就要硕士毕业了,面临着买房.买车.给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包.万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间…
题目地址:http://ac.jobdu.com/problem.php?pid=1547 题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈. 要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈. 求符合条件的操作序列种类. 例如,4个操作组成的操作序列符合条件的如下: 入栈,出栈,入栈,出栈 入栈,入栈,出栈,出栈 共2种. 输入: 输入包含多组测试用例,每组测试用例仅包含一个整数n(1<…
题目地址:http://ac.jobdu.com/problem.php?pid=1410 题目描述: 给你一些长方体的积木,问按以下规则能最多垒几个积木. 1 一个积木上面最多只能垒另一个积木. 2 在下面的积木的长宽高要大于或等于上面的积木的长宽高 输入: 输入有多组,每组输入第一行是一个整数n(1<=n<=1000000),接下来n行的每行包括三个整数l,w,h(1 <= w,l,h <= 100),表示积木的长宽高. 输出: 对于每组输入,输出按规则最多能垒几个积木. 样例…
题目地址:http://ac.jobdu.com/problem.php?pid=1131 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK, 则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K). 你的任…
题目地址:http://ac.jobdu.com/problem.php?pid=1453 题目描述: Tino wrote a long long story. BUT! in Chinese... So I have to tell you the problem directly and discard his long long story. That is tino want to carry some oranges with "Carrying pole", and he…
题目地址:http://ac.jobdu.com/problem.php?pid=1452 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里…
题目地址:http://ac.jobdu.com/problem.php?pid=1086 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下: 距离s           票价 0<S<=L1         C1 L1<S<=L2        C2 L2<S<=L3        C3 输入保证0<L1<L2<L3<10^9,0<C1<C2<C3<1…
 灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应的 n-1 盏灯就会由亮变灭,或者由灭变亮.保证不会有两个开关控制同样的 n-1 盏灯. 现在刘同学想把灯全部开好,但是这些灯一开始的状态非常乱,刘同学想知道最少需要按多少次开关才能使所有灯全部亮起. 输入 单组数据输入,每组数据一行,两个数 n,l 分别代表灯的数量.最开始时亮着的灯的数量(1<l…
A.数学等式 数据比较小,可以暴力+折半枚举. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ; map<int,int>mp; int main() { ; scanf("%d%d%d%d%d",&A,&B,&C,&D,&E); rep(i,-,)…
高弗雷勋爵 题目链接:https://code.mi.com/problem/list/view?id=113 这个解法比较暴力,主要需要注意的是一颗子弹 弹死两个及以上的情况. #include <iostream> #include <string> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; ]; void infect(int…
题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字.要求时间和空间复杂度最小. 输入 输入多个数字,每个数字以空格分开,回车结束 输出 输出内容为只出现过唯一一次的数字 输入样例 10 10 11 12 12 11 16 输出样例 16 思路常见的思路遍历所有数据,用map.字典去记录每个数据的…
Carryon 数数字 描述 Carryon 最近迷上了数数字,然后 Starry 给了他一个区间[l,r] ,然后提了几个要求, 需要将 ll 到 rr 之间的数全部转化成 16 进制,然后连起来. 将连起来的数又转化成 10 进制. 将最终结果对 15 取模. 数据范围:1<=l<=r<=1000000000000 输入 单组输入 l 和 r 的值 输出 输出最终结果. 输入样例 10 14 复制样例 输出样例 0 复制样例 小提示 如:10.11.12.13.14的16进制分别是a…
利用dfs解决,从给出的数组左边或右边开始遍历,对每一个数字进行判断,有三种情况: 1. 加上当前数字的值,遍历下一个数字 2. 加上当前数字的值,继续遍历该数字 3. 不加上当前的数字的值,遍历下一个数字 约束条件为: 超出数组等 var sum = 0; var nums; function solution(line) { var str = line.split(" "); nums = str[0].split(","); var num = parseI…
思路 排序后对两个字符串遍历 function solution(line) { var str = line.split(" "); var str1 = str[0].split("").sort(); var str2 = str[1].split("").sort(); var i = 0, j = 0; while (j < str2.length && i < str1.length) { if (str1…
思路: 重复k次: 1.找到并且删除第一个 num[i] > num[i+1] 的第i位数字. 2.若删除过程中,序列变成递增序列,则直接删除最后一位. 注意除去字符串头的0 def solution(line): num, k = line.split(" ") for j in range(0, int(k)): flag = True for i in range(0, len(num)-1): if num[i] > num[i+1]: flag = False n…
求逆序对数即可 function solution(line) { var nums = line.split(","); var res = 0; for (let i = 0; i < nums.length - 1; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] > nums[j]) { res += 1; } } } return res; }…
思路: 参考这个思路 即:将每个数字放在对应的第几个位置上,比如1放在第1个位置上,2放在第2个位置上. 注意几个点:将每个数放在它正确的位置,前提是该数是正数,并且该数小于序列长度,并且交换的两个数字不相等. private static String solution(String line) { String[] strs = line.split(","); int[] nums = new int[strs.length]; for (int i = 0; i < nu…