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> ...
随机推荐
- innoback 参数及使用说明
--defaults-file 同xtrabackup的--defaults-file参数,指定mysql配置文件; --apply-log 对xtrabackup的--prepare参数的封装; - ...
- ansible 入门学习(一)
一,ansible 目录结构 (来自于ansible权威指南) 二,ansible.cfg 配置项说明 /etc/ansible/ansible.cfg --> ———————————————— ...
- 利用paramiko的demo_simple.py进行日志记录时遇到的特殊字符
特殊字符列表: 回车 "\r" "\x13" 响铃 "\x07" 换行 "\n" "\x10" &q ...
- css使用text-align: justify不能实现两段对其的问题解决方式
一行文本不进行处理.还有就是强制换行的也不处理.所以你强制占满(在后面加个span)了一行他才处理 <p class="home">test test test < ...
- Android中dip, dp, px,pt, sp之间的区别:
Android中dip.dp.sp.pt和px的区别 1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...
- [Matlab] awgn
Y = awgn(X,SNR,SIGPOWER) when SIGPOWER is numeric, it represents the signal power in dBW. When SIGPO ...
- React.js 小书 Lesson12 - state vs props
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson12 转载请注明出处,保留原文链接和作者信息. 我们来一个关于 state 和 props 的 ...
- CSS+DIV进度条
<style type="text/css"> .Bar { position: relative; width: 200px; /* 宽度 */ border: 1p ...
- Java中的锁之乐观锁与悲观锁
1. 分类一:乐观锁与悲观锁 a)悲观锁:认为其他线程会干扰本身线程操作,所以加锁 i.具体表现形式:synchronized关键字和lock实现类 b)乐观锁:认为没有其他线程会影响本身线程操作, ...
- XML入门介绍(什么是XML及XML格式)
什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language). XML 是一种很像HTML的标记语言. XML 的设计宗旨是传输数据,而不是显示数据. XML 标 ...