首页 > 其他分享 >[I]CF With AT

[I]CF With AT

时间:2023-04-02 10:22:15浏览次数:36  
标签:std ch const int CF read while

Educational Codeforces Round 127 (Rated for Div. 2)

A

显然,长度 \(2\) 和 \(3\) 能拼出任意长度字符串,所以无解情况考虑有没有单独的长度为 \(1\) 的即可。

/*

by L1rs1ngzN1sLyr

*/
#include<bits/stdc++.h>
const int AI=1e3+9;
const int KI=1e6+2;
const int CI=1e7+3;
int read(){int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*w;}

int main()
{
    int T=read();
    while(T--)
    {
        std::string a;
        std::cin>>a;
        int cnta=0,cntb=0;
        int flag=1;
        for(int i=0;i<a.size();i++)
        {
            if(a[i]=='a')
            {
                cnta++;
                if(cntb==1)
                {
                    flag=0;
                    break;
                }
                else cntb=0;
            }
            else if(a[i]=='b')
            {
                cntb++;
                if(cnta==1)
                {
                    flag=0;
                    break;
                }
                else cnta=0;
            }
        }
        if(!flag || cnta==1 || cntb==1) std::cout<<"No\n";
        else std::cout<<"Yes\n";
    }
}

B

要变成连续的排列,那么情况就好讨论了。

给出的序列严格递增,所以从左往右扫一遍。

两个相邻的数可以,当且仅当它们差不超过三,差等于三的时候整个序列不能有差为二的且不能有多个差等于三的,差等于二时整个序列不能有两个超过二的。

/*

by L1rs1ngzN1sLyr

*/
#include<bits/stdc++.h>
const int AI=1e3+9;
const int KI=1e6+2;
const int CI=1e7+3;
int read(){int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*w;}
int a[KI];
int main()
{
    int T=read();
    while(T--)
    {
        int n=read(),cnta=0,cntb=0,flag=1;
        for(int i=1;i<=n;i++) a[i]=read();
        for(int i=1;i<n;i++)
        {
            if(a[i+1]-a[i]>3) flag=0;
            else if(a[i+1]-a[i]==3) cntb++;
            else if(a[i+1]-a[i]==2) cnta++;
        }
        if(cnta && cntb) std::cout<<"NO\n";
        else if(!flag) std::cout<<"NO\n";
        else if(cnta>2) std::cout<<"NO\n";
        else if(cntb>1) std::cout<<"NO\n";
        else std::cout<<"YES"<<'\n';
    }
}

C

用前缀和可以做到常数复杂度查询前几个的总价值,所以排序后边枚举买前 \(i\) 个边二分天数判断能买多少即可。

/*

by L1rs1ngzN1sLyr

*/
#include<bits/stdc++.h>
#define int long long
const int AI=1e3+9;
const int KI=1e6+2;
const int CI=1e7+3;
int read(){int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*w;}
int a[KI],s[KI];
signed main()
{
    int T=read();
    while(T--)
    {
        int n=read(),x=read();
        memset(s,0,sizeof s);
        for(int i=1;i<=n;i++) a[i]=read();
        std::sort(a+1,a+n+1);
        for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            int l=-1,r=x+1;
            while(l<r-1)
            {
                int mid=(l+r)>>1;
                if(s[i]+mid*i>x) r=mid;
                else l=mid;
            }
            ans+=l+1;
        }
        std::cout<<ans<<'\n';
    }
}

D

Unsovled.

E

两个子树对答案有贡献,当且仅当他们构成的先序串不同,每个能交换产生贡献的子树对答案贡献显然是 \(2\),统计不同的先序串左右子树即可,答案即为 \(2^{这个数量}\)。

/*

by L1rs1ngzN1sLyr

*/
#include<bits/stdc++.h>
#define int long long
const int AI=1e3+9;
const int KI=1e6+2;
const int CI=1e7+3;
const int mod=0x3b800001;
int read(){int x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*w;}
char a[KI];
std::string b[KI];
int p;
int qsm(int x,int y)
{
    int res=1;
    while(y)
    {
        if(y&1) res=res*x%mod;
        x=x*x%mod,y>>=1;
    }
    return res;
}
void dfs(int u,int m)
{
    if(u*2+1>m)//leaf
    {
        b[u]=a[u];
        return ;
    }
    dfs(u*2,m);
    dfs(u*2+1,m);
    if(b[u*2]!=b[u*2+1]) p++;
    if(b[u*2+1]>b[u*2]) b[u]=a[u]+b[u*2+1]+b[u*2];
    else b[u]=a[u]+b[u*2]+b[u*2+1];
}
signed main()
{
    int n=read();
    std::string s;
    std::cin>>s;
    for(int i=0;i<s.size();i++) a[i+1]=s[i];
    dfs(1,s.size());
    std::cout<<qsm(2,p)%mod;
}

标签:std,ch,const,int,CF,read,while
From: https://www.cnblogs.com/SoN3ri/p/17279999.html

相关文章

  • CF594A Warrior and Archer 题解
    由于本人在思索了很久后才把本题思路打通,所以为了帮助像我一样没有非常理解解法的人,我打算再将解法非常详细地叙述一遍,如果您无法理解解法,请跟着我再一步步将题目捋顺。Step.1解题意题目要求其实很好理解,共给出\(n\)个点的位置,A,B两个人轮流取点,A要求最后剩下的两个点尽量近,B......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)(CF1810)A~D题题解
    今天采用的是新格式。CF1810ABeautifulSequence点击查看原题点击查看思路如果一个数字的值\(v\),不大于当前的位置\(p\),那我们可以通过删除\(p-v\)个数字,使它们两个对应上。比如\([1,7,2,5,3]\)中的\(3\),其数值为\(3\),位置为\(5\),数值\(3\)小于等于\(......
  • cf-div.2-860d
    题目链接:https://codeforces.com/contest/1798/problem/D贪心,比赛时一直搞C没搞出来,回头看D反而更简单。贪心策略:能填正数就填,填不了填负数。大致证明:构造的区间一定呈一个这样的特定区间,正...负正负负...负正....负负,证明一段区间为正且小于给定值易证,下面证最后一段区间的绝......
  • CF1187E
     换根dp#include<iostream>#include<algorithm>#include<cstring>#include<queue>#defineIOSstd::ios::sync_with_stdio(0)usingnamespacestd;#defineintlonglongconstintN=2e5+20;intn,sz[N],f[N],G[N];vector<int>g[......
  • CF453B
    Solution观察范围\(a_i\le30\)比较特殊,于是我们可以试着考虑\(b\)的范围。直觉告诉我们\(b\)不会很大,当\(b_i\le59\)时,有\(|a_i-b_i|\le29\)。当\(b_i>59\)时,\(|a_i-b_i|>29\),但是如果这时我们将\(b_i\)换成\(1\),也是满足互质的,且\(|a_i-b_i|\)可以变得更......
  • PCF8591(A/D,D/A 转换)
    PCF8591芯片介绍PCF8691是具有IIC总线接口的8位A/D及D/A转换器。有4路A/D转换输入,1路D/A模拟输出,具体如下图。标志引脚描述AIN01模拟输入通道1(A/D转换器)AIN12模拟输入通道2(A/D转换器)AIN23模拟输入通道3(A/D转换器)AIN34模拟输......
  • cf-div2-860c
    题目链接:https://codeforces.com/contest/1798/problem/C大致题意:给你一个长度为\(n(n<=2e5)\)的序列的\(a_i,b_i\),让你把这个序列分成数目最少的段,每一段都有一个值\(c\),\(c=a_i的一个约数乘以b_i\)。比赛没写出的题。思路:\(首先一段里面的所有a_i*b_i能够整除c,易得c是所有b的......
  • CF629C题解
    CF629C这里更容易进入且有翻译题意给定长度为\(m\)的仅含(和)的字符串,为其左右补上两个字符串使其达到指定长度\(n\)且合法,需补足字符串合计长度\(n-m\)满足\(n-m\le2000\)。解析字符串合法条件为:左右括号总数相等;从左数起在任意位置上左括号数量不小......
  • Cashback CF940E
    给你一个长度为n的数列a和整数c你需要把它任意分段每一段假设长度为k,就去掉前[k/c](向下取整)小的数最小化剩下的数的和 #include<iostream>#include<algorithm>#include<cstring>#include<queue>#defineIOSstd::ios::sync_with_stdio(0)usingnamespacestd;c......
  • CF1295E Permutation Separation 题解 线段树优化dp
    题目链接:https://codeforces.com/problemset/problem/1295/E题目大意:将排列\(p_1,p_2,\ldots,p_n\)先分成\(p_1,\ldots,p_k\)与\(p_{k+1},\ldots,p_n\)两个......