首页 > 其他分享 >2023 湖北ccpc

2023 湖北ccpc

时间:2023-05-17 21:37:51浏览次数:46  
标签:return 前缀 int 2023 ccpc LONG long 湖北 define

F. Inverse Manacher

题意:

给定回文半径数组,构造回文串(只包含a, b)

分析:

题目保证一定合法,我们考虑每个'|'位置上的回文半径

  • 如果 r = 1:说明前一个位置与后一个位置上的字符不同
  • 如果 r > 1:说明前一段位置与后一段位置回文,则要保证前后位置上的字符相同

实现:

#include <bits/stdc++.h>
using namespace std;
#define mst(x, y) memset(x, y, sizeof x)
#define endl '\n'
#define INF LONG_LONG_MAX
#define int long long
#define Lson u << 1, l, mid
#define Rson u << 1 | 1, mid + 1, r
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 2000010, MOD = 1e9 + 7;
const double EPS = 1e-6;
typedef pair<int, int> PII;
int T;
int n;
int a[N];
char res[N];
string s;
char re(char c)
{
    if (c == 'a')
        return 'b';
    else
        return 'a';
}

void solve()
{
    cin >> n;
    for (int i = 0; i <= 2 * n + 1; i++)
        cin >> a[i];

    res[0] = '&', res[1] = '|', res[2] = 'a';

    for (int i = 3; i <= 2 * n + 1; i++)
    {
        if (i & 1)
        {
            res[i] = '|';
            if (a[i] == 1)
                res[i + 1] = re(res[i - 1]);
            else
                res[i + 1] = res[i - 1];
        }
    }

    for (int i = 2; i <= 2 * n + 1; i += 2)
        cout << res[i];
}
signed main()
{
    FAST;
    T = 1;
    // cin >> T;
    while (T--)
        solve();
    return 0;
}

J. Expansion

题意:

由 1 开始依次向后选择,有两种方案:

  1. 若选择下一个数,则将当前的总和加上选择的数的前缀和
  2. 若不选择,则将当前的总和加上当前的数的前缀和

要保证每一步之后的总和不能为负,且到达最后一个点之后一直加上总和的值不能为负

分析:

贪心地想:若选择加上某一前缀后总和为负,应当在此前的最大前缀位置上停留更长的时间;
此外,当前一段前缀和为负或者所有数的和为负时直接return
处理前缀和时,pre数组记录到当前位置位置的最大前缀和的位置,然后每个点都去判断一次,大于等于0就继续往后跑,小于0就要回到pre[i]使总和非负

实现:

#include <bits/stdc++.h>
using namespace std;
#define mst(x, y) memset(x, y, sizeof x)
#define endl '\n'
#define INF LONG_LONG_MAX
#define int long long
#define Lson u << 1, l, mid
#define Rson u << 1 | 1, mid + 1, r
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 200010, MOD = 1e9 + 7;
const double EPS = 1e-6;
typedef pair<int, int> PII;
int T;
int n;
int res;
int a[N];
int pre[N], s[N];
void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        s[i] = s[i - 1] + a[i];
    }

    bool f = true;
    for (int i = 1; i <= n; i++)
    {
        if (a[i] < 0)
            f = false;
        else if (a[i] > 0)
            break;
    }

    if (!f || s[n] < 0)
    {
        cout << "-1" << endl;
        return;
    }
    else
    {
        int maxv = -INF, pos = 1;
        for (int i = 1; i <= n; i++)
        {
            if (s[i] >= maxv)
            {
                maxv = s[i];
                pos = i;
            }
            pre[i] = pos;
        }

        int sum = 0;
        for (int i = 1; i <= n; i++)
        {
            res++;
            sum += s[i];

            if (sum < 0)
            {
                int add = 0;
                add = abs(sum) / s[pre[i]] + (abs(sum) % s[pre[i]] != 0);

                res += add;
                sum += add * s[pre[i]];
            }
        }
    }

    cout << res << endl;
}

signed main()
{
    FAST;
    T = 1;
    // cin >> T;
    while (T--)
        solve();
    return 0;
}

H. Binary Craziness

题意:

已知每个点的度,求每两个点度数a,b的 $ f(a, b) = (a|b)(a&b)(a^b) $ 相乘的和$ \sum_{i=1}^n \sum_{j=i}^n f(i, j) $

分析:

度数总和为 2m ,所以每个点的出度情况不会超过$ \sqrt{2m} \quad $
记录每个数出现的次数 f[i] ,枚举时乘法优化计算次数即可

实现:

#include <bits/stdc++.h>
using namespace std;
#define mst(x, y) memset(x, y, sizeof x)
#define endl '\n'
#define INF LONG_LONG_MAX
#define int long long
#define Lson u << 1, l, mid
#define Rson u << 1 | 1, mid + 1, r
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 2000010, MOD = 998244353;
const double EPS = 1e-6;
typedef pair<int, int> PII;
int T;
int n, m;
int a[N], cnt[N];
int f(int x, int y)
{
    return (x ^ y) * (x | y) * (x & y);
}
void solve()
{
    cin >> n >> m;

    for (int i = 1, x, y; i <= m; ++i)
    {
        cin >> x >> y;
        a[x]++, a[y]++;
    }
    for (int i = 1; i <= n; ++i)
        cnt[a[i]]++;

    vector<int> v;
    for (int i = 1; i <= 2 * m; ++i)
        if (cnt[i])
            v.push_back(i);

    int res = 0;
    for (int i = 0; i < v.size(); ++i)
    {
        for (int j = i + 1; j < v.size(); ++j)
        {
            res = (res + cnt[v[i]] * cnt[v[j]] % MOD * f(v[i], v[j]) % MOD) % MOD;
        }
    }

    cout << res << endl;
}
signed main()
{
    FAST;
    T = 1;
    // cin >> T;
    while (T--)
        solve();
    return 0;
}

标签:return,前缀,int,2023,ccpc,LONG,long,湖北,define
From: https://www.cnblogs.com/Aidan347/p/17410326.html

相关文章

  • YACS 2023年5月月赛 甲组 T1 子集和(六) 题解
    YACS老师说这是道分治,但就不告诉我怎么做,我硬是用线段树卡了过去...特别解气的是把AC图片发了过去(我就是在YACS上的编程课)莫队好了说点正经的,看到是谁谁谁的倍数就能想到DP,状态设计也很水啦!设f[i]为当前考虑到的区间内,子集和%k=i的数量。新加入一个元素时,循环0~......
  • 2022-2023年大二上mysql学习汇总
    CRUD等操作(DDL、DML、DQL)权限操作:createuser用户名@"localhost或%" identifiedby'密码'  showgrantsfor用户名@主机名 grant权限列表(all/insert/delete/select等)on库名(*).表名(*)to用户名@主机名  remove与授予一样函数:内置(后面加as......
  • 2023/5/17
    L1-009N个数求和分数 20全屏浏览题目作者 陈越单位 浙江大学本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。输入格式:输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b......
  • day73(2023.5.17)
    1.资源访问路径 2.获取请求头信息 运行结果: 运行结果: 3.获取请求头案例 运行结果: 4.HttpServletRequest对象的生命周期 5.HttpServletResponse对象 6.设置响应类型设置字符类型响应: 运行结果: 运行结果: 略。设置......
  • 2023.5.17
    1)本App的客户端基于Android系统,对于使用该App的用户来说,可以通过手机更方便地操控手机应用,实现“智能化”的操作手机和输入指示命令,具体功能大致如下:1)语音识别:用户在“语音合成”界面点击开始后,会调取手机麦克风,此时会有科大讯飞封装好提供的对话话,提示用户请说话,用户在录入语音......
  • 2022-2023 春学期 矩阵与数值分析 C2 矩阵的变换和计算
    2022-2023春学期矩阵与数值分析C2矩阵的变换和计算原文引言本文内容来自于对矩阵与数值分析课程资料的整理;本文所涉及的课程指东北某沿海高校,计算机学院硕士生必修课“矩阵与数值分析”,课程资料包括课程PPT、教材《计算机科学计算第二版》[1],以及网络资料,师兄的笔记等。......
  • 2023冲刺国赛模拟 2.1
    2023冲刺国赛模拟2.1T1树首先考虑初始节点只有\(1\)个的情况,很容易使用dp解决,设\(f_i\)表示初始节点为\(i\),占领以\(i\)为根的子树所需要的最小回合数量,只需要优先占领回合多的子树即可。当初始节点为\(2\)个时,容易发现\(u,v\)路径上存在一条边,满足最优方案下......
  • Jan 2023-Prioritizing Samples in Reinforcement Learning with Reducible Loss
    1Introduction本文建议根据样本的可学习性进行抽样,而不是从经验回放中随机抽样。如果有可能减少代理对该样本的损失,则认为该样本是可学习的。我们将可以减少样本损失的数量称为其可减少损失(ReLo)。这与Schaul等人[2016]的vanilla优先级不同,后者只是对具有高损失的样本给予高优......
  • 合合信息亮相CCIG2023:多位大咖共话智能文档未来,文档图像内容安全还面临哪些技术难题?
    ​ 近日,中国图象图形大会(CCIG2023)(简称“大会”)在苏州圆满落幕。本届大会以“图象图形·向未来”为主题,由中国科学技术协会指导,中国图象图形学学会主办,苏州科技大学承办,特邀谭铁牛院士、赵沁平院士、吴一戎院士等百余位国内外知名学者,来自代表企业的技术专家,共话图像图形学术研......
  • SSO2.0 6-20230516
                 ......