当前位置: 首页 > article >正文

2025.2.14——1400

2025.2.14——1400


A 1400

B 1400

C 1400

D 1400

E 1400

F 1400

G 1400

H 1400

------------------------------------------------

  • 思维+排序/双指针/二分/队列匹配+思维+二分/位运算+思维+数学+思维


A

  1. 一眼想到的是维护信息计数。
  2. 维护两个信息同时用长的一半去找短的一半。
  3. 较好的思维题。

B

  1. 贪心匹配:优先使用最小的匹配合法最小的。
  2. 排序+双指针/二分/队列匹配。

C

  1. 出现一次,子数组也是子序列,所以不能再出现了。
  2. 发现边界是控制出现与否的充要条件。

D

  1. 从每一位考虑,最初以为 k k k 每一位都需要出现,其实不是,但可以凭借这个思路计算出区间按位与具体数的。
  2. 另解:今天才知道 s t st st 表可以维护区间按位与、按位或值。

E

  1. 逆向思维+优化模拟:指针移动+找循环。
  2. 思维量挺多。

F

  1. 数学题。证明无解不太懂,限制次数过了。 洛谷题解。

G

  1. LCM与GCD问题,数学一下分析因子。

H

  1. 横向纵向分别考虑。横向可转化为纵向。
  2. 考虑纵向:交替发现对纵向平衡性无影响。同时对两行平衡性无影响且无后效性。

------------------------代码------------------------

A

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    // cin >> T;
    while (T--)
        _();
    return 0;
}

int has[6][46];
auto sum(string s, int l, int r)
{
    int ans = 0;
    for (int i = l; i <= r; i++)
        ans += s[i] - '0';
    return ans;
}
auto sum(string s)
{
    int ans = 0;
    for (auto v : s)
        ans += v - '0';
    return ans;
}
auto tar_sum(string s, int l, int r)
{
    return 2 * sum(s, l, r) - sum(s);
}
void _()
{
    int n;
    cin >> n;
    vector<string> s(n);

    for (auto &v : s)
    {
        cin >> v;
        has[v.size()][sum(v)]++;
    }
    int res = 0;
    for (auto l : s)
    {
        int ln = l.size();
        for (int i = 2; i <= 10; i += 2)
        {
            int rn = i - ln;
            if (rn <= 0 || rn > ln)
                continue;
            int tar_r = tar_sum(l, 0, i / 2 - 1);
            if (tar_r < 0)
                continue;
            res += has[rn][tar_r];
        }
    }
    for (auto r : s)
    {
        int rn = r.size();
        for (int i = 2; i <= 10; i += 2)
        {
            int ln = i - rn;
            if (ln <= 0 || ln >= rn)
                continue;
            int tar_l = tar_sum(r, rn - i / 2, rn - 1);
            if (tar_l < 0)
                continue;
            res += has[ln][tar_l];
        }
    }
    cout << res;
}
// int has[6][46][6][46];
// void _()
// {
//     memset(has, 0x3f, sizeof has);
//     int n;
//     cin >> n;
//     // struct Node
//     // {
//     //     /* data */
//     //     int len, sum, prelen, presum;
//     // };
//     // map<Node, int> has;
//     auto get_suf = [&](string s, int suf)
//     {
//         int sum = 0, m = s.size();
//         for (int i = m - 1; i >= m - suf; i--)
//             sum += s[i] - '0';
//         return sum;
//     };
//     auto get_pre = [&](string s, int pre)
//     {
//         int sum = 0, m = s.size();
//         for (int i = 0; i < pre; i++)
//             sum += s[i] - '0';
//         return sum;
//     };
//     int res = 0;
//     for (int i = 0; i < n; i++)
//     {
//         string s;
//         cin >> s;
//         res++;
//         int m = s.size();

//         for (int sum = 0; sum <= 90; sum += 2)
//             for (int len = 2; len <= 10; len += 2)
//             {
//                 int tar_sum = sum - get_pre(s, m);
//                 int tar_len = len - m;
//                 // bug3(len, m, tar_len);
//                 if (tar_sum < 0 || tar_len < 0 || tar_len > 5 || tar_sum > 45)
//                     continue;
//                 int half = len >> 1;
//                 if (m >= tar_len)
//                 {
//                     if (get_suf(s, half) << 1 == len)
//                     {
//                         for (int i = 1; i <= 5; i++)
//                             for (int j = 0; j <= 45; j++)
//                                 res += has[tar_len][tar_sum][i][j];
//                     }
//                 }
//                 else
//                 {
//                     // bug2(tar_len, tar_sum);
//                     // bug2(half, tar_sum >> 1);
//                     res += has[tar_len][tar_sum][half][tar_sum >> 1];
//                 }
//             }
//         int sum = get_pre(s, m);
//         for (int i = 0; i < m; i++)
//             has[m][sum][i + 1][get_pre(s, i + 1)]++, bug(has[m + 1][sum][i][get_pre(s, i + 1)]);
//     }
//     cout << res;
//     el;
// }

B

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n;
    cin >> n;
    vector<pair<int, int>> a;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        a.push_back({x, -1});
    }
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        a.push_back({x, 1});
    }
    sort(begin(a), end(a));
    int res = n;
    queue<int> q;
    for (auto [x, y] : a)
    {
        if (y == -1)
            q.push(x);
        else
        {
            if (q.size() && x > q.front())
                res--, q.pop();
        }
    }
    cout << res << '\n';
}
// void _()
// {
//     int n;
//     cin >> n;
//     vector<int> a(n), b(n);
//     for (int &x : a)
//         cin >> x;
//     for (int &x : b)
//         cin >> x;
//     sort(begin(a), end(a));
//     sort(begin(b), end(b));
//     int l = 0, r = 0, res = n;
//     for (; r < n; r++)
//         if (a[l] < b[r])
//             l++, res--;
//     cout << res;
//     el;
// }

C

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n;
    cin >> n;
    vector<int> a(n + 1), f(n + 1), g(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    map<int, bool> has;
    for (int i = 1; i <= n; i++)
        if (!has[a[i]])
            f[i] = 1, has[a[i]] = 1;
    has.clear();
    for (int i = n; i; i--)
        if (!has[a[i]])
            g[i] = 1, has[a[i]] = 1;
    int pre = 0, res = 0;
    for (int i = 1; i <= n; i++)
    {
        pre += f[i];
        res += pre * g[i];
    }
    cout << res;
    el;
}

D

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    vector<vector<int>> pre(30, vector<int>(n + 1));
    for (int i = 0; i < 30; i++)
        for (int j = 1; j <= n; j++)
            pre[i][j] = pre[i][j - 1] + (a[j] >> i & 1);

    // ST表  RMQ  倍增
    // dp[i][j] 以i为起点 长度为1<<j的区间的最大值

    vector<vector<int>> dp(n + 1, vector<int>(32));
    // init
    for (int j = 0; j < 30; j++) // j 是每一层状态
        for (int i = 1; i <= n; i++)
        {
            if (i + (1 << j) - 1 > n)
                continue;
            if (!j)
                dp[i][j] = a[i];
            else
                dp[i][j] = dp[i][j - 1] & dp[i + (1 << j - 1)][j - 1];
        }

    // query
    auto ask = [&](int l, int r)
    {
        int k = __lg(r - l + 1);
        return dp[l][k] & dp[r + 1 - (1 << k)][k];
    };
    auto ok = [&](int l, int r, int k)
    {
        // int ans = 0;
        // for (int i = 0; i < 30; i++)
        // {
        //     if (pre[i][r] - pre[i][l - 1] == (r - l + 1))
        //         ans += 1ll << i;
        // }
        // return ans >= k;
        return ask(l, r) >= k; // ST表只需这一句
    };
    // bug(ok(1, 1, 7));
    // bug(ok(1, 2, 7));
    int q;
    cin >> q;
    while (q--)
    {
        int L, k;
        cin >> L >> k;
        int l = L - 1, r = n + 1;
        while (r - l - 1)
        {
            int R = l + r >> 1;
            if (ok(L, R, k))
                l = R;
            else
                r = R;
        }
        // bug2(l, r);
        cout << (l < L ? -1 : l) << ' ';
    }
    el;
}

E

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    int f = n;
    vector<int> vis(n + 1);

    while (k--)
    {
        if (a[f] > n)
        {
            cout << "No";
            el;
            return;
        }
        vis[f] = 1;
        f = (f - a[f] + n) % n;
        if (vis[f])
            break;
    }
    // k %= cnt;
    // while (k--)
    //     f = a[f];
    // for (int i = f + 1; i <= n; i++)
    //     cout << a[i] << ' ';
    // for (int i = 1; i <= f; i++)
    //     cout << a[i] << ' ';
    cout << "Yes";
    el;
}

F

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n, m;
    cin >> n >> m;
    n % m;
    int cnt = 100, res = 0;
    while (cnt--)
    {
        if (n % m == 0)
        {
            cout << res;
            el;
            return;
        }
        while (n < m)
        {
            res += n;
            n <<= 1;
        }
        n %= m;
    }
    cout << -1;
    el;
}

G

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    // cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n, m;
    cin >> n;
    vector<int> t(n);
    map<int, int> a, b;
    for (int &x : t)
        cin >> x;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        a[t[i]] = x;
    }
    cin >> m;
    t.assign(m, 0);
    for (int &x : t)
        cin >> x;
    for (int i = 0; i < m; i++)
    {
        int x;
        cin >> x;
        b[t[i]] = x;
    }
    constexpr int mod = 998244353;
    int res = 1;
    for (auto [x, y] : b)
        if (a[x] < y)
            res = 0;
    for (auto [x, y] : a)
        res *= y > b[x] ? 2 : 1, res %= mod;
    cout << res;
    el;
}

H

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n, m;
    cin >> n >> m;
    vector<string> s(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> s[i], s[i] = ' ' + s[i];
    vector<vector<int>> f(n + 1, vector<int>(m + 1));
    bool fail = 0;
    for (int i = 1; i <= n; i++)
    {
        int ans = 1;
        for (int j = 1; j <= m; j++)
            if (s[i][j] == 'U')
                f[i][j] = ans, ans = -ans, f[i + 1][j] = ans;
    }
    for (int j = 1; j <= m; j++)
    {
        int ans = 1;
        for (int i = 1; i <= n; i++)
            if (s[i][j] == 'L')
                f[i][j] = ans, ans = -ans, f[i][j + 1] = ans;
    }
    for (int i = 1; i <= n; i++)
    {
        int sum_row = 0;
        for (int j = 1; j <= m; j++)
            sum_row += f[i][j];
        if (sum_row)
            fail = 1;
    }
    for (int j = 1; j <= m; j++)
    {
        int sum_col = 0;
        for (int i = 1; i <= n; i++)
            sum_col += f[i][j];
        if (sum_col)
            fail = 1;
    }
    if (fail)
    {
        cout << -1 << '\n';
        return;
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (f[i][j])
                cout << (f[i][j] == 1 ? 'W' : 'B');
            else
                cout << '.';
        }
        cout << '\n';
    }
}
// void _()
// {
//     int n, m;
//     cin >> n >> m;
//     vector<string> s(n + 1);
//     for (int i = 1; i <= n; i++)
//         cin >> s[i], s[i] = ' ' + s[i];
//     vector<vector<int>> f(n + 1, vector<int>(m + 1));
//     bool fail = 0;
//     for (int i = 1; i <= n; i++)
//     {
//         int sum_row = 0;
//         for (int j = 1; j <= m; j++)
//         {
//             if (s[i][j] - '.')
//                 f[i][j] = i + j & 1 ? 1 : -1;
//             sum_row += f[i][j];
//         }
//         if (sum_row)
//             fail = 1;
//     }
//     for (int j = 1; j <= m; j++)
//     {
//         int sum_col = 0;
//         for (int i = 1; i <= n; i++)
//             sum_col += f[i][j];
//         if (sum_col)
//             fail = 1;
//     }
//     if (fail)
//     {
//         cout << -1 << '\n';
//         return;
//     }
//     for (int i = 1; i <= n; i++)
//     {
//         for (int j = 1; j <= m; j++)
//         {
//             if (f[i][j])
//                 cout << (f[i][j] == 1 ? 'W' : 'B');
//             else
//                 cout << '.';
//         }
//         cout << '\n';
//     }
// }


http://www.kler.cn/a/545963.html

相关文章:

  • 100N03-ASEMI豆浆机专用MOS管100N03
  • Linux查找占用的端口,并杀死进程的简单方法
  • 【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)
  • Python基于Django的漏洞扫描系统【附源码、文档说明】
  • 自有证书的rancher集群使用rke部署k8s集群异常
  • 使用Opencv方法进行模板匹配
  • 通过工业数据采集网关实现车间数据采集上云
  • docker部署单机版doris,完整无坑
  • 地基SpringBoot项目示例
  • langchain学习笔记之langserve服务部署
  • 联核CDD20堆高型无人AGV叉车产品介绍/参数/优势/应用场景
  • 算法之 跳跃游戏
  • 深拷贝实现方法
  • 缓存三大问题及其解决方案
  • 第1章大型互联网公司的基础架构——1.5 服务发现
  • STM32HAL库快速入门教程——常用外设学习(2)
  • nginx播放视频(auth_request鉴权)
  • Unity3D 类MOBA角色控制器 开箱即用
  • 调用DeepSeek API接口:实现智能数据挖掘与分析
  • 腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型