首页 > 其他分享 >2023/8/9~2023/8/11 做题

2023/8/9~2023/8/11 做题

时间:2023-08-09 12:33:57浏览次数:33  
标签:11 qpow cnt val int ll 2023

2023/8/9~2023/8/11 做题

目录

Codeforces Round 121 (Div. 1) C. Fools and Roads

树形dp + LCA

先预处理LCA,将边下放到点处理, 对于每个路径在其 \(u\) , \(v\), \(lca\) 处分别打个标记,树形dp合并即可

const int N = 2e5 + 10;
const int LOGN = 20;

int n;
vector<int> e[N];
int id[N], cnt, dep[N], fa[N][LOGN + 2], val[N];
int res[N];
map<pair<int, int>, int> mp;

void lca_init()
{
    for(int j = 1; j <= LOGN; j++)
        for(int i = 1; i <= n; i++)
            fa[i][j] = fa[fa[i][j - 1]][j - 1];
}
int lca_query(int u, int v)
{
    if(dep[u] < dep[v])   swap(u, v);
    int d = dep[u] - dep[v];
    for(int j = LOGN; j >= 0; j--)
        if(d & (1 << j))
            u = fa[u][j];
    if(u == v)    return u;
    for(int j = LOGN; j >= 0; j--)
        if(fa[u][j] != fa[v][j])
            u = fa[u][j],v = fa[v][j];
    return fa[u][0];
}

void dfs(int u, int from)
{
    dep[u] += dep[from] + 1;
    for(auto v : e[u])
    {
        if(v == from)   continue;
        id[v] = mp[{u, v}];
        fa[v][0] = u;
        dfs(v, u);
    }
}

void dfs2(int u, int from)
{
    for(auto v : e[u])
    {
        if(v == from)   continue;
        dfs2(v, u);
        val[u] = val[u] + val[v];
    }
    res[id[u]] = val[u];
}

void solve()
{       
    cin>>n;
    for(int i = 1; i < n; i++)
    {
        int u, v;   cin>>u>>v;
        mp[{u, v}] = ++cnt;
        mp[{v, u}] = cnt;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs(1, 0);
    lca_init();
    int q;  cin>>q;
    while(q--)
    {
        int u, v;   cin>>u>>v;
        int lca = lca_query(u, v);
        val[u]++, val[v]++, val[lca] -= 2;
    }

    // for(int i = 1; i <= n; i++) 
    //     cout<<id[i]<<"  ";
    // cout<<'\n';
    // for(int i = 1; i <= n; i++) 
    //     cout<<val[i]<<"  ";
    // cout<<'\n';

    dfs2(1, 0);
    for(int i = 1; i < n; i++)
        cout<<res[i]<<" ";
    cout<<'\n';
    return;
}

Codeforces Round 343 (Div. 2) C. Famil Door and Brackets

dp

定义状态 \(f_{i,j}\) ,为有 \(i\) 长度的字符串,其 \(j\) 为 \((\) 的数量 - \()\) 的数量,其中找出 \(S\) 串中 \((\) 的数量 - \()\) 的最小值 \(miv\), 其 \(P\) 的\((\) 的数量 - \()\) 的数量 \(\geq miv\),其 \(Q\) 中受到 \(P\) 和 \(S\) 的限制,\((\) 的数量 \(\geq )\) 的数量,我们只要倒着算答案就行

\[f_{i,j} = f_{i - 1, j - 1} + f_{i - 1, j + 1} \]

\[res = f_{len, i} \times f_{n - m - len, i + \texttt{S 中 '('数量 - ')' 的数量}} \]

其中满足 \(i + \texttt{S 中 前缀'('数量 - 前缀')' 的最小值} \geq 0 \&\& i + \texttt{S 中 '('数量 - ')' 的数量} \leq n - m - len\) 的条件

int n, m;
int f[N][N], g[N][N];
string s;
void solve()
{       
    cin>>n>>m>>s;
    int cnt = 0, miv = 1e9;
    for(auto it : s)
    {
        if(it == '(')   cnt++;
        else cnt--;
        miv = min(cnt, miv);
    }
    f[0][0] = 1;
    for(int i = 1; i <= N - 10; i++)
    {
        f[i][0] = f[i - 1][1];
        for(int j = 1; j <= i; j++)
            f[i][j] = (f[i - 1][j - 1] + f[i - 1][j + 1]) % mod;
    }
    ll res = 0;
    for(int len = 0; len <= n - m; len++)
    {
        for(int i = 0; i <= len; i++)
        {
            if(i + miv >= 0 && i + cnt <= n - m - len)
            {
                //cout<<len<<"    "<<i<<"    "<<f[len][i]<<"   "<<f[n - m - len][i + cnt]<<'\n';
                res = (res + 1ll * f[len][i] * f[n - m - len][i + cnt]) % mod;
            }
        }
    }
    cout<<res<<'\n';
    return;
}

Codeforces Round 880 (Div. 1) A. k-th equality

在数位要求下,找到等式的第 \(k\) 小字典序

直接跑暴力

注意到题面 Each input file has at most $ 5 $ test cases which do not satisfy $ A, B, C \leq 3 $ .就是我们可以跑暴力的依据

穷举数字 \(a\) ,根据 \(c\) 的上下界确定 \(b\) 的上下界即可

ll qpow(ll base, ll r)
{
    int res = 1;
    while(r--)
        res = res * base;
    return res;
}

void solve()
{       
    ll a, b, c, k; cin>>a>>b>>c>>k;
    ll down1 = qpow(10, a - 1), up1 = qpow(10, a) - 1;
    ll down2 = qpow(10, b - 1), up2 = qpow(10, b) - 1;
    ll down3 = qpow(10, c - 1), up3 = qpow(10, c) - 1;
    ll d = 0;
    for(ll i = down1; i <= up1; i++)
    {
        ll miv = down3 - i;
        ll mav = up3 - i;
        ll l1 = max(miv, down2);
        ll r1 = min(mav, up2);
        d += max(0ll, (r1 - l1 + 1));
        if(d >= k)
        {
            d -= (r1 - l1 + 1);
            d = k - d;
            cout<<i<<" + "<<l1 + d - 1<<" = "<<i + l1 + d - 1<<'\n';
            return;
        }
    }   
    cout<<-1<<'\n';
    return;
}

标签:11,qpow,cnt,val,int,ll,2023
From: https://www.cnblogs.com/magicat/p/17616549.html

相关文章

  • win11 PowerShell关闭拆分选项卡窗框窗口
    PowerShell拆分窗格一、拆分选项卡窗格1.鼠标操作:2.快捷键操作:Alt+Shift+d、Alt+Shift+minus、Alt+Shift+plus没点一次,就在当前选项卡上拆分一次。minus:键盘上-减号键plus:键盘上+加号键COMMA键盘上的“逗号”equal键盘上的“=”二、关闭拆分......
  • 2023下半年产品经理NPDP认证8月19日正式开班,报名从速
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。  【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业......
  • 2023年CSPM-3国标项目管理中级认证报名到这里就对了
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • 2023年8月广州/深圳软考中级系统集成项目管理工程师报名
    系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成项目管理工程师,属于软考三个级别中的“中级”。  【报考资格】 不设......
  • 2023年9月北京/广州深圳DAMA-CDGA/CDGP认证考试报名进行中
    据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA)数据治理专家(CertifiedDataGovernanceProfessional,CDGP) 考试时间: CDGA:2023......
  • windows11 docker desktop 安装
      windows11运行docker 下载dockerdesktop https://www.docker.com/ 安装完后会提示要重启电脑 打开dockerdesktop如果报wsl版本软低要更新(docker启动失败) wslkernelversiontoolow打开cmd 运行wsl--update 再次打开dockerdesktop启动成......
  • 根号分治-2023牛客7 E-Star Wars
      也就是说对于大点和小点我们采用不同的方式维护对于大点来说我们只需要记录它的周围点的总和不需要知道具体的谁链接了它 对于小点我们需要维护它的所有信息他自己链接了哪些点 需要再开一个vector表示自己链接的大点这样大对大或者小对大的时候维护的信息也......
  • 种花 2023.8.9
    种下一朵小花,过一会来摘下。2017。这是我个人,人生的一道分界线。一个偶然但不完全偶然的机会,我与省内相隔几百公里以外的另一座城市产生了命运的联系。而现在,我与出生地的联系被斩断了。我渴望走出去看看大千世界,但所谓搬家不过是从一口井跳到了另一口井。我从未设想过如......
  • rocky linux:编译安装python3.11.4(rocky linux 9.2)
    一,查看现有的版本:1,本地版本[root@img~]#python--versionPython3.9.162,现在的最新版本:访问官网:https://www.python.org/如图:可以看到线上的最新版本是3.11.4 二,编译/安装:1,下载:先复制下载地址2,从服务器用wget命令下载:[root@imgpython]#wgethttp......
  • python:升级pip版本(Python 3.11.4)
    一,查看当前pip的版本:[[email protected]]#pip--versionpip23.1.2from/usr/local/soft/python3.11.4/lib/python3.11/site-packages/pip(python3.11)二,升级pip:[[email protected]]#python3-mpipinstall--upgradepipLookinginindexes:http://m......