第一题

解决思路:分类讨论
当k==0的时候,有n*n对答案
当k!=0的时候,设x%y=z,z>=k.分类讨论:当x<y的时候,当x>y的时候

def simple(n, k):cnt = 0for i in range(1, n + 1):for j in range(1, n + 1):if i % j >= k:cnt += 1return cntdef better(n, k):if k == 0:return n * ns = 0for i in range(k, n + 1):s += n - ifor i in range(k + 1, n):group_count = n // is += (group_count - 1) * (i - k)s += max(0, n % i - k + 1)return sdef test():import randomn = random.randint(3, 100)k = random.randint(0, n)return simple(n, k) == better(n, k)for _ in range(1000):ans = test()if not ans:exit(-1)

第二题

解决思路:如果暴力枚举,$2^{30}$显然太大了.如果是$2^15$那该多好哇!那样我就只需要开辟一个大数组,从0,一直循环到$2^{15}-1$就可以了.
此题的正确思路就是:分治,创建两个大数组a[65536],b[65536],分别表示前半部分物品选择情况和后半部分选择情况,a[i]表示决策i(用i的二进制表示是否选择某个物品)的体积总和.接下来,对于每一个a[i],寻找b中小于v-a[i]的决策.此步可以通过排序+二分搜索极好地优化.

于是余有叹焉:

这道题的分治真是令人大开眼界,仔细回忆一下,我们过去学过的一切分治算法,无一不是跟递归紧密联系起来的.似乎解决问题一旦分治就要以递归的方式分治到底.
而实际上,这却是错觉.
程序设计的目的在于在有限的时间和空间内实现某个目的,如果分治一次足以解决任务,那就够了.在这道题中,只能够分治一次,而无法做到多次分治.因为既然分治,必然涉及到合并分治结果.而多次分治就会造成合并困难.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;public class Main {
static long[] build(int[] a, int beg, int end) {int n = end - beg;long ans[] = new long[1 << n];for (int i = 0; i < ans.length; i++) {long s = 0;for (int j = 0; j < n; j++) {if ((i & (1 << j)) != 0) {s += a[beg + j];}}ans[i] = s;}return ans;
}static int ceil(long[] ar, long x) {int l = 0, r = ar.length;while (l + 1 < r) {int m = (l + r) >> 1;if (ar[m] > x) {r = m;} else if (ar[m] < x) {l = m;} else {l = m;}}return r;
}static int merge(long[] first, long[] second, int v) {int s = 0;for (int i = 0; i < first.length; i++) {if (first[i] > v) break;else {s += ceil(second, v - first[i]);}}return s;
}static int solve(int[] a, int v) {Arrays.sort(a);long[] first = build(a, 0, a.length / 2);long[] second = build(a, a.length / 2, a.length);Arrays.sort(first);Arrays.sort(second);return merge(first, second, v);
}public static void main(String[] args) throws FileNotFoundException {
//    Scanner cin = new Scanner(System.in);Scanner cin = new Scanner(new FileInputStream("in.txt"));int n = cin.nextInt();int v = cin.nextInt();int[] a = new int[n];for (int i = 0; i < n; i++) a[i] = cin.nextInt();cin.close();if (n == 1) {System.out.println("1");} else {int ans = solve(a, v);System.out.println(ans);}
}
}

转载于:https://www.cnblogs.com/weiyinfu/p/8660879.html

2018网易在线笔试题相关推荐

  1. 2018网易游戏笔试题

    第一题: #include <iostream> using namespace std; char word[10]; int cti(char a,char b){return (a- ...

  2. 网易游戏2016校园招聘数据挖掘研究员在线笔试题和答案

    刚做完网易在线笔试题,感触最深的地方是,虽然题目形式和ACM题目相似,但是内容更偏向于实际应用.总共有四个题目,第一个题目属于字符串匹配类型,难度较低,第二个题目是模拟SQL语句的输出,第三个题目是K ...

  3. 网易2018实习生招聘笔试题-JAVA开发实习生

    网易2018实习生招聘笔试题-JAVA开发实习生 如何从有数字规律的网址抓取网页并保存在当前目录?假设网址为 http://test/0.xml,其中这个数字可以递增到100. for(int i=0 ...

  4. 数据分析真题日刷 | 网易2018实习生招聘笔试题-数据分析实习生

    上周开始实习,博客更新就缓下来了.这是十天前做的套题了,现在拾起来把它再整理整理. 网易数据分析实习生的笔试题,和校招的题目还是有部分重复的,不过难度也不小. 今日真题 网易2018实习生招聘笔试题- ...

  5. 【牛客】网易2018实习生招聘笔试题——数据分析师实习生解析

    [牛客]网易2018实习生招聘笔试题--数据分析师实习生解析 * 选择题根据牛客网下方讨论整理,三道大题均为自己答案,欢迎大家讨论并给予指正. (https://www.nowcoder.com/te ...

  6. 顺丰科技2018校园招聘在线笔试题

    今天做了顺丰科技的在线笔试题,选择题方面感觉考得很基础,有数据结构.编译原理方面的题目,以及设计模式的题目.编译原理的内容基本忘记了,设计模式也没有进行深入的学习,所以这两块大的并不是太好.再有就是排 ...

  7. 阿里巴巴历年在线笔试题汇总

    阿里巴巴在线笔试题汇总 2013阿里巴巴前端在线笔试题 1.现有代码如下: 2.如果你现在使用的是 Google Chrome 或 Apple Safari,如何让 input 元素在默认情况下显示 ...

  8. 【前端】2015阿里前端实习生在线笔试题

    网上找的题,自己做了做. ... 2015阿里巴巴前端实习生在线笔试题 1. (单项选择)对于下列程序运行结果,符合预期的是 function f1() { console.time('time sp ...

  9. 2015某大型电商集团的前端实习生在线笔试题(无耻的拿来偷看了)

    2015某大型电商集团的前端实习生在线笔试题(嘿嘿猜猜是谁的) 1.(单项选择)对于下列程序运行结果,符合预期的是 function f1() { console.time('time span'); ...

最新文章

  1. java hashmap 缓存
  2. oracle sql developer 查看游标结果集(3.0.04
  3. Java 建模:UML 工作簿,第 1 部分
  4. dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法
  5. Java LinkedList双向链表源码分析
  6. 《动手学深度学习 PyTorch版》学习笔记(一):数据操作
  7. 51单片机IIC总线编程
  8. Python连接Oracle-常见问题
  9. OPENCV数据结构体系和常用函数
  10. css的calc函数
  11. 高效开发神器 | 合宙LuatIDE 1.1.0正式版本免费下载
  12. android 汉字 转 拼音首字母大写,传入汉字字符串, 返回大写拼音首字母
  13. kibana服务器性能要求,kibana 性能监控 apm
  14. su - xxx Could not create session 无法su切换用户
  15. 北交桑基韬:“超”人的机器学习,非语义特征的得与失
  16. 创建vue项目的时候报错:Skipped git commit due to missing username and email in git config.
  17. 浏览器清理缓存快捷键
  18. java实现图表步骤_Java 在PPT中添加混合图表过程详解
  19. 甲骨文发布2018第一季度财报 总收入92亿美元
  20. Appcelerator首席运营官Sandeep Johri:新一代企业移动互联网平台开发技术

热门文章

  1. 文件校验和(checksum或Hash)计算工具
  2. Bootstrap-CL:按钮下拉菜单
  3. openstack镜像制作详解
  4. SpringMVC第六篇【校验、统一处理异常】
  5. cygwin的安装使用
  6. Neutron/ML2学习
  7. 【重识 HTML + CSS】元素类型、display、visibility、overflow
  8. Python 虚拟环境安装 ,避免影响生产环境。
  9. mysql -connector/j驱动下载
  10. java 取文本中间_Java 如何利用正则表达式提取两个指定标记符号之间的字符串内容...