全部评论
第三题我是用回溯,但只能过10% 不知道是超时还是解法错了 可能是超时,遇到重复的可以剪枝? 但超时的暴力算法也不应该只过10%吧 有大佬能说一下吗 public static int count(int n){ String code = "~Y"; ans = 0; for(int i=1;i<n;i++){ code += "O"; } dfs(2,n,code.toCharArray()); return ans; } public static void dfs(int i,int n,char[] code){ if(i == n+1) { ans += 1; test.add(String.valueOf(code)); return; } if(code[i] != 'O&(952)#39;){ dfs(i+1,n,code); return; } code[i] = 'Y&(419)#39;; dfs(i+1,n,code); code[i] = 'N&(6157)#39;; int a=i*2; while(a<=n){ code[a] = 'N&(6157)#39;; a+=i; } dfs(i+1,n,code); a=i*2; while(a<=n){ code[a] = 'O&(952)#39;; a +=i; } code[i] = 'O'; }
【思路】(结果不一定对,忘记测试用例的结果了...) 1)解法:二叉树回溯+剪枝判断。 2)回溯: 2.1)对于参数L,遍历所有编码情况,共有2^L种。由于i=1对应的码字必须是Y(任何数字均是1的倍数),实际情况可缩减为2^L-1种; 2.2)回溯对象--树,为一颗二叉树,左节点为Y,右节点为N。 3)判断:(即判断当前编码是否合理) 3.1)编码具有依赖性,假设i<j,若1~i 的编码不合理,则1~j 的编码必定不合理(剪枝的基础); 3.2)对于某个合理的编码CodeExample,将其1~L字符分成两个集合,A集合存储Y对应的位置,B集合存储N对应的位置。若CodeExmaple可对应数字x的编码,则有: 3.2.1)x是A集合里的任意元素的倍数,设A集合元素的最小公倍数是a,则x可以是a的最小公倍数; 3.2.2)x不可被B集合里的任意元素整除,设B集合元素的最小公倍数是b,则x与b的最大公约数是1,即x与b互质. 4)利用3.2.1与3.2.2这两条性质,对中间路径对应的编码进行判断: 4.1)gcd(~)函数求最大公约数,gcm(~)函数求最大公倍数; 4.2)对于位置i,preYGcm表示集合A(位置范围为1~i-1)中的a,preNGcm表示集合B的b,若a与b互质,则当前1~i-1的编码是合理的。
菜鸡表示 第二题 2/7 0. 285714285714 复制时多个空格 坑
请问大佬第二题怎么写啊
比如0.543(33) 提取 非循环节小数点后长度 s 循环节字符串 x=33 循环部分分数 = Integer.valueOf(x)/10^(x.length()-1)*10^(s);加上截取的非循环部分543/1000?
最后计算 33/99*1000 + 543/1000 然后约成最简 反正我这样就过了40%
主要用到 100x - x = 33 可得循环部分 x=0.333333....
第三题怎么解 大佬说一下😥
第三题怎么做啊 等一个回复
大佬,问一下,虾皮的笔试是ACM模式还是核心代码模式
相关推荐
2024-12-06 13:12
桂林电子科技大学 Java 牛客120493863号:你姐东南大学硕士在读,那就找导师或者师兄师姐打听下同门同方向前辈就业最好的是去向哪几家公司了呗(如果不想走考公选调的话),这个是最有参考性的。
点赞 评论 收藏
分享