首页 > 其他分享 >Codeforces Round 868 (Div. 2) A-D

Codeforces Round 868 (Div. 2) A-D

时间:2023-05-17 22:12:30浏览次数:55  
标签:868 No int void Codeforces read ans Div

Codeforces Round 868 (Div. 2)

 

A. A-characteristic

int fac[N];
map<int,int>mp;
void init(){
    fac[1]=0;
    mp[0]=1;
    for(int i=2;i<N;i++){
        fac[i]=fac[i-1]+(i-1); 
        mp[fac[i]]=i; 
    }
}
void solve(){
    int n=read(),k=read(),ans=-1;
    for(int i=0;i<=n;i++){
            if(fac[i]+fac[n-i]==k){
                ans=i;
                break;
            }
    }
    puts(ans!=-1?"YES":"NO");
    if(ans!=-1){
        for(int i=1;i<=ans;i++){
            cout<<1<<" ";
        }
        for(int i=1;i<=n-ans;i++){
            cout<<-1<<" ";
        }
        cout<<'\n';
    }
}

 

B. Sort with Step

int a[N];
void solve(){
    int n=read(),k=read();
    int cnt=0;
    for(int i=1;i<=n;i++){
        a[i]=read(); 
        if(abs(a[i]-i)%k)cnt++;   
    }
    if(cnt==0)cout<<0<<'\n';
    else if(cnt==2)cout<<1<<'\n';
    else cout<<-1<<'\n';
    //puts(ans>0?"YES":"NO");
    //puts(ans>0?"Yes":"No");
}

 

C. Strongly Composite

map<int ,int >mp;
void divide(int x){
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0){
            int s = 0;
            while (x % i == 0) x /= i, s ++ ;
            mp[i]+=s;
        }
    if (x > 1) mp[x]++;
}
void solve(){
    mp.clear();
    int n=read();
    for(int i=1;i<=n;i++){
        int x=read();
        divide(x);
    }
    int ans=0,sig=0;
    for(auto i=mp.begin();i!=mp.end();i++){
        ans+=i->second/2;
        sig+=i->second%2;
    }
    if(ans<=0&&sig<3)cout<<0<<'\n';
    else cout<<ans+sig/3<<'\n';
    //puts(ans>0?"YES":"NO");
    //puts(ans>0?"Yes":"No");
}

 

D. Unique Palindromes

字符串构造题 主要抓住一个k的值很小 小于字母数量

首先明确一点 n个位置可以构成最多n个回文字串 例如n个a就可以完成n个回文字串

先构造一个“xyz”,如果后来需要新的回文字串就用重复的字母解决,在后面补上xyz

注意,补位的xyz也需要按顺序计数输出 否则过不了题中的倒数第二个样例

int x[N],c[N];
void solve(){
    int n=read(),q=read();
    for(int i=1;i<=q;i++){
        x[i]=read();
    }
    for(int i=1;i<=q;i++){
        c[i]=read();
    }
    string s="xyz";
    int now=0;
    x[0]=3;c[0]=3;
    x[q+1]=n;c[q+1]=c[q];
    for(int i=1;i<=q+1;i++){
        int len=x[i]-x[i-1];
        int par=c[i]-c[i-1];
        if(len<par){
            cout<<"NO\n";
            return ;
        }else {
            s+=string(par,'a'-1+i);
            for(int i=1;i<=len-par;i++){
                s+=s[now];
                now=(now+1)%3;
            }
        }
    }
    cout<<"YES\n";
    cout<<s<<'\n';
    //puts(ans>0?"YES":"NO");
    //puts(ans>0?"Yes":"No");
}

 

标签:868,No,int,void,Codeforces,read,ans,Div
From: https://www.cnblogs.com/edgrass/p/17410497.html

相关文章

  • Codeforces Round 873 (Div. 2)
    CodeforcesRound873(Div.2)链接CodeforcesRound873(Div.2)A题打印2-n并且计算总和,然后找到严格大于sum的n的倍数记为x,然后用这个x减去sum得到a.然后先打印a然后再打印2-n#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include......
  • Codeforces Round 767 (Div. 1) E. Groceries in Meteor Town (Kruskal重构树 + 线段
    传送门  出现最大路径权值就应该联想到克鲁斯卡尔重构树,我们对于克鲁斯卡尔重构树求一遍dfs序,维护所有白色点的最大最小dfn(包括出发点),求出最大最小dfn的最近公共祖先既是答案。注意需要特判一下除了本身以外没有白色点情况。#include<bits/stdc++.h>intn,m;constintN......
  • Codeforces Round 873 A~E
    CodeforcesRound873(Div.1)A.CountingOrders对于每个\(a_i\),可以计算出\(c_i\)表示有多少个\(b_j\lta_i\)。那么第\(i\)个人就有\(c_i\)种可能的位置。注意到如果将\(a\)升序排序,则能放的位置集合从前往后是包含的关系。所以将\(a\)排序(等价于将\(c\)排序......
  • DIV 随着滚动条 移动
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>codeby:haiw......
  • Educational Codeforces Round 148 (Rated for Div. 2) A-D2
    EducationalCodeforcesRound148(RatedforDiv.2) A.NewPalindromemap<int,int>mp;voidsolve(){strings;mp.clear();cin>>s;for(inti=0;i<s.size()/2;i++){mp[s[i]]++;}puts(mp.size()>=2?"YES......
  • CodeForces 1827 D Two Centroids
    洛谷传送门CF传送门考虑固定一个重心,设\(k\)为重心最大子树大小,答案为\(n-2k\)。构造方法是往最大的子树塞叶子。树的重心有一个很好的性质,就是加一个叶子,重心最多移动一条边的距离。简单证一下,设重心为\(x\),往儿子\(u\)的子树中加叶子。如果\(sz_u>\left\lfloor......
  • CodeForces 1827 B Range Sorting
    洛谷传送门CF传送门考虑拆贡献\(i-1\simi\),发现当\([1,i-1]\)的最大值大于\([i,n]\)的最小值时\(i-1\simi\)产生\(1\)的贡献。考虑枚举左端点\(j\),设\(x=\max\limits_{k=j}^{i-1}a_k\)。设\(i\)及\(i\)以后第一个\(<x\)的数位置是\(p\),那么......
  • Codeforces 1158E - Strange device(交互)
    一个有点烦的\(8\logn\)的做法。大致想法大家都一样:以\(1\)为根,然后先问出每个点深度,再问出每个点的父亲。首先先用一个log的做法问出树高,具体做法是直接令根节点的\(f\)为二分出的\(mid\),看能否覆盖所有点即可,记最大深度为\(mxdep\)。可以在二分过程中顺带着求出深......
  • Codeforces 1423C - Dušan's Railway(树分块)
    首先\(k>3\)当\(k=3\)做,也就是说题目等价于找不超过\(10n\)条路径使得任意两点间的路径都可以表示为选定的这些路径中不相交的三者的并。先考虑链怎么做,关于这个\(3\),很自然的想法是取若干关键点,关键点之间两两连边,其余点再像相邻两关键点连边,因此考虑分块,每\(B\)个点设......
  • Codeforces Round 873 (Div. 2)
    CodeforcesRound873(Div.2)A-DivisibleArray思路:每个数为i时都为i的倍数,前n个数和为Sn=n*(n+1)/2,可知每个数再乘n,Sn必为n的倍数#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;typedefpair<string,int>PSI;constintN=3e5+5,INF=0x3f3f3f3......