码迷,mamicode.com
首页 > 其他好文 > 详细

京东4.7实习笔试题

时间:2017-04-08 00:10:45      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:play   end   splay   笔试题   sed   线性   discus   std   style   

官方题解:http://discuss.acmcoder.com/topic/58e78ec01a2f85620527f2d0

1. 站队,小偷和警察,刚开始想找每个小偷最近的警察,但是发现,如果找最近的警察,但是他的能力可能是小的,不满足要求,那就需要其他办法。然后从警察的角度看,他能抓住的小偷,由于每个警察

最多遍历前后一共19个位置,所以复杂度是19n,线性的,满足要求。

注意边界的检查。

技术分享
 1 #include<bits/stdc++.h>
 2 #define pb push_back
 3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
 4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
 5 typedef long long ll;
 6 using namespace std;
 7 typedef pair<int, int> pii;
 8 const int maxn = 1e5 + 10;
 9 bool a[maxn];
10 void solve() {
11     int n;
12     string s;
13     cin >> n >> s;
14     int id = -1;
15     n = s.size();
16     for (int i = 0; i < n; i++) {
17         if(isdigit(s[i])) {
18             int v = s[i] - 0;
19             for (int j = max(0, i - v); j < min(n, i + v + 1); j++)
20                 if(s[j] == X) a[j] = 1;
21         }
22     }
23     int res = 0;
24     for (int i = 0; i < n; i++) res += a[i];
25     cout << res << endl;
26 }
27 int main() {
28     //freopen("test.in", "r", stdin);
29     //freopen("test.out", "w", stdout);
30     //ios::sync_with_stdio(0);
31     //cin.tie(0); cout.tie(0);
32     solve();
33     return 0;
34 }
View Code

2. 分队。

上来一定先要读懂题意,看例子是怎么解的。这是最关键的地方。题目要求仅是相邻的不同,然后和为n。

不难想到k1k1k1的情况,然后我就这样做了,只过了30%,然后考虑哪里错了,我写出k1k1k1k1k1,发现变成(k + 1), k, (k + 1), k, (k + 1), 可以省出很多1,然后就考虑这种方式,这种情况下,是比较好计算的,然后就过了。

技术分享
 1 #include<bits/stdc++.h>
 2 #define pb push_back
 3 typedef long long ll;
 4 using namespace std;
 5 typedef pair<int, int> pii;
 6 const int maxn = 1e3 + 10;
 7 
 8 void solve() {
 9     ll x, y;
10     while(cin >> x)
11     {cin >> y;
12     if(y == 1) {
13         ll res = x / 3;
14         ll d = x % 3;
15         res *= 2;
16         if(d > 0) {
17             res++;
18         }
19         cout << res << endl;
20         continue;
21     }
22     ll res = x / (y * 2 + 1);
23     res *= 2;
24     ll d = x % (y * 2 + 1);
25     if(d >= y) res++;
26     cout << res << endl;
27     }
28 }
29 
30 int main() {
31     freopen("test.in", "r", stdin);
32     //freopen("test.out", "w", stdout);
33     ios::sync_with_stdio(0);
34     cin.tie(0); cout.tie(0);
35     solve();
36     return 0;
37 }
View Code

其他的题目没有看,有时间看一下。

感觉基础还不是很熟练,一些套路掌握的不是很好。

想想真是可怕,以前做的都是错的,怪不得挂了。

京东4.7实习笔试题

标签:play   end   splay   笔试题   sed   线性   discus   std   style   

原文地址:http://www.cnblogs.com/y119777/p/6680611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!