小米OJ 有多少个等差数列】的更多相关文章

 有多少个等差数列? 序号:#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]; }…
虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 $f[i][j]$表示第一个队列匹配到了$i$位置,第二个队列匹配到了$j$位置是否可行 转移的时候分两种情况讨论 9. 移除 K 位得到最小值 显然左边的数比右边大的时候删了左边的是更优的, 然后特判一坨情况即可 14. 在一个有序的经过旋转的数组里查找一个数 排序后枚举 22. 找到第 N 个数…
 不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一份代码,那么就会被感染,无关改动的先后顺序. 这个病毒病的潜伏期很长,码农感染后仍然能像正常人一样 coding,但一旦被传染,就必死无疑. 正巧这段时间小王也瞎改了一通别人的代码,这里有一份整理好的 git 修改历史,记录在品罗线装便携笔记本上,借着 Yeelight 智能护眼台灯温柔的灯光,赶快帮小王看看…
 灯 序号:#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…
思路: 大概思想如下: 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 的字符,向右走表示取 …
思路: 时间限制为O(n),即不能使用先排序后寻找的方法. 这里利用哈希表查询插入复杂度都为O(1)的特性来解,利用一个哈希表来保存每一个数字以及其所在数列的长度. 遍历每一个数字n:查询表中是否存在n-1和n+1,若存在,则hash[n]的值为1 + hash[n-1] + hash[n+1],若不存在即是 1. 同时,为了预防相同数字多次判断,每一次遍历时判断该数字在表中的value是否为0,若不为0说明已经判断过了,跳过即可. #include <bits/stdc++.h> using…
排序,输出 #include <bits/stdc++.h> using namespace std; int main() { string input; while (cin >> input) { istringstream iss(input); string temp; vector<int> vec; while (getline(iss, temp, ',')) { vec.push_back(atoi(temp.c_str())); } sort(vec…
题目链接 思路: 利用两个string保存相减的数,其他模拟即可. 参考了别人的一个处理减的步骤,很简洁好看. string substract(string str1, string str2) { string str = ""; int len = str1.length(); , b = , c = ; ; i >= ; i--) { a = str1[i] - '; b = str2[i] - '; str += ((a - b - c + ) % ) + '; ) c…
解法一: map 1.45 ms #include <algorithm> #include <bitset> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <list> #include <map> #include <queue>…
link:https://code.mi.com/problem/list/view?id=139 题意: 有一个1e6 * 1e6 大的格子,现在有两种操作:1,给一个子矩阵中的每个格子加上k.2,计算一个子矩阵中格子数字的和,在mod意义下除以子矩阵的大小. 思路: 首先要学一下( http://www.cnblogs.com/RabbitHu/p/BIT.html)中关于二位矩阵区间修改,求区间和的知识,然后由于这个格子太大,我们就要用cdq分治降维. #include <algorith…
 纯位数 序号:#101难度:非常难时间限制:2000ms内存限制:20M 描述 在数学中,所谓"纯位数"是指由相同位元重复而组成的自然数.比如在十进制中,1,22,333,555 都是纯位数. 很显然,15 在十进制中不是一个纯位数,但是在二进制 15(10) = 1111(2) 却是一个纯位数. 一个显然的事实是,对于正整数 N,其在 N+1 进制中必然是一个一位数,也就必然是个纯位数. 对于一个正整数 N,试找出使其成为纯位数的最小进制 K. 输入 一个正整数 N (0 <…
 发奖励 序号:#75难度:有挑战时间限制:1000ms内存限制:10M 描述 小明老师准备给一些得到小红花的小朋友发糖果做为奖励. 假设有n个小朋友,每个小朋友拥有的小红花为m(n)个,他让这n个小朋友站成一排.要求: 1.每个小朋友至少发一个糖果 2.如果一个小朋友比相邻的小朋友小红花多,则发他的糖果也必须比相邻的多 问小明最少要发多少个糖果? 输入 每位小朋友的小红花数量,使用逗号(,)分隔 输出 最少需要发出的糖果 输入样例 96 19,9,35,74,22 输出样例 1 9 #incl…
 硬币比赛 序号:#47难度:困难时间限制:1000ms内存限制:10M 描述 有 n 个不同价值的硬币排成一条线.有 A 与 B 两个玩家,指定由 A 开始轮流(A 先手,然后 B,然后再 A..)从左边依次拿走 1 或 2 个硬币(不能不拿,也不能拿其他个数),直到没有硬币为止.最后计算 A 与 B 分别拿到的硬币总价值,价值高的人获胜. 请依据硬币的排列情况来判定,先手的玩家 A 能否找到必胜策略? 输入 使用逗号(,)分隔的一个正整数数组,表示这排硬币的排列情况与对应价值 输出 true…
 数组差 序号:#46难度:困难时间限制:1000ms内存限制:10M 描述 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组元素和的差的绝对值 |SUM(A) - SUM(B)| 最大. 返回这个最大的差值. 例如: 有一个数组{1, 2, -3, 1},可以从中找出两个子数组A = {1, 2}与B = {-3},这两个子数组的元素和分别为 SUM(A) = 3,SUM(B) = -3,因此可以求得差的最大值 |SUM(A) - SUM(B)| = 6. 输入 使用逗号(,)分隔…
 马走日 序号:#56难度:困难时间限制:1500ms内存限制:10M 描述 在中国象棋中,马只能走日字型.现在给出一个由 N*M 个格子组成的中国象棋棋盘( 有(N+1)*(M+1)个交叉点可以落子 ),以及棋盘上的两个坐标点 S,T.请计算出从 S 到 T 使用日字型走法所需的最少步数,如果不能到达,则输出-1. 下图为一个 1x2 的棋盘,起始落子点(蓝色)为 (0, 0),目标落子点(绿色)为 (1,2) 的示意,此时需要的步数为 1: 输入 每行输入6个数,由;分隔,第一个数N,第二个…
Mycode: #include<iostream> #include<stdio.h> #include<string.h> using namespace std; typedef long long ll; string now; ll n; int len(ll m) { if(m<=9)return 1; else if(m<=99)return 2; else if(m<=999)return 3; else if(m<=9999)r…
 判断是否为连乘数字串 序号:#32难度:非常难时间限制:1000ms内存限制:10M 描述 给出一个字符串S,判断S是否为连乘字符串. 连乘字符串定义为: 字符串拆分成若干数字,后面的数字(从第三个数字开始)为前面2个数字的乘积. 例如: 122,可以拆成{1|2|2},有12=2 1122242,可以拆成{11|22|242},有1122=242 1224832256,可以拆成{1|2|2|4|8|32|256},有12=2,22=4,24=8,48=32,8*32=256. 若是连乘字符串…
 找小"3" 序号:#40难度:困难时间限制:1000ms内存限制:10M 描述 给定一个奇数n,可得到一个由从1到n的所有奇数所组成的数列,求这一数列中数字3所出现的总次数.例如当n=3时,可得到奇数列:1,3,其中有一个数字3,故可得1 输入 一个奇数.表示n,0<n<9999999999. 输出 一个整数,表示从 1 到 n 的奇数列中,数字 3 出现的次数. 输入样例 1 3 35 复制样例 输出样例 0 1 7 #include<iostream> #…