• 牛客小白月赛16


    A、小石的签到题

    思路:签到题。简单列举一下即可发现当且仅当 $n == 1$ 时,先手小石必输,其他情况下都必赢!

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 using namespace std;
    18 typedef long long LL;
    19 typedef unsigned long long ULL;
    20 const double eps = 1e-6;
    21 const double PI = acos(-1.0);
    22 const int maxn = 1e5+5;
    23 const int inf = 0x3f3f3f3f;
    24 
    25 int n;
    26 
    27 int main(){
    28     while(cin >> n) {
    29         if(n == 1)cout <<"Yang" << endl;
    30         else cout << "Shi" <<endl;
    31     }
    32     return 0;
    33 }
    View Code

    B、小雨的三角形

    思路:暴力就完事了!+1

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 using namespace std;
    18 typedef long long LL;
    19 typedef unsigned long long ULL;
    20 const double eps = 1e-6;
    21 const double PI = acos(-1.0);
    22 const int maxn = 1e5+5;
    23 const int inf = 0x3f3f3f3f;
    24 const LL mod = 1e9+7;
    25 
    26 int n, m, x, y;
    27 LL mp[1005][1005], ans[1005];
    28 
    29 int main(){
    30     memset(mp, 0, sizeof(mp));
    31     mp[1][1] = 1;
    32     mp[2][1] = mp[2][2] = 2;
    33     for(int i = 3; i <= 1000; ++i) mp[i][1] = mp[i][i]= i;
    34     for(int i = 3; i <= 1000; ++i) {
    35         for(int j = 2; j < i; ++j) {
    36             mp[i][j] = (mp[i - 1][j] + mp[i - 1][j - 1] ) % mod;
    37         }
    38     }
    39     memset(ans, 0, sizeof(ans));
    40     for(int i = 1; i <= 1000; ++i) {
    41         for(int j = 1; j <= i; ++j) {
    42             ans[i] = (ans[i] + mp[i][j]) % mod;
    43         }
    44     }
    45     while(cin >> n >> m) {
    46         for(int i = 1; i <= m; ++i) {
    47             cin >> x >> y;
    48             LL res = 0;
    49             for(int i = x; i <= y; ++i)  {
    50                 res = (res + ans[i]) % mod;
    51             }
    52             cout << res << endl;
    53         }
    54     }
    55     return 0;
    56 }
    View Code

    C、小石的海岛之旅

    思路:暴力就完事了!+2

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 using namespace std;
    18 typedef long long LL;
    19 typedef unsigned long long ULL;
    20 const double eps = 1e-6;
    21 const double PI = acos(-1.0);
    22 const int maxn = 1e5+5;
    23 const int inf = 0x3f3f3f3f;
    24  
    25 int n, m, a, cnt, h[1005];
    26  
    27 int main(){
    28     while(cin >> n >> m) {
    29         for(int i = 0; i < n; ++i) cin >> h[i];
    30         for(int i = 1; i <= m; ++i) {
    31             cin >> a;
    32             cnt = 0;
    33             bool flag = false;
    34             for(int i = 0; i < n; ++i) {
    35                 if(a < h[i] && !flag) ++cnt, flag = true;
    36                 else if(a >= h[i] && flag) flag = false;
    37             }
    38             cout << cnt << endl;
    39         }
    40     }
    41     return 0;
    42 }
    View Code

    D、小阳买水果

    思路:前缀和的差即所求答案 $ [k, i]  = [1, i] - [1, k) , ( k leq i) $,关键点:维护一个不增序列a和最长连续子序列的和大于0。因为要求最长连续子序列(区间和大于0)的长度,那么对于第 i 个数,从不增序列a中找到一个小于当前前缀和 $ sum_i $ 的最小值,因为是不增序列,所以可以用二分来查找这个最小值的位置。为什么要维护这么一个不增序列呢?如果能从 $ [1, i - 1] $ 找到,因为从小 ---> 变大,那么所求区间 $ [k , i] $ 中所有元素的和一定是正数,也就是在他满意的条件下即可求出最长连续子序列的长度!

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 #include <bitset>
    18 using namespace std;
    19 typedef long long LL;
    20 typedef unsigned long long ULL;
    21 const int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // 上右下左
    22 const int mx[8] = {-1, -2, -2, -1, 1, 2, 2, 1}; // 马可走的八个方向
    23 const int my[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
    24 const double eps = 1e-6;
    25 const double PI = acos(-1.0);
    26 const int maxn = 2e6+5;
    27 const int inf = 0x3f3f3f3f;
    28 
    29 int n, x, sum, res, lt, rt, ans, mid, a[maxn];
    30 
    31 int main() {
    32     while(~scanf("%d", &n)) {
    33         memset(a, 0, sizeof(a));
    34         ans = sum = 0;
    35         for(int i = 1; i <= n; ++i) {
    36             scanf("%d", &x);
    37             sum += x; // 前i个数的前缀和
    38             a[i] = min(a[i - 1], sum); // 维护不增序列
    39             lt = 0, rt = i - 1, res = -1; 
    40             while(lt <= rt) { // 从不增序列中找出最小值
    41                 mid = (lt + rt) >> 1;
    42                 if(a[mid] >= sum) lt = mid + 1;
    43                 else rt = mid - 1, res = mid;
    44             }
    45             if(res != -1) ans = max(ans, i - res); 
    46         }
    47         printf("%d
    ", ans);
    48     }
    49     return 0;
    50 }
    View Code

    E、小雨的矩阵

    思路:深搜入门题!

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 #include <bitset>
    18 using namespace std;
    19 typedef long long LL;
    20 typedef unsigned long long ULL;
    21 const int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // 上右下左
    22 const int mx[8] = {-1, -2, -2, -1, 1, 2, 2, 1}; // 马可走的八个方向
    23 const int my[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
    24 const double eps = 1e-6;
    25 const double PI = acos(-1.0);
    26 const int maxn = 1e5+5;
    27 const int inf = 0x3f3f3f3f;
    28 
    29 int n, a[10][10];
    30 set<int> syt;
    31 
    32 bool check(int x, int y) {
    33     if(x < 0 || y < 0 || x >= n || y >= n) return false;
    34     return true;
    35 }
    36 
    37 void dfs(int x, int y, int sum) {
    38     if(x == n - 1 && y == n - 1) {
    39         syt.insert(sum);
    40         return;
    41     }
    42     for(int i = 1; i <= 2; ++i) {
    43         int dx = x + dir[i][0], dy = y + dir[i][1];
    44         if(check(dx, dy)) dfs(dx, dy, sum + a[dx][dy]);
    45     }
    46 }
    47 
    48 int main() {
    49     while(cin >> n) {
    50         syt.clear();
    51         for(int i = 0; i < n; ++i) {
    52             for(int j = 0; j < n; ++j) {
    53                 cin >> a[i][j];
    54             }
    55         }
    56         dfs(0, 0, a[0][0]);
    57         cout << syt.size() << endl;
    58     }
    59     return 0;
    60 }
    View Code

    G、小石的图形

    思路:小学数学,当且仅当绳子围成半圆时面积最大!

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <iomanip>
     8 #include <complex>
     9 #include <string>
    10 #include <vector>
    11 #include <set>
    12 #include <map>
    13 #include <list>
    14 #include <deque>
    15 #include <queue>
    16 #include <stack>
    17 using namespace std;
    18 typedef long long LL;
    19 typedef unsigned long long ULL;
    20 const double eps = 1e-6;
    21 const double PI = acos(-1.0);
    22 const int maxn = 1e5+5;
    23 const int inf = 0x3f3f3f3f;
    24 const LL mod = 1e9+7;
    25 
    26 int n;
    27 
    28 int main(){
    29     while(cin >> n) {
    30         printf("%.3f
    ", 0.5 * n * n / PI);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    算法第二章上机实践报告
    算法第一章作业
    第7章学习小结 不使用STL-map过实践题:QQ帐户的申请与登陆
    第6章学习小结
    HDU
    HDU 2089 不要62(数位DP)
    char-2
    chart-7
    chart-6
    char-8
  • 原文地址:https://www.cnblogs.com/acgoto/p/11180306.html
Copyright © 2020-2023  润新知