ACM-ICPC(10 / 10)——(完美世界2017秋招真题)
今天学了莫比乌斯反演,竟然破天荒的自己推出来了一个题目!有关莫比乌斯反演的题解,和上次的01分数规划的题解明天再写吧~~~
学长们都在刷面试题,我也去试了试,120分钟,写出6题要有一点熟练度才行。先填上水题咯~·~~,4题可以进面试了,还是可以去面试的啦,开心~~~
多线程协作打印(完美世界2017秋招真题)
建立m个线程,每个线程只能打印一种字符,要求线程同时运行,交替打印n次字符。
比如: n=3 m=2打印字符为A和B。要求线程1打印3次A,线程2打印3次B,在屏幕输出ABABAB
注意: 需要检查输入有效性,遇到错误输入时,请打印error并安全退出
输入
打印次数n和字符序列。比如:2 ABC(三个字符需要三个打印线程) |
样例输入
2 ABC |
输出
每个线程打印n次字符,交替打印。在屏幕上输出n次字符序列 |
样例输出
ABCABC |
时间限制
C/C++语言:1000MS 其他语言:3000MS |
内存限制
C/C++语言:65536KB 其他语言:589824KB |
#include <bits/stdc++.h> using namespace std; int main()
{
int n;
char str[];
scanf("%d%s",&n,str);
if(n<) {
puts("error");
return ;
} for(int i = ; i < n; i++) {
printf("%s",str);
}
puts(""); return ;
}
2.编程题
按序找到数组中最小的k个数(完美世界2017秋招真题)
对于一个无序数组,数组中元素为互不相同的整数,请返回其中最小的k个数,顺序与原数组中元素顺序一致。
输入
第一行为数组的长度n,需要返回的数目k,n >= k 接下来n行为数组的n个元素,每行为一个整数 |
样例输入
4 2 1 2 3 4 |
输出
输出为k行,每行为一个整数 |
样例输出
1 2 |
时间限制
C/C++语言:100MS 其他语言:2100MS |
内存限制
C/C++语言:10KB 其他语言:524298KB |
排序两次即可!
最短最优升级路径(完美世界2017秋招真题)
游戏网站提供若干升级补丁,每个补丁大小不一,玩家要升级到最新版,如何选择下载哪些补丁下载量最小。
输入
第一行输入 第一个数为用户版本 第二个数为最新版本,空格分开 接着输入N行补丁数据 第一个数补丁开始版本 第二个数为补丁结束版本 第三个数为补丁大小,空格分开 |
样例输入
1000 1050 1000 1020 50 1000 1030 70 1020 1030 15 1020 1040 30 1030 1050 40 1040 1050 20 |
输出
对于每个测试实例,输出一个升级路径以及最后实际升级的大小 |
样例输出
1000->1020->1040->1050(100) |
时间限制
C/C++语言:1000MS 其他语言:3000MS |
内存限制
C/C++语言:65536KB 其他语言:589824KB |
最短路记录路径即可!
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int maxn = ;
const ll inf = 9876543212345678LL; struct Edge {
int from,to;
ll dist;
}; struct HeapNode {
ll d;
int u;
bool operator < (const HeapNode& rhs) const {
return d > rhs.d;
}
}; bool broken[][]; struct Dij {
int n,m;
vector<Edge> edges;
vector<int> G[maxn];
bool done[maxn];
ll d[maxn];
int p[maxn]; void AddEdge(int from,int to,ll dist) {
edges.push_back((Edge){from,to,dist});
m = edges.size();
G[from].push_back(m-);
} long long dij(int s,int t) {
priority_queue<HeapNode> Q;
for(int i = ; i < n; i++)
d[i] = inf;
d[s] = ;
memset(done,,sizeof(done));
Q.push((HeapNode){,s});
while(!Q.empty()) {
HeapNode x = Q.top(); Q.pop();
int u = x.u;
if(done[u]) continue;
done[u] = true;
for(int i = ; i <(int)G[u].size(); i++) {
Edge& e = edges[G[u][i]];
if(d[e.to]>d[u]+e.dist) {
d[e.to] = d[u] + e.dist;
p[e.to] = G[u][i];
Q.push((HeapNode){d[e.to],e.to});
}
}
} return d[t];
} }sol; map<int,int> mp; int main()
{
freopen("in.txt","r",stdin);
int s,t;
scanf("%d%d",&s,&t); int cnt = ;
mp[s] = ;
mp[t] = ; int u,v,c;
while(scanf("%d%d%d",&u,&v,&c)!=EOF) {
if(mp.count(u)==)
mp[u] = cnt++;
if(mp.count(v)==)
mp[v] = cnt++; u = mp[u];
v = mp[v];
sol.AddEdge(u,v,c);
} printf("%I64d\n",sol.dij(,)); return ;
}
孪生质数(完美世界2017秋招真题)
数学中有很多奇特的现象,孪生质数就是一种(孪生素数就是指相差2的质数对,例如3和5,5和7,11和13…),现在要求输出所有在m和n范围内的孪生质数。
输入
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999) |
样例输入
100 150 |
输出
对于每个测试实例,要求输出所有在给定范围内孪生质数,就是说,输出的孪生质数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开 ; 如果给定的范围内不存在孪生指数,则输出 “no” ; 每个测试实例的输出占一行。 |
样例输出
101 103 107 109 137 139 |
时间限制
C/C++语言:1000MS 其他语言:3000MS |
内存限制
C/C++语言:65536KB 其他语言:589824KB |
即时战略游戏编队(完美世界2017秋招真题)
题目描述
你正在玩一个RST(即时战略)游戏。此时你已经有很多队士兵,每一队里的士兵战队力相同。该游戏士兵种类以战斗力区分,既战斗力一样的士兵算作一种。你想重新调整编队,将现有的队列合并成战斗力相同的两队,请想出有多少种编队方法吧。
比如:你现在有两队士兵,第一队有4个士兵,每个士兵战斗力都是1,第二队有2个士兵,每个士兵战斗力都是2. 这时你有三种编队方法,可以将这些士兵合并成战斗力相同的两个队伍:
方法一:队伍1有4个战斗力为1的士兵,队伍2有2个战斗力为2的士兵,两队的战斗力都是4
方法二:队伍1有2个战斗力为2的士兵,队伍2有4个战斗力为1的士兵,两队的战斗力都是4
方法三:队伍1有2个战斗力为1的士兵和1个战斗力为2的士兵,队伍2有2个战斗力为1的士兵和1个战斗力为2的士兵,两队的战斗力都是4
输入
两个int型数组,长度均为n(0 int[] count:里面的元素代表每一队士兵的士兵数量,大于0小于1000 int[] value:里面的元素代表每一队士兵的士兵战斗力,大于0小于1000 注意:count和value数组的队伍是一一对应的 例如,上面题目描述中的例子里: int[] count = {4, 2} //表示你一共有两队士兵,这两队士兵的士兵数量分别为4和2 int[] value = {1, 2} //表示你这两队士兵的战斗力分别为1和2(并且是跟count数组一一对应的。也就是说,士兵数量为4的队伍每个士兵的战斗力为1,士兵数量为2的队伍每个士兵的战斗力为2) |
样例输入
对于每个测试实例,要求输出一个long值,表示有多少种均分法(有多少种方法可以将你的所有队伍合并成战斗力相同的两队)。 |
输出
两个int型数组,长度均为n(0 int[] count:里面的元素代表每一队士兵的士兵数量,大于0小于1000 int[] value:里面的元素代表每一队士兵的士兵战斗力,大于0小于1000 注意:count和value数组的队伍是一一对应的 例如,上面题目描述中的例子里: int[] count = {4, 2} //表示你一共有两队士兵,这两队士兵的士兵数量分别为4和2 int[] value = {1, 2} //表示你这两队士兵的战斗力分别为1和2(并且是跟count数组一一对应的。也就是说,士兵数量为4的队伍每个士兵的战斗力为1,士兵数量为2的队伍每个士兵的战斗力为2) |
样例输出
{4, 2} {1, 2} |
时间限制 C/C++语言:2000MS 其它语言:4000MS
|
内存限制 C/C++语言:65536KB 其它语言:589824KB
|
#include <bits/stdc++.h> using namespace std; vector<int> str2int(string str) {
vector<int> res;
int num = ;
for(int i = ; i < (int)str.length(); i++) {
if(str[i] == ' ') continue;
if(isdigit(str[i])) {
num *= ;
num += str[i] - '';
}
if(str[i] == ',' || i == (int)str.length() - ) {
res.push_back(num);
num = ;
}
}
return res;
} int main()
{
// freopen("in.txt","r",stdin);
string str;
map<int,int> mp; getline(cin,str);
str = str.substr(,str.length()-);
//cout <<str; vector<int> cnt = str2int(str); getline(cin,str);
str = str.substr(,str.length()-); vector<int> val = str2int(str); int sum = ; for(int i = ; i < (int)cnt.size(); i++) {
sum+=val[i]*cnt[i];
if(mp.count(val[i])) {
mp[val[i]] +=cnt[i];
}
else mp[val[i]] = cnt[i];
} if(sum%) {
puts("");
return ;
} cnt.clear();
val.clear(); cnt.push_back();
val.push_back(); for(auto it = mp.begin(); it!=mp.end(); it++) {
val.push_back(it->first);
cnt.push_back(it->second);
} int n = mp.size();
int m = sum/; int dp[n+][m+]; memset(dp,,sizeof(dp));
dp[][] = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <=cnt[i]; j++) {
for(int k = ; k <= m; k++) {
if(k>=j*val[i])
dp[i][k] +=dp[i-][k-j*val[i]];
}
}
} cout<<dp[n][m]<<endl; return ;
}
ACM-ICPC(10 / 10)——(完美世界2017秋招真题)的更多相关文章
- 小米2017秋招真题——电话号码分身问题(Java版)
原题描述如下: 通过对各个数字对应的英文单词的分析,可以发现一些规律: 字母Z为0独占,字母W为2独占,字母U为4独占,字母X为6独占,字母G为8独占: 在过滤一遍0.2.4.6.8后,字母O为1独占 ...
- 第K个幸运数(京东2017秋招真题)
题目 4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字.前几个幸运数字为:4,7,44,47,74,77,444,447... 现在输入一个数字K,输出第K个幸 ...
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 美团点评2017校招笔试真题-算法工程师A
美团点评2017校招笔试真题-算法工程师A 1.下面哪种STL容器的实现和其它三个不一样 A. set B. deque C. multimap D. map 正确答案: B STL的容器可以分为以下 ...
- 美团点评2017校招笔试真题-算法工程师B
美团点评2017校招笔试真题-算法工程师B 1.以下关于经典的k-means聚类的说法哪个是错误的? A:k-means聚类算法是全局收敛的 B:k-means的聚类结果和初始聚类中心点的选取有关 C ...
- 爱奇艺2017秋招笔试(C++智能设备方向)
虽然有方向,但是好像题目都是随机题库抽取. 选择题都很基础...挖坑,待更新 编程: 一. 奇异数: 如果一个数字满足以下条件,我们就称它为奇异数: 1. 这个数字至少有两位 2. 这个数的最低两 ...
- 2017微软秋招A题
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is an integer array A1, A2 ...AN. Each round you may ch ...
- [刷题]ACM/ICPC 2016北京赛站网络赛 第1题 第3题
第一次玩ACM...有点小紧张小兴奋.这题目好难啊,只是网赛就这么难...只把最简单的两题做出来了. 题目1: 代码: //#define _ACM_ #include<iostream> ...
随机推荐
- VUE--mixins的一些理解。
概念:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 用法: 1.创建混 ...
- 关于箭头函数的this指向问题
document.onclick = function(){ // 普通函数的this是在运行的时候才临时绑定的,也就是说,函数不运行,你绝对不可能知道this是谁 // 下面这个函数如果是自调用,t ...
- C#知识点提要
本篇博文主要对asp.net mvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C# 3.0才有的一些C#语言特性.对于正在学asp.net mvc的童鞋,不防花个几分钟浏览一下.本文要回顾的C# ...
- VMware虚拟网卡设置问题
具体操作过程如下: (1)为虚拟机添加虚拟网卡 (2)添加后会自动分配子网ip,不用修改.点击应用,确定. (3)添加完成后本机的网络上会多出一个网络适配器,根据虚拟机器中的ip设置此ip地址, 这里 ...
- 1.2 js基础
1.onchange 99%用到select上边. 2.js是干什么的,修改css样式和属性 3.选项卡步骤 1.获取元素 2.循环给按钮加自定义属性 3.循环给按钮加事件 4.封装 ...
- 深入redis内部之redis启动过程之一
redis作为一个服务器,它的启动是从main函数开始的.redis.c 1. 进程重命名 #ifdef INIT_SETPROCTITLE_REPLACEMENT spt_init(argc, ar ...
- Python编码规范杂记(很乱:))
Python编码规范 导入模块 每一个(第三方)模块的导入都需要两个import语句, 如下 使用import some的方式导入模块, 如果有还有子模块的话, 则from father.son im ...
- react native 完美解决启动白屏
先讲下我的RN版本0.58.5 首先安装react-native-splash-screen(目前使用的版本是3.2.0) 项目地址https://github.com/crazycodeboy/re ...
- Linux systemd资源控制初探
Linux systemd资源控制初探 本文记录一次cgroup子目录丢失问题,并简单探索了Linux systemd的资源控制机制. 问题现象 我们希望通过systemd拉起服务并通过cgroup限 ...
- springboot整合activeMq 跳坑
安装 activeMq 安装请看我的另一篇https://www.cnblogs.com/milicool/p/8420926.html 版本 springboot 2.0.5.RELEASE 项目结 ...