num

RandomPool等概率随机快速获取key

爱⌒轻易说出口 提交于 2020-02-09 03:28:05
文章目录 等概率随机快速获取key的结构 RandomPool结构 算法思路 相应代码 等概率随机快速获取key的结构 RandomPool结构 完成以下三个功能: insert(key):将某个key加入到该结构,做到不重复加入; delete(key):将原本在结构中的某个key移除; getRandom(): 等概率随机返回结构中的任何一个key。 【要求】 insert 、 delete 和 getRandom 方法的时间复杂度都是 O ( 1 ) O(1) O ( 1 ) 。 算法思路 HashSet 结构 insert 、 delete 操作时间复杂度为 O ( 1 ) O(1) O ( 1 ) ,而现需要等概率随机返回key; random 等概率生成数值,而 HashSet 按 key 索引而不是数值索引,因此想到使用 HashMap 引入数值; 所以用两个 HashMap : key_num_map 和 num_key_map key_num_map 维护 key 值 num_key_map 通过随机生成的数值获取 key 要点 : count 保存 key数量 对应的 num 值随着 count 增加(唯一); key_num_map 和 num_key_map 在移除 给定的key 时需要 调整对应的num和count ; num为给定key对应的值

4 【程序4 分解质因数】

别说谁变了你拦得住时间么 提交于 2020-02-09 00:48:19
题目:将一个大于 2 正整数分解质因数。例如:输入 3, 3=3, 输入 6, 6=2*3,输入 90, 90=2*3*3*5。 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果 n<>k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数 n,重复执行第 一步。 (3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。 package 王道作业; import java.util.Scanner; public class 程序4分解质因数 { public static void main(String[] args) { // TODO Auto-generated method stub int num; int flag=0; Scanner in=new Scanner(System.in); num=in.nextInt();//输入一个数 for(int i=2;i<num;i++) { flag=1;//假设全是素数 if(num%i==0) { flag=0;//不是素数 num=num/i; System.out.print(i+" "); i=1; } } if(flag==1)

SDOI2015 约数个数和

元气小坏坏 提交于 2020-02-09 00:12:05
Description Input 输入文件包含多组测试数据。 第一行,一个整数T,表示测试数据的组数。 接下来的T行,每行两个整数N、M。 Output T行,每行一个整数,表示你所求的答案。 Sample Input 27 45 6 Sample Output 110121 Data Constraint 解法:莫比乌斯反演,话说SD去年好像也出了题反演题 贴大神的blog题解 http://blog.codebursts.com/bzoj3994/ #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> using namespace std; typedef long long ll; ll num[50011],mu[50011],ans; int pri[50011],np[50011]; bool p[50011]; int dt,tj,i,j,n,m; void prepare() { ll tz; int i,j,lim,tot; lim=50000; tot=0; memset(p,true,sizeof(p)); num[1]=1; mu[1]=1; for(i=2;i<=lim;i++){ if(p[i]){ pri[++tot]=i;

2020牛客寒假算法基础集训营3 H 牛牛的k合因子数

﹥>﹥吖頭↗ 提交于 2020-02-09 00:03:59
刚开始把题意理解错了 先埃筛筛出合数,再算出1~n的合因子数 其实直接开个数组记录相同合因子数的个数就行了(ans[num[i]]++) 也就是桶排序 没必要先sort排序,再统计各合因子数的个数 而当时为了O(n)统计 不得不按合因子个数从小到大依次计算 也就是先找到该合因子个数的起点 再找到终点 其实也可以两次二分找该合因子个数的起点和终点 找起点时判定条件为mid<k 此时l为起点 找终点时判定条件为mid≤k 此时r为终点 两次二分结束l=r+1 注意:埃筛复杂度nlog(log n) #include<bits/stdc++.h>//两次二分找 #define ll long long using namespace std; const int N=1e5+5; int vis[N],num[N],ans[N]; int main(){ int n,m; cin>>n>>m; for(int i=2;i<=n;i++){ if(vis[i])continue; for(int j=i;j<=n/i;j++)vis[i*j]=1; } for(int i=2;i<=n;i++) for(int j=1;j<=sqrt(i);j++){ if(vis[j]&&i%j==0)num[i]++; int x=i/j; if(x*j==i&&vis[x]&&i%x==0&&j!

PTA|《C语言程序设计(第3版)》习题7-2 求一批整数中出现最多的个位数字 (20分)

两盒软妹~` 提交于 2020-02-08 23:34:34
题目 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。 输入样例: 3 1234 2345 3456 输出样例: 3 : 3 4 参考解答 # include <stdio.h> int main ( ) { int n , i , j , num , max , numsum [ 10 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; scanf ( "%d" , & n ) ; for ( i = 0 ; i < n ; i ++ ) { scanf ( "%d" , & num ) ; if ( num < 0 ) num = - num ; while ( num != 0 ) { numsum [ num % 10 ] ++ ; num = num / 10 ; } } max = numsum [ 0 ] ; for ( i

最小生成树

假如想象 提交于 2020-02-08 23:10:35
prim算法 有两个集合,第一个集合,存放最小生成树,第二个集合,用来存放还没有进入最小生成树的结点。但这两个集合实际上是用同一个数组表示的。 我们用closedge[100]来表示这个数组,每个单元由“string Data;”和“int lowcost;”两部分组成。其中closedge[1]表示图中的第一个结点v1,closedge【1】.Data表示v1到最小生成树最短路径的结点(假设为v2),closedge【1】.lowcost就是v1到v2的距离。如果closedge【1】.lowcoat为0,就说明它已经在最小生成树中了。 prim算法的核心思想,就是以最小生成树为研究对象,每次在还没有进入最小生成树的结点中,找到路径最小的那个。假设目前的最小生成树为v2,v1是所有结点中,到它最短的一个,那么我们就把v1加入到最小生成树中,过程为:closedge【1】.lowcoat赋为0;把closedge【1】.Data赋为v1;在剩下的结点中,寻找是否有结点到v1的距离,小于此几点到v2的距离,如果有,那么此时此节点到最小生成树的距离,就是到v1的距离。总共n个结点,就重复此步骤n-1次。 # include <iostream> # include <string.h> using namespace std ; typedef struct Graph {

Python 条件分支(if语言,for语句,while语句)

南笙酒味 提交于 2020-02-08 22:48:05
if语句 if condition:   代码块 condition必须是一个bool类型,这个地方有一个隐式转换bool(condition) if 1<2:   print('1 less than 2') 代码块也就是类似于if语句的冒号后面的就是一个语句块,在if,for,def,Class等的后面。 多条件分支: if……elif……else语句。 a = 5 if a<0: print('negative') elif a==0: print('zero') else: print('positive') 结果为: positive score = 80 if score<0: print('wrong') else: if score==0: print('egg') elif score <= 100: print('right') else: print('too big')结果为:right val = input('>>>') val = int(val) if val >= 1000: #fold if val>=10000: print(5) else: print(4) else: if val>=100: print(3) elif val >= 10: print(2) else: print(1) while 循环 while condition:

JavaScript随机生成六位数

守給你的承諾、 提交于 2020-02-08 22:46:14
1 var code = ""; 2 for(var i = 1;i <= 6;i++){ 3 const num = Math.floor(Math.random()*10); 4 code += num; 5 } console.log(code) 作拼串处理拼成六位随机数 Math.random() 生成一个0-1之间的数,乘10大于一, Math.floor() 向下取整,每循环一次做拼串处理 来源: https://www.cnblogs.com/zhaohui-116/p/12285420.html

Python字符串内建函数_下

偶尔善良 提交于 2020-02-08 22:20:30
Python字符串内建函数: 1.join(str) : 使用调用的字符串对 str 进行分割,返回值为字符串类型 # join(str) : # 使用调用的字符串对 str 进行分割。 strs = "Hello" strs_two = ' '.join(strs) print(strs_two) # H e l l o print(','.join(strs)) # H,e,l,l,o 2.len(string): 返回字符串的长度 # len(string): # 返回字符串的长度 strs = 'happy' print(len(strs)) # 5 3.ljust(width[,fillchar]): 之前的是 center 函数,也可以进行填充。 字符串左对齐,使用 fillchar 填充 width 的剩余部分。 # ljust(width[,fillchar]): # 字符串左对齐,使用 fillchar 填充 width 的剩余部分。 strs = 'Hello' print(strs.ljust(20,'-')) # Hello--------------- # fillchar 默认为空 print(strs.ljust(20)) # Hello 4.lower( ):注:使用了 lower 函数后,原来的字符串不变。

个人编程作业(一)

瘦欲@ 提交于 2020-02-08 20:32:21
                                     这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283 这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE 这个作业的目标 发布一篇随笔,使用markdown语法进行编辑。在随笔前附上github仓库地址。 作业正文 .... 其他参考文献 ... GitHub链接: https://github.com/Huiliyi05/biangcheng 记录 代码行数:155 分析时间:30min 编码时间:4h+ 曾遇到的问题 1.++全角引号与半角引号问题++ 2.判断变量名是否正确 else if(!entV.at(xx + 1).compare("无"))//跳过,不做操作 3.没考虑负数情况 需求的思路:见代码注释 不会的知识的学习过程以及修改优化的过程:不会的地方太多了,请教了一个学长,其他的就各种百度...代码修修改改好多次,优化过程不提也罢! 完整代码 #include<iostream> #include<string> #include <vector>