今日头条2017校园招聘 春招4.18笔试
2017-04-18 21:23
651 查看
两数组找相同的元素-array
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
给两个整数(int)数组,输出相同的元素。
输入
给定两个整型数组[a1, a2, ...., am],[b1, b2, ..., bn]
输入格式如下,第一行给定第一个数组的大小m,接下来的m行为其数组元素a1 -- am,每行一个元素;第m+1行为第二个数组的大小n,接下来的n行为其数组元素b1 -- bn,也是每行一个元素。示例如下:
m
a1
a2
…
am
n
b1
b2
…
bn
输出
两个数组中相同的元素,以空格分隔在一行中显示,显示顺序为其在第二个数组中出现的顺序。
样例输入
5
11
15
9
12
3
4
11
3
9
7
样例输出
11 3 9
开始用cin cout然后一直超时 苦思好久= =智障日常
View Code
第四题:任务执行策略
呜呜呜好难啊,干瞪眼一个小时没思路,最后暴力一发还TLE没分= =
官方题解:
动态规划题。首先把三角形翻转一下,从底部来考虑每个元素。dp[i][j][k]表示考虑到第(i,j)个,当前选取了k个元素的最大值。前缀和维护最大值,就可以把转移优化到O(1)。
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
给两个整数(int)数组,输出相同的元素。
输入
给定两个整型数组[a1, a2, ...., am],[b1, b2, ..., bn]
输入格式如下,第一行给定第一个数组的大小m,接下来的m行为其数组元素a1 -- am,每行一个元素;第m+1行为第二个数组的大小n,接下来的n行为其数组元素b1 -- bn,也是每行一个元素。示例如下:
m
a1
a2
…
am
n
b1
b2
…
bn
输出
两个数组中相同的元素,以空格分隔在一行中显示,显示顺序为其在第二个数组中出现的顺序。
样例输入
5
11
15
9
12
3
4
11
3
9
7
样例输出
11 3 9
开始用cin cout然后一直超时 苦思好久= =智障日常
#include<bits/stdc++.h> using namespace std; string digit[10][5]; string opr[6][5]; // + - * / = . void init() { digit[0][0] = "***"; digit[0][1] = "* *"; digit[0][2] = "* *"; digit[0][3] = "* *"; digit[0][4] = "***"; digit[1][0] = "*"; digit[1][1] = "*"; digit[1][2] = "*"; digit[1][3] = "*"; digit[1][4] = "*"; digit[2][0] = "***"; digit[2][1] = " *"; digit[2][2] = "***"; digit[2][3] = "* "; digit[2][4] = "***"; digit[3][0] = "***"; digit[3][1] = " *"; digit[3][2] = "***"; digit[3][3] = " *"; digit[3][4] = "***"; digit[4][0] = "* *"; digit[4][1] = "* *"; digit[4][2] = "***"; digit[4][3] = " *"; digit[4][4] = " *"; digit[5][0] = "***"; digit[5][1] = "* "; digit[5][2] = "***"; digit[5][3] = " *"; digit[5][4] = "***"; digit[6][0] = "***"; digit[6][1] = "* "; digit[6][2] = "***"; digit[6][3] = "* *"; digit[6][4] = "***"; digit[7][0] = "***"; digit[7][1] = " *"; digit[7][2] = " *"; digit[7][3] = " *"; digit[7][4] = " *"; digit[8][0] = "***"; digit[8][1] = "* *"; digit[8][2] = "***"; digit[8][3] = "* *"; digit[8][4] = "***"; digit[9][0] = "***"; digit[9][1] = "* *"; digit[9][2] = "***"; digit[9][3] = " *"; digit[9][4] = "***"; opr[0][0] = " "; opr[0][1] = " * "; opr[0][2] = "***"; opr[0][3] = " * "; opr[0][4] = " "; opr[1][0] = " "; opr[1][1] = " "; opr[1][2] = "***"; opr[1][3] = " "; opr[1][4] = " "; opr[2][0] = " "; opr[2][1] = "* *"; opr[2][2] = " * "; opr[2][3] = "* *"; opr[2][4] = " "; opr[3][0] = " "; opr[3][1] = " *"; opr[3][2] = " * "; opr[3][3] = "* "; opr[3][4] = " "; opr[4][0] = " "; opr[4][1] = "****"; opr[4][2] = " "; opr[4][3] = "****"; opr[4][4] = " "; opr[5][0] = " "; opr[5][1] = " "; opr[5][2] = " "; opr[5][3] = "**"; opr[5][4] = "**"; } // // * * * * **** // *** *** * * // * * * * **** ** // ** // * *** *** * * *** *** *** *** *** *** // * * * * * * * * * * * * * * // * *** *** *** *** *** * *** *** * * // * * * * * * * * * * * * * // * *** *** * *** *** * *** *** *** void print_num(int x, int p) { // 输出数字x的第p行 int dig[10], idx = 0; do { dig[idx++] = x % 10; x /= 10; } while (x); // for (int i = idx-1; i >= 0; --i) { // printf("%d", dig[i]); // if (i) printf(" "); // } // printf("\n"); for (int i = idx-1; i >= 0; --i) { cout << digit[ dig[i] ][p]; if (i) cout << " "; } } void print_double(double x, int p) { // 输出数字x的第p行 int x1 = x; int x2 = ceil((x - x1) * 100); int dig[10], idx = 0; do { dig[idx++] = x1 % 10; x1 /= 10; } while (x1); for (int i = idx-1; i >= 0; --i) { cout << digit[ dig[i] ][p]; cout << " "; } cout << opr[5][p]; cout << " "; cout << digit[ x2 / 10 ][p]; if (x2 % 10 != 0) { cout << " "; cout << digit[ x2 % 10 ][p]; } } int main() { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); int a, b, ans; char op; init(); //print_num(120, 0); scanf("%d%*c%c%*c%d", &a, &op, &b); //printf("%d %c %d\n", a, op, b); if (op == '+') { ans = a + b; for (int i = 0; i < 5; ++i) { print_num(a, i); printf(" "); printf(" "); cout << opr[0][i]; printf(" "); printf(" "); print_num(b, i); printf(" "); printf(" "); cout << opr[4][i]; printf(" "); printf(" "); print_num(ans, i); printf("\n"); } } else if (op == '-') { ans = a - b; bool mi = false; if (ans < 0) mi = true, ans = -ans; for (int i = 0; i < 5; ++i) { print_num(a, i); printf(" "); printf(" "); cout << opr[1][i]; printf(" "); printf(" "); print_num(b, i); printf(" "); printf(" "); cout << opr[4][i]; printf(" "); printf(" "); if (mi) { cout << opr[1][i]; printf(" "); printf(" "); } print_num(ans, i); printf("\n"); } } else if (op == '*') { ans = a * b; for (int i = 0; i < 5; ++i) { print_num(a, i); printf(" "); printf(" "); cout << opr[2][i]; printf(" "); printf(" "); print_num(b, i); printf(" "); printf(" "); cout << opr[4][i]; printf(" "); printf(" "); print_num(ans, i); printf("\n"); } } else { if (a % b == 0) { ans = a / b; for (int i = 0; i < 5; ++i) { print_num(a, i); printf(" "); printf(" "); cout << opr[3][i]; printf(" "); printf(" "); print_num(b, i); printf(" "); printf(" "); cout << opr[4][i]; printf(" "); printf(" "); print_num(ans, i); printf("\n"); } } else { double fans = (double)a / b; //printf("%f", fans); for (int i = 0; i < 5; ++i) { print_num(a, i); printf(" "); printf(" "); cout << opr[3][i]; printf(" "); printf(" "); print_num(b, i); printf(" "); printf(" "); cout << opr[4][i]; printf(" "); printf(" "); print_double(fans, i); printf("\n"); } } } return 0; }
View Code
第四题:任务执行策略
呜呜呜好难啊,干瞪眼一个小时没思路,最后暴力一发还TLE没分= =
官方题解:
动态规划题。首先把三角形翻转一下,从底部来考虑每个元素。dp[i][j][k]表示考虑到第(i,j)个,当前选取了k个元素的最大值。前缀和维护最大值,就可以把转移优化到O(1)。
#include <algorithm> #include <cassert> #include <cstring> #include <cstdio> const int N = 60; const int M = 500 + 10; int dp [M], sum , a , n, m; int main() { assert(scanf("%d%d", &n, &m) == 2); assert(1 <= n && n <= 50); assert(1 <= m && m <= 500); for (int i = 1; i <= n; ++ i) { for (int j = 1; j <= i; ++ j) { assert(scanf("%d", &a[i][j]) == 1); assert(0 <= a[i][j] && a[i][j] <= 1000); } } for (int i = 1; i <= n; ++ i) { for (int j = 1; j <= i; ++ j) { sum[i][j] = sum[i][j - 1] + a[n - j + 1][i - j + 1]; } } memset(dp, 200, sizeof(dp)); for (int i = 0; i <= n; ++ i) { dp[i][0][0] = 0; } for (int i = 1; i <= n; ++ i) { for (int j = i; j >= 0; -- j) { for (int k = j; k <= m; ++ k) { dp[i][j][k] = std::max(dp[i][j + 1][k], dp[i - 1][std::max(0, j - 1)][k - j] + sum[i][j]); } } } printf("%d\n", dp [0][m]); return 0; }
相关文章推荐
- [置顶] 今日头条2018春季校园招聘研发岗位笔试 题解 临时版
- 今日头条2017暑期实习生招聘笔试编程题之函数最宽尖峰
- 今日头条2018春季校园招聘研发岗位笔试编程题1
- 今日头条2018春季校园招聘研发岗位笔试编程题2
- 今日头条2018春季校园招聘研发岗位笔试编程题4
- 网易2017校园招聘笔试程序题(分田地)
- 网易2017校园招聘笔试题 最大的奇约数
- 奇虎360_2017校园招聘笔试编程题第二题
- 今日头条2017校招笔试题
- 【牛客网】今日头条2017客户端工程师实习生笔试题
- 校园招聘-2017携程秋招后台开发笔试编程题
- 2017微软秋季校园招聘在线编程笔试-#1401 : Registration Day
- 网易2017校园招聘数据挖掘笔试题
- 网易2017校园招聘笔试题:回文序列
- 2017今日头条前端实习生笔试题
- Trie树/字典树题目(2017今日头条笔试题:异或)
- 今日头条2017后端工程师实习生笔试题
- 【今日头条2017内推笔试题】二维平面整数点集
- 网易2017校园招聘笔试题 跳石板
- 网易2017校园招聘笔试题:优雅的点