首页 > 其他分享 >AGC 020~039 记录

AGC 020~039 记录

时间:2023-11-21 17:24:07浏览次数:24  
标签:return int AGC mid long 039 020 cr check

不想写 CF。

AGC020

D. Min Max Repetition

要令连续的相同字符个数的最大值最小,可以直接贪心将 AB 尽可能分开,得出答案 \(k=\lfloor\frac{A+B}{\min(A,B)+1}\rfloor\)。
接下来要在这个基础上构造字典序最小的答案。

我们显然希望 A 尽量靠前,直到超出限制时再用 B 分开,即靠前部分的答案形如 AAABAAABAAAB...。但是后面大量的 B 还需要用 A 分开,我们希望尽量少的 A 被放在后面,则后面部分的答案形如 BBBABBBABBB...
也就是说,完整的答案字符串由前后两部分拼成,前半部分每放 \(k\) 个 A 放 \(1\) 个 B;后半部分每放 \(k\) 个 B 放 \(1\) 个 A
那么我们可以二分这个位置 \(p\),\(\text{check}\) 时分别求出前后所需的两种字符个数即可。

注意 \(\text{check}\) 的时候别爆 int。

Code
#define int long long 
int T,A,B,C,D,k;
il bool check(int x)
{
    int cntb=x/(k+1),cnta=cntb*k+x%(k+1);
    return (B-cntb)<k*(A-cnta+1);
}
signed main()
{
    T=read();
    while(T--)
    {
        A=read(),B=read(),C=read(),D=read();
        k=max((A+B)/(B+1),(A+B)/(A+1));
        int l=0,r=A+B;
        while(l<r)
        {
            int mid=(l+r+1)>>1;
            if(check(mid)) l=mid;
            else r=mid-1;
        }
        for(int i=C;i<=D;i++)
        {
            if(i<=l) printf(i%(k+1)==0?"B":"A");
            else printf((A+B-i+1)%(k+1)==0?"A":"B");
        }
        printf("\n");
    }
    return 0;
}

E. Encoding Subsets

没发现状态数很少的性质。

考虑区间 dp,设 \(f_{l,r}\) 表示 \([l,r]\) 这段子串压缩成任意段的方案数,\(g_{l,r}\) 表示只压缩成一段的方案数。这样设状态避免了重复计数。
那么有:

\[f_{l,r}\gets \sum_{k=l}^r g_{l,k}\times f_{k+1,r} \]

\[g_{l,r}\gets\sum_{d\mid r-l+1} [d \text{是循环节}] f_{l,l+d-1} \]

注意到,即使 \(l,r\) 不同,但区间内的字符串可能是一样的,这样的重复状态无需重复计算。因此我们把 \([l,r]\) 所代表的字符串直接压进状态,记搜转移即可。实际有效的状态数不多,可以通过。

Code
#include<bits/stdc++.h>
#define il inline
using namespace std;
il long long read()
{
    long long xr=0,F=1; char cr;
    while(cr=getchar(),cr<'0'||cr>'9') if(cr=='-') F=-1;
    while(cr>='0'&&cr<='9')
        xr=(xr<<3)+(xr<<1)+(cr^48),cr=getchar();
    return xr*F;
}
#define int long long
const int N=105,mod=998244353;
int n;
string s;
map<string,int> f,g;
int F(string s);
int G(string s)
{
    if(g.count(s)) return g[s];
    if(s=="0") return 1; else if(s=="1") return 2;
    int res=0;
    for(int d=1;d<s.size();d++)
    {
        if(s.size()%d) continue;
        string t;
        for(int i=0;i<d;i++)
        {
            bool flag=1;
            for(int j=i;j<s.size();j+=d) if(s[j]!='1') flag=0;
            t+=flag+'0';
        }
        res=(res+F(t))%mod;
    }
    return g[s]=res;
}
int F(string s)
{
    if(f.count(s)) return f[s];
    int res=G(s);
    for(int i=1;i<s.size();i++)
    {
        (res+=G(s.substr(0,i))*F(s.substr(i,s.size()-i+1))%mod)%=mod;
    }
    return f[s]=res;
}
signed main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>s;
    printf("%lld\n",F(s));
    return 0;
}

标签:return,int,AGC,mid,long,039,020,cr,check
From: https://www.cnblogs.com/ying-xue/p/AGC020-039.html

相关文章

  • Jupyter Notebook报错'500 : Internal Server Error'的解决方法
    问题根因Jupyter相关的软件包版本匹配存在问题,或者历史上安装过Jupyter相关的配套软件但是有残留。大部分网上的博客都是推荐用pip重装jupyter或者nbconvert,亲测无法解决该问题。解决方案按照指定的匹配版本,全部重装ipython、jupyter和notebook等软件,目前来说,另一篇博客中推荐......
  • Apache Spark 认证绕过漏洞(CVE-2020-9480)研究
    一、ApacheSpark简介Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含Spa......
  • 在wsl中运行'./Allrun.sh'时报错:$'\r': command not found
    在Windows下编写好sh文件后,在Linux下或者wsl中运行会报错: line2:$'\r':commandnotfound 这是因为Windows系统的文件换行使用的是 \r\n ,而Unix系统是\n问题解决:dos2unixAllrun.shdos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的......
  • AGC054D (ox)
    有点厉害题。对于括号序列和序列上邻项交换的问题的处理有一些启发。首先考虑如果没有ox怎么样。容易发现,我们从前往后记录左括号与右括号的个数差,这个差值一旦为负就立刻从后面提一个右括号过来(一路交换过来),这个做法一定是最优的,并且是唯一最优的操作方法。这样理解比较感性,实......
  • 如何禁止type='number'的input框输入字母e
    很多时候input设置了type="number"还是能输入字母e,那么如何禁止呢?1.例如input框为<el-inputtype="number"v-model=""@keydown.native="keyInput"placeholder="请输入数字"></el-input>2.写方法//去除number输入框内ekeyInput(e){letkey=......
  • 板刷 AGC
    从AGC001A开始。[AGC001A]BBQEasy显然排序后所有奇数位相加即为答案。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>usingnamespacestd;constintN=205;intn,a[N];......
  • 鸿蒙原生应用/元服务开发-AGC分发如何编译打包应用
    软件包规范在正式打包应用前,请确保已了解HarmonyOS应用软件包规范。操作步骤1.打开DevEcoStudio,菜单选择“Build>BuildHap(s)/APP(s)>BuildAPP(s)”。2.等待编译构建。编译完成后,将在工程目录“build>outputs>default”目录下,获取可用于发布的应用包。APIVersion4至7......
  • 刷机 pixel3 xl 报错,remote: 'Could not open super partition'解决。
    问题一:PartitionshouldbeflashedinfastbootdFAILED(remote:Partitionshouldbeflashedinfastbootd)解决:升级到fastbootversion34.0.5-10900879版本后发现可以使用。(建议升级至fastbootversion33.0.1-8253317)但是遇到了问题二:问题二:Couldnotopensuperpart......
  • 记录一次 maven 子模块相互依赖导致的父模块无法动态升级的问题 'parent.relativePath
        项目里面使用的commons公共模块,每次更改后之前都不会升级其版本号,导致当commons改动后,其他服务在不知道的情况下,会出现文件缺失。由于之前commons下面有12个公共子模块,所以之前一直没有升级commons模块。为了方便,于是决定每次更改commons模块后让所有的子项目都跟着升......
  • 解决UnboundLocalError: local variable 'time' referenced before assignment
    解决UnboundLocalError:localvariable'time'referencedbeforeassignment介绍在Python开发中,经常会遇到UnboundLocalError:localvariable'xxx'referencedbeforeassignment的错误。这个错误通常发生在在一个函数内部,尝试访问一个在函数内定义的局部变量之前。这篇文章将......