• 牛客周赛 Round 51


    A题:小红的同余

    思路:

    大水题

    code:

    1. inline void solve() {
    2. int m; cin >> m;
    3. cout << (m + 1) / 2 << endl;
    4. return;
    5. }

    B题:小红的三倍数

    思路:

    一个数如果能够被三整除,那么其各位上的数之和肯定为三的倍数。

    题目只是多了一个衔接操作,相当于一些数会乘上一些十的倍数,不影响整除性。

    我们只要判断总和是否为三的倍数即可。

    code:

    1. inline void solve() {
    2. int n; cin >> n;
    3. int cur = 0;
    4. for (int i = 0; i < n; i ++ ) {
    5. string s; cin >> s;
    6. for (char c : s) cur += c - '0';
    7. }
    8. cout << (!(cur % 3) ? "YES\n" : "NO\n");
    9. return;
    10. }

    C题:小红充电

    思路:

    分类讨论, 要想充满电,那你充电的时候肯定不会玩手机

    因为有快充存在,还存在一种先玩手机到快充线进行快充充满的情况。

    如果一开始就能快充,就直接快充

    code:

    1. inline void solve() {
    2. double ans;
    3. double x, y, t, a, b, c; cin >> x >> y >> t >> a >> b >> c;
    4. if (x <= t) ans = (100 - x) / c;
    5. else {
    6. ans = min((100 - x) / b, (x - t) / y + (100 - t) / c);
    7. }
    8. cout << fixed << setprecision(7) << ans << endl;
    9. return;
    10. }

    D题:小红的gcd

    思路:

    辗转相除法

    gcd(a, b) = gcd(b, a % b)

    code:

    1. inline void solve() {
    2. string s; int b;
    3. cin >> s >> b;
    4. int a = 0;
    5. for (char c : s) {
    6. a = ((ll)a * 10 + (c - '0')) % b;
    7. }
    8. cout << __gcd(b, a) << endl;
    9. return;
    10. }

    E题:小红走矩阵

    思路:

    最短路

    code:

    1. struct node {
    2. int dis;
    3. PII point;
    4. bool operator > (const node &a) const {
    5. return dis > a.dis;
    6. }
    7. };
    8. int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
    9. inline void solve() {
    10. int n; cin >> n;
    11. vectorint>> a(n + 1, vector<int>(n + 1));
    12. for (int i = 1; i <= n; i ++ ) {
    13. for (int j = 1; j <= n; j ++ ) {
    14. cin >> a[i][j];
    15. }
    16. }
    17. priority_queue, greater> q;
    18. vectorint>> d(n + 1, vector<int>(n + 1, 1e9 + 7));
    19. q.push({0, {1, 1}});
    20. d[1][1] = a[1][1];
    21. mapint> vis;
    22. while (q.size()) {
    23. PII cur = q.top().point; q.pop();
    24. if (vis[cur]) continue;
    25. vis[cur] = 1;
    26. int x = cur.first, y = cur.second;
    27. for (int i = 0; i < 4; i ++ ) {
    28. int nx = x + dx[i], ny = y + dy[i];
    29. if (nx >= 1 && nx <= n && ny >= 1 && ny <= n) {
    30. if (d[nx][ny] > max(d[x][y], a[nx][ny])) {
    31. d[nx][ny] = max(d[x][y], a[nx][ny]);
    32. q.push({d[nx][ny], {nx, ny}});
    33. }
    34. }
    35. }
    36. }
    37. cout << d[n][n] << endl;
    38. return;
    39. }

    F题:小红的数组 

    思路:

    区间问题,上线段树

    不知道为啥,感觉写过了。

    code:

    1. const int N = 5e5 + 9;
    2. struct node {
    3. int l, r;
    4. ll sum;
    5. ll mx, mn;
    6. ll lmx, rmx, lmn, rmn;
    7. } tr[4 * N];
    8. int a[N];
    9. void pushup(node &T, node L, node R) {
    10. T.sum = L.sum + R.sum;
    11. T.lmx = max(L.lmx, L.sum + R.lmx);
    12. T.rmx = max(R.rmx, R.sum + L.rmx);
    13. T.lmn = min(L.lmn, L.sum + R.lmn);
    14. T.rmn = min(R.rmn, R.sum + L.rmn);
    15. T.mx = max({L.mx, R.mx, L.rmx + R.lmx});
    16. T.mn = min({L.mn, R.mn, L.rmn + R.lmn});
    17. }
    18. void pushup(int u) {
    19. node L = tr[u << 1], R = tr[u << 1 | 1];
    20. pushup(tr[u], L, R);
    21. }
    22. void build(int u, int l, int r) {
    23. tr[u] = {l, r};
    24. if (l == r) {
    25. tr[u] = {l, r, a[l], a[l], a[l], a[l], a[l], a[l], a[l]};
    26. return;
    27. }
    28. int mid = l + r >> 1;
    29. build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
    30. pushup(u);
    31. }
    32. node query(int u, int l, int r) {
    33. if (tr[u].l >= l && tr[u].r <= r) {
    34. return tr[u];
    35. }
    36. int mid = tr[u].l + tr[u].r >> 1;
    37. if (l > mid) return query(u << 1 | 1, l, r);
    38. if (r <= mid) return query(u << 1, l, r);
    39. node T;
    40. pushup(T, query(u << 1, l, r), query(u << 1 | 1, l, r));
    41. return T;
    42. }
    43. inline void solve() {
    44. int n; cin >> n;
    45. for (int i = 1; i <= n; i ++ ) cin >> a[i];
    46. build(1, 1, n);
    47. int q; cin >> q;
    48. while (q -- ) {
    49. int l, r; cin >> l >> r;
    50. node T = query(1, l, r);
    51. cout << max(T.mx, abs(T.mn)) << endl;
    52. }
    53. return;
    54. }

  • 相关阅读:
    黑马JVM总结(二十七)
    Python高级_第2章_计算机网络及TCP网络应用程序开发
    java基于SpringBoot+Vue+nodejs的学生综合成绩测评奖学金系统 Element
    智工教育:公务员知识点积累一
    Linux C语言开发-D5常量
    JavaScript 16 JavaScript 对象
    SecureCRT -- 使用说明
    ASEMI肖特基二极管1N5822参数,1N5822特征,1N5822应用
    MSF(3)——apk和exe的加马
    Linux14 -- 进程间通信、管道
  • 原文地址:https://blog.csdn.net/2301_80105412/article/details/140431840