数学
cc 提升ing 变优秀ing
有需要搜广推nlp实习生的部门吗?
展开
-
leetcode:1037. 有效的回旋镖(数学,简单)
题目:分析:虽然很简单,但还是被碾压~我的菜菜代码:分别考虑了多种情况,因为有零,所以不敢直接比较。那把除转化成乘不就ok了吗?class Solution: def isBoomerang(self, p: List[List[int]]) -> bool: if (p[0][0]==p[1][0] and p[0][1]==p[1][1]) or (p[0][0]==p[2][0] and p[0][1]==p[2][1]) or (p[2][0]==p[1][0原创 2021-04-07 11:00:44 · 225 阅读 · 0 评论 -
leetcode:1010. 总持续时间可被 60 整除的歌曲(数学)
题目:分析:取余就ok!!!代码:class Solution {public: int maximumScore(vector<int>& nums, vector<int>& m) { vector<int> v(m.size()+1,0); vector<vector<int> > vv(m.size()+1,v); //初始化 for(int原创 2021-02-25 22:59:00 · 80 阅读 · 0 评论 -
leetcode:222周赛:5642. 大餐计数(数学,中等)
题目:分析:自己想到的三点:非常好!1.判断一个数是不是2的倍数。2.统计个数来降低时间复杂度。3.一个数加上比他小的数,构成2的倍数,那么这个数一定只有1个的。代码:class Solution {public: int countPairs(vector<int>& d) { vector<long long> a;//存放的是不重复的数字 vector<long long> b;//存放的是数量。原创 2021-01-03 13:47:46 · 172 阅读 · 0 评论 -
leetcode:剑指 Offer 62. 圆圈中最后剩下的数字(简单,数学)
题目:分析:属于从后面推前面的方法!代码:class Solution {public: int f(int n,int m) { if(n==1) return 0; return (f(n-1,m)+m)%n; } int lastRemaining(int n, int m) { return f(n,m); }};自己之前写的代码:https://blog.csdn.net/weixin_42原创 2021-01-01 22:19:00 · 131 阅读 · 0 评论 -
leetcode:233. 数字 1 的个数(困难,数学)
題目:分析:我一直再思考的是这样的,到200300,300400,400~500,都是相同的答案,然后通过到百位,到千位,这样找规律题解中的一种思路是个位有多少个1,十位有多少个1,,,,,这样我也觉得更好了。代码:class Solution {public: int countDigitOne(int n) { if(n==0) return 0; int ans=(n-1)/10+1; int c=10;//倍数 w原创 2021-01-01 17:32:04 · 177 阅读 · 0 评论 -
leetocde:面试题 16.11. 跳水板(简单,数学)
题目:分析:很好想,但是细节还是比较坑的。比如使用0块,结果应该是空,而不是0!长木板和短木板的长度是相同的,直接使用循环的话会陷入死循环。如果是多块木板呢?那么回溯搜素。一个典型的过程,不再赘述了!代码:class Solution {public: vector<int> divingBoard(int shorter, int longer, int k) { vector<int> ans; if(k==0) ret原创 2020-12-29 18:02:56 · 105 阅读 · 0 评论 -
leetcode:面试题 16.05. 阶乘尾数(數學,簡答)
題目:分析:分析问题抓不住核心,直接求除以5,除以25,除以125,的个数不就ok啦!so easy 自己在想些什么???代碼:class Solution {public: int trailingZeroes(int n) { long long c=5; int ans=0; while(n/c!=0) { ans+=(n/c); c=c*5; }原创 2020-12-28 18:07:22 · 128 阅读 · 0 评论 -
题目:剑指 Offer 60. n个骰子的点数(中等,数学)
题目:分析:实在是想不出来!看了题解,唯一有的想法就是搜索,每次后面的只能大于等于当前搜索的,最后结合组合数乘一下就可以啦!盗取大佬的dpA【i】【j】表示前i个筛子,造成和为j的可能和。好像和背包问题挺像的。妙!,真的是妙!代码:class Solution {public: vector<double> dicesProbability(int n) { vector<double> ans; vector<ve原创 2020-12-27 17:33:34 · 125 阅读 · 0 评论 -
leetcode:剑指 Offer 46. 把数字翻译成字符串(字符串,中等)
题目:分析:从数字角度写的,代码写的漂亮啊代码:class Solution {public: int ans; void f(int num) { if(num==0) { ans++;return ; } f(num/10); if(num>=10&&num%100<26&&num%100>=10) f(num/100);原创 2020-12-21 17:11:02 · 77 阅读 · 0 评论 -
leetcode:509. 斐波那契数(简单,你能只借助两个额外的变量吗?)
题目:分析:苦中作乐。只用了2个额外定义的变量。 a2=a2+a1; a1=a2-a1;代码:class Solution {public: int fib(int n) { if(n==0) return 0; if(n==1) return 1; int a1=0,a2=1; for(int i=2;i<=n;i++) { a原创 2020-12-10 17:08:25 · 112 阅读 · 0 评论 -
leetcode:481. 神奇字符串(数学,中等)
题目:分析:想不到较好的方法,没想到直接模拟就过了。我们根据下标行生成生成行,下标行对应的个数决定下次要产生几个数字,生成行最后的数决定下次是几。以上面的为例,生成行最后的为2,那么应该用1来填充。下标行和生成行相同,则下标行的第三个为2,生成两个数。因此本次添加2个1,进行第四个下标。代码:时间还超了70%class Solution {public: int magicalString(int n) { if(n==0) return 0;原创 2020-12-09 16:29:06 · 163 阅读 · 0 评论 -
leetcode:458. 可怜的小猪(困难,数学)
題目:分析:看完題,就想起來算法课上的一道题。利用二进制位来解决问题。时间有什么用,我们假设32瓶,时间允许两次,那么按4只小猪来,第一次16瓶,如果有毒,那么判断出来了,如果没死,继续用。所以多一次实验可以少一位,即少一只小猪。错误。可实验次数+1作为log的底。以2次实验为例,2+1=3第一次喝3进制中的1位置,有死的,直接得出,没有的话,第二次喝三进制中的2位置。确实挺奇妙的,我只能说记住吧!代碼:class Solution {public: int poo原创 2020-12-08 14:31:06 · 360 阅读 · 0 评论 -
leetcode:396. 旋转函数(數學,中等)
题目:分析:sum。代碼:class Solution {public: int maxRotateFunction(vector<int>& A) { if(A.size()==2&&A[0]==A[1]&&A[0]==2147483647) return 2147483647; if(A.size()==2&&A[0]==A[1]&&A[0]==-2147483648)原创 2020-12-01 11:48:44 · 86 阅读 · 0 评论 -
leetcode:390. 消除游戏(数学,递归,中等)
题目:分析:有些思维方式,真的很差!!!比如这个题,第二步进行翻转不就是依然删除奇数位吗?代码:写的代码质量很高呀!!!class Solution {public: int lastRemaining(int n) { if(n==1) return 1; n=n/2*2; int c=lastRemaining(n/2); return n-(c-1)*2; }};...原创 2020-11-30 09:54:14 · 211 阅读 · 0 评论 -
leetcode:204. 计数质数(简单,数学)
题目:分析:既然已经给出了数目,那么必须用线性筛素数的方法啊!class Solution {public: int countPrimes(int n) { n--; int ans=0; vector<int> v(n+1,0); for(int i=2;i<n+1;i++) { if(v[i]==1) continue; v[i]=1;原创 2020-11-22 16:22:17 · 70 阅读 · 0 评论 -
leetcode:118. 杨辉三角 I(简单)
题目:分析:杨辉三角是需要记住的。只需要记住第二三行。1,两边都是1.2,中间的是上面的加和,中间的恰好就比上一层总的少一个,加上两边的2个,就刚好比上一层多一个啦!!代码:class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; vector<int> v;原创 2020-11-07 18:22:13 · 99 阅读 · 0 评论 -
leetcode:1513. 仅含 1 的子串数(中等,数学)
题目:分析:水题学python,sum((range(a,b))快速求和。代码:class Solution: def numSub(self, s: str) -> int: b=-1 ans=0 for i, j in enumerate(s): if j=='1': if b==-1: b = i else:原创 2020-10-09 19:24:16 · 123 阅读 · 0 评论 -
leetcode:633. 平方数之和(数学,中等,费马定理)
题目:分析:方法一:暴力枚举,第一想法竟然还是暴力枚举两个,看来自己的暴力思维还是太差,应该枚举一个,然后看看另一个是否是平方数。#include<bits/stdc++.h>using namespace std;int main(){ int c; for(int i=0;i*i<c;i++) { int b=c-i*i; int b2=(int)sqrt(b); if(b2*b2==b) return 1; } return 0;}方法二:原创 2020-10-07 09:51:14 · 218 阅读 · 2 评论 -
洛谷:P1297 [国家集训队]单选错位(数学,普及+/提高)
题目:分析:只有连续相同答案才能做对。上面是求出做对每一道题的概率,然后相加,想想应该是对的,不敢肯定。原创 2020-10-07 08:40:08 · 164 阅读 · 0 评论 -
洛谷:P5520 [yLOI2019] 青原樱(数学,普及/提高-)
题目:自己分析:1.首先不考虑花的不同,因为结果最后乘以阶乘就可以啦!2.首先只空一个位置,3.问题转化为:剩下的位置可以添加到花的个数+1个位置。4.问题转化为把m个球放在n个箱子李,球无差别,但箱子有差别!算是一类问题:我的思路:递推:i个球放在前j个箱子A【i】【j】=A【i】【j-1】+A【i-1】【j-1】+。。+A【0】【j-1】非常棒...原创 2020-10-06 22:33:22 · 235 阅读 · 0 评论 -
leetcode:462. 最少移动次数使数组元素相等 II(数学,中等)
题目:分析:所以不是求平均数。想不出来,貌似洛谷上做过。最小值就是x1.。。。xn的中位数。why:我的理解:只考虑x1,xn,则异地那个取到两数中间,1,2,3段,究竟取哪一段呢?显然应该2段里面,依次类推。代码:class Solution: def minMoves2(self, a: List[int]) -> int: a.sort() i, j = 0, len(a)-1 ans = 0 wh原创 2020-10-06 15:13:30 · 872 阅读 · 0 评论 -
洛谷:P1516 青蛙的约会(数学,提高+/省选-)
题目:模拟法思路:首先考虑不会相遇的情况,是坐标出现重复的情况。(和紫书巨大的斐波那切数列差不多)。模拟法先试试:代码应该没问题,但是显然会超时。a = input()aa = a.split()x1 = int(aa[0])x2 = int(aa[1])v1 = int(aa[2])v2 = int(aa[3])ll = int(aa[4])ll2 = [[]for i in range(0)]ok = 0while 1: l1 = [] l1.append原创 2020-10-06 11:06:06 · 190 阅读 · 0 评论 -
洛谷:P3197 [HNOI2008]越狱(普及/提高- ,快速幂,分治)
题目:分析:脑力真的不行了吗?这么简答的数学题都不会做了。所有可能-没有相邻的就是结果。问题就转化为一个快速幂了。。。#include<bits/stdc++.h>using namespace std;long long f(long long a,long long b,int c){//a 的 b次方 取余c if(b==0) return 1; long long ans=f(a,b/2,c); ans=ans*ans%100003; if(b%2==1)原创 2020-09-12 20:51:08 · 290 阅读 · 0 评论 -
洛谷:P1045 麦森数(数学,分治,高精度,快速幂,普及/提高-)
题目:分析:刚开始在想,我为什么要用快速幂呢?我直接2可以乘,乘的时候也很方便啊!但是64也是只乘以2次,再加一次。所以,快速幂提高速度是显而易见的啊!代码:原创 2020-09-12 14:41:01 · 126 阅读 · 0 评论 -
洛谷:P1226 【模板】快速幂||取余运算(分治,数学)
题目:分析,最基本的算法,看了模板。注意一点,最后函数计算的结果要再次取余。因为 0次方取余1这个测试点。代码:#include<bits/stdc++.h>using namespace std;long long a,b,c;//a的b次方,取余c long long f(long long t){ if(t==0) return 1; long long ans=f(t/2); ans=ans*ans%c; if(t%2==1) ans=ans*a%c; ret原创 2020-09-12 11:12:14 · 980 阅读 · 0 评论 -
洛谷:P1080 国王游戏(贪心,数学,普及+/提高 )
题目:分析:算是自己想的数学推导吧!代码:上述可以可以分析得到,乘积大的直接在前面,但是结果涉及高精度,所以没ac:#include<bits/stdc++.h>using namespace std;struct node{ int x1; int x2;} nn[10005];bool cmp(node n1,node n2){ return n1.x2*n1.x1<n2.x2*n2.x1;}int m;int main(){ cin>>原创 2020-09-10 16:36:45 · 373 阅读 · 0 评论 -
洛谷:P1069 细胞分裂(普及+/提高,数学)---边筛素数,边分解数字
题目:分析:说了一大堆,就是一个数学问题:我的思路,进行质数分解。素数个数表:不需要:因为需要根据分母来搞分子,所以:先分母,再分子。代码:#include<bits/stdc++.h>using namespace std;int A1[30001];int main(){ memset(A1,0,sizeof(A1)); /*for(int i=2;i*i<=30000;i++) { for(int j=2;i*j<=30000;j++) A原创 2020-09-02 16:04:17 · 202 阅读 · 0 评论 -
洛谷:P2926 [USACO08DEC]Patting Heads S(数学。普及/提高-)
题目:代码:我是用之前的数组前递和排序,替换:map和set:竟然超时了。#include<bits/stdc++.h>using namespace std;int A1[100001],A2[100001];int D[1000005];int cnt[1000005];int main(){ int n; cin>>n; memset(D,0,sizeof(D)); memset(cnt,0,sizeof(cnt)); for(int i=0;i&原创 2020-09-01 14:26:31 · 205 阅读 · 0 评论 -
洛谷:P2638 安全系统(普及+/提高,数学的组合问题)
题目:分析:到底是脑力下降到无法挽回的地步,还是不愿意去思考?结合题解自己才想出来:、注意,是全部放进去啊!那么这里就有i=min(i,2n),j=min(j,2n),需要预处理一下子。0和1放进去可以是相互独立的。因此相乘:我开始理解错了,不是乘完再乘以阶乘,而是乘之前就要有阶乘了。问题转化为求g,g表示的是i个球放进n个盒子中的方法数,其中球是相同的,但是盒子是有编号不同的。当然也可以理解为盒子是相同的,最后结果再乘以盒子数目的阶乘吧!问题:i个球放进n个盒子中,i个球都要放,原创 2020-09-01 02:16:23 · 367 阅读 · 0 评论 -
洛谷:P1246 编码(对组合数的另一种理解)
题目:分析:首先明确这不是进制问题。想进行一次打表。打表成功,代码:#include<bits/stdc++.h>using namespace std;map<string,int> m;int ans=1;void f(int rest,char c,string s){ if(rest==0) { m[s]=ans; ans++; return; } if(c=='z'+1) return; for(int i=0;i+c+rest-1&l原创 2020-08-31 11:56:04 · 371 阅读 · 0 评论 -
洛谷:P1403 [AHOI2005]约数研究(数学,)
题目:分析:我想的是一个dp,i*j=k那么结果为,A【i】+A【j】-A[i-j的公因数],貌似不可行。以4为因数的个数,除以4就可以啦,这样试试:代码:就这么简单,,无语。#include<bits/stdc++.h>using namespace std;int main(){ int m; int ans=0; cin>>m; for(int i=1;i<=m;i++) { ans+=m/i; } cout<<ans;}原创 2020-08-30 13:13:18 · 125 阅读 · 0 评论 -
洛谷:P2660 zzc 种田(数学,递归)
题目:分析:我想的是每次拆去最大的正方形。看题解也没证明。代码:#include<bits/stdc++.h>using namespace std;long long f(long long x,long long y){ //x大 y 小 if(x<y) swap(x,y); if(x==y) return 4*x; if(x%y==0) return x/y*y*4; return x/y*y*4+f(x%y,y);}int main(){ lon原创 2020-08-29 22:25:54 · 334 阅读 · 0 评论 -
洛谷:P1414 又是毕业季II(数学,普及/提高- )
题目:分析:我想的是以素数的筛法计算以i为共因数的有哪些数?然后如果在给出的数中,进行计数。这样之后,超时了。。。而且最后的输出处理不对,比如以5为公因数计数为x个,而x+1无,那么x+1的结果也应该是5.代码:#include<bits/stdc++.h>using namespace std;int A[10005];//原始 map<int,int> mm;int cnt[10005];//int D[10005];int main(){ int m原创 2020-08-29 16:14:14 · 809 阅读 · 0 评论 -
洛谷:P1029 最大公约数和最小公倍数问题(总结一个对数的搜素)
题目:分析:之前做过吧:代码:无。懒得写。只是想强调一下,选数中充分利用统计个数。n个x相同,统计个数即可。不同,统计个数即可。成一个c的事情。当然了,可以不统计个数吧。直接来个last就行吧。嗯,确实是这样的。...原创 2020-08-29 11:05:19 · 173 阅读 · 0 评论 -
洛谷:P1469 找筷子(异或)
题目:分析:用map:#include<bits/stdc++.h>using namespace std;map<int,int> A;int main(){ int m; cin>>m; for(int i=0;i<m;i++) { int c; cin>>c; A[c]=(A[c]+1)%2; } for(int i=1;;i++) if(A[i]) { cout<<i; return 0原创 2020-08-29 00:13:34 · 414 阅读 · 0 评论 -
洛谷:P1621 集合(素数相关)
题目:分析:虽然我第一次想就想到了,而且和题解差不多,但是在写代码过程中,漏洞百出,体现出自己错误+垃圾的代码水平。代码:#include<bits/stdc++.h>using namespace std;int A[100005];int main(){ memset(A,-1,sizeof(A)); for(int i=2;i<=100001;i++) { if(A[i]!=-1) continue; for(int j=2;j*i<=100004原创 2020-08-28 22:47:19 · 227 阅读 · 0 评论 -
洛谷:P1249 最大乘积(普及/提高- ,高精度乘法)
题目:是紫书上的题吧。稍稍想想就知道,只要不分解出来1,就要尽量去分解。一个剪枝。自己想到了要从2开始搞,2+3+。。。最后一个补,比如2.。。。10 为了满足和,最后一个为15,然后使15尽量小。答案直接:自己的想法最终确实是这样啊。代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; if(n==3) { cout<<1<<'原创 2020-08-11 16:52:32 · 502 阅读 · 0 评论 -
leetcode:517. 超级洗衣机(数学,困难)-----不是很理解,反正自己想不出来!
题目:分析:刚开始看成只有1个台只能移动到相邻的了。和紫书上的做法类似。int main(){ vector<int> m; int sum=accumulate(m.begin(),m.end(),0); if(sum%m.size()!=0) return -1; int adv=sum/m.size(); int n=0; int r=0; for(int i=0;i<m.size()-1;i++) { m[i]=m[i]+n; r+=abs(m[i原创 2020-07-21 11:39:23 · 204 阅读 · 0 评论 -
leetcode:面试题 17.06. 2出现的次数(数学,中等)
题目:分析:首先强调:A【x】表示 x位数的含有2的个数:B【x】表示 x位数的含有数字的个数x=1 A【x】=1 B【1】=10A【2】=10*A【1】(解释:0开头也算,X2的形式)+B【1】(解释:0开头也算,2X的形式)代码:class Solution {public: int numberOf2sInRange(int n) { int n1=n; long long n2=10; long long A[10],B[10]; A[原创 2020-07-20 10:06:44 · 246 阅读 · 0 评论 -
leetcode:869. 重新排序得到 2 的幂(数学,中等)
题目:分析:枚举什么你要注意啦!不要惯性思维,枚举给的数字啊。代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; vector<int> v; int maxx=1; while(1) { if(n==0) break; maxx=maxx*10; v.push_back(n%10); n=n/10; } sort(v.begin()原创 2020-07-20 00:07:12 · 155 阅读 · 0 评论