zoukankan      html  css  js  c++  java
  • 360实习3.18笔试题目

    http://discuss.acmcoder.com/topic/58cd31e475bf559a0653f98f

    上面的是官方题解。

    1. 第一题,跑步,就是计算坐标,首先计算终点相对于x轴坐标是多少度,然后参数方程计算坐标,sin和cos直接加上角度就是坐标,反着跑的话,用360度减一下就可以了。

     1 /*
     2 ID: y1197771
     3 PROG: test
     4 LANG: C++
     5 */
     6 #include<bits/stdc++.h>
     7 #define pb push_back
     8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
    10 typedef long long ll;
    11 using namespace std;
    12 typedef pair<int, int> pii;
    13 const int maxn = 1e3 + 10;
    14 const double pi = acos(-1.0);
    15 void solve() {
    16     double l, r;
    17     cin >> l >> r;
    18     double t = (l - floor(l / (2 * pi * r))) / r;
    19     double x = cos(t) * r, y = sin(t) * r;
    20     double a = cos(2 * pi - t) * r, b = sin(2 * pi - t) * r;
    21     printf("%.3f %.3f
    ", a, b);
    22     printf("%.3f %.3f
    ", x, y);
    23 }
    24 int main() {
    25     freopen("test.in", "r", stdin);
    26     //freopen("test.out", "w", stdout);
    27     //ios::sync_with_stdio(0);
    28     //cin.tie(0); cout.tie(0);
    29     solve();
    30     return 0;
    31 }
    View Code

    2. 剪气球串,没做出来。

    一直以为是找规律,排列组合的知识,没搞出来。想到了范例,1221的解法很容易推翻很多想法。

    后来看答案,就是一般的套路,枚举最后一个可以得到的串,然后进行转移,这就是通常的dp思路,缩小问题规模,转化为规模更小的同一问题。

     1 /*
     2 ID: y1197771
     3 PROG: test
     4 LANG: C++
     5 */
     6 #include<bits/stdc++.h>
     7 #define pb push_back
     8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
    10 typedef long long ll;
    11 using namespace std;
    12 typedef pair<int, int> pii;
    13 const int maxn = 1e5 + 10;
    14 const int mod = 1e9 + 7;
    15 int a[maxn];
    16 int n;
    17 ll dp[maxn];
    18 int cnt[11];
    19 void solve() {
    20     cin >> n;
    21     dp[0] = 1;
    22     for (int i = 1; i <= n; i++) {
    23         cin >> a[i];
    24         //if(i == 1) continue;
    25         memset(cnt, 0, sizeof cnt);
    26         for (int j = 0; j < i; j++) {
    27             cnt[a[i - j] ]++;
    28             if(cnt[a[i - j] ] > 1)
    29                 break;
    30             dp[i] = (dp[i] + dp[i - j - 1]) % mod;
    31         }
    32         //cout << i << " " << dp[i] << endl;
    33     }
    34     cout << dp[n] << endl;
    35 }
    36 int main() {
    37     freopen("test.in", "r", stdin);
    38     //freopen("test.out", "w", stdout);
    39     ios::sync_with_stdio(0);
    40     cin.tie(0); cout.tie(0);
    41     solve();
    42     return 0;
    43 }
    View Code

    这个题目牢记,多看几遍,了解最后枚举的方式,加深理解。

    3. leetcode原题,动态规划。题解不写的,好像以前写过。

    我用的记忆化搜索。

     1 /*
     2 ID: y1197771
     3 PROG: test
     4 LANG: C++
     5 */
     6 #include<bits/stdc++.h>
     7 #define pb push_back
     8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
    10 typedef long long ll;
    11 using namespace std;
    12 typedef pair<int, int> pii;
    13 const int maxn = 1e3 + 10;
    14 int n;
    15 int dp[510][510];
    16 int a[510];
    17 int s[510];
    18 int work(int left, int right) {
    19     if(left > right) return 0;
    20     if(left == right) return a[left];
    21     if(dp[left][right] != -1) return dp[left][right];
    22     int &res = dp[left][right];
    23     int t1 = a[left] + s[right] - s[left] - work(left + 1, right);
    24     int t2 = a[right] + s[right - 1] - s[left - 1] - work(left, right - 1);
    25     res = max(t1, t2);
    26     return res;
    27 }
    28 void solve() {
    29     memset(dp, -1, sizeof dp);
    30     cin >> n;
    31     for (int i = 1; i <= n; i++) {
    32             cin >> a[i];
    33             s[i] = a[i] + s[i - 1];
    34     }
    35     int t = work(1, n);
    36     cout << t <<" " << s[n] - t << endl;
    37 
    38 }
    39 int main() {
    40     freopen("test.in", "r", stdin);
    41     //freopen("test.out", "w", stdout);
    42     //ios::sync_with_stdio(0);
    43     //cin.tie(0); cout.tie(0);
    44     int _; cin >> _;
    45     for (int i = 1; i <= _; i++) {
    46         cout << "Case #" << i << ": ";
    47         solve();
    48     }
    49 
    50     return 0;
    51 }
    View Code

    https://leetcode.com/problems/predict-the-winner/#/description 就是这个,一模一样。

    第二场360笔试,3.25的,没有参加,就不写了。

  • 相关阅读:
    51NOD 1069 Nim游戏
    51NOD 1066 Bash游戏
    51NOD 1058 N的阶乘的长度
    51NOD 1057 N的阶乘
    51NOD 1027 大数乘法
    RMQ 区间最大值 最小值查询
    Codeforces Round #426 (Div. 2) C. The Meaningless Game
    51NOD 1046 A^B Mod C
    OJ上 编译器 G++和C++的区别
    二分暑假专题 训练记录 2017-7-29
  • 原文地址:https://www.cnblogs.com/y119777/p/6654048.html
Copyright © 2011-2022 走看看