首页 > 其他分享 >Codeforces Round 891 (Div. 3)

Codeforces Round 891 (Div. 3)

时间:2023-08-08 19:12:06浏览次数:43  
标签:891 typedef return int res Codeforces long Div define

Codeforces Round 891 (Div. 3)

A - Array Coloring

思路:需要两部分的奇偶相同,判断奇数的个数是否为偶数即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=2e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const double eps=1e-6;

int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1)res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
int c(int a,int b){
    if(b>a)return 0;
    int res=1;
    for(int i=1,j=a;i<=b;++i,--j){
        res=res*j%mod;
        res=res*ksm(i,mod-2)%mod;
    }
    return res;
}
int Lucas(int a,int b){
    if(a<mod&&b<mod)return c(a,b);
    return c(a%mod,b%mod)*Lucas(a/mod,b/mod)%mod;
}
void init(){

}

void solve(){
    int n;cin>>n;
    vector<int>ve(n);
    int cnt=0;
    for(int i=0;i<n;++i){
        cin>>ve[i];
        if(ve[i]%2)cnt++;
    }
    if(cnt%2==0)cout<<"YES\n";
    else cout<<"NO\n";
    return;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    init();
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

B - Maximum Rounding

思路:找到第一个大于4的数,给前面最后一个小于4的数加一,之后的数全为0

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=2e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const double eps=1e-6;

int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1)res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
int c(int a,int b){
    if(b>a)return 0;
    int res=1;
    for(int i=1,j=a;i<=b;++i,--j){
        res=res*j%mod;
        res=res*ksm(i,mod-2)%mod;
    }
    return res;
}
int Lucas(int a,int b){
    if(a<mod&&b<mod)return c(a,b);
    return c(a%mod,b%mod)*Lucas(a/mod,b/mod)%mod;
}
void init(){

}

void solve(){
    string s;
    cin>>s;
    for(int i=0;i<s.size();++i){
        if(s[i]>='5'){
            while(i>0&&s[i-1]>='4')i--;
            for(int j=i;j<s.size();++j)s[j]='0';
            if(i)s[i-1]++;
            else s.insert(s.begin(),'1');
            break;
        }
    }
    cout<<s<<'\n';
    return;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    init();
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

C - Assembly via Minimums

思路1:对于原数组a,将其从小到大排序后,可以发现b数组中出现a的个数为 (n-1)~1;那么将b从小到大排序后,按个数取依次放到a中去

思路2:按从大到小统计所有的b及其出现的个数,枚举去重后的所有b,cnti为bi的个数,pre表示a中大于bi的个数,令a中bi的个数为x,那么会有pre*x+x*(x-1)/2个bi在b中,可以二分找到满足条件的x。

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=5e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353,M=44750;
const int inf=0x3f3f3f3f3f3f;
const double eps=1e-6;


void solve(){
    int n,m;cin>>n;
    m=n*(n-1)/2;
    vector<int>ve(m);
    for(int i=0;i<m;++i)cin>>ve[i];
    sort(ve.begin(),ve.end());
    for(int i=1,j=0;i<=n;++i){
        cout<<ve[j]<<' ';
        j+=n-i;
        j=min(j,m-1);
    }
    cout<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
View Code1
#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=2e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const double eps=1e-6;

int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1)res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
int c(int a,int b){
    if(b>a)return 0;
    int res=1;
    for(int i=1,j=a;i<=b;++i,--j){
        res=res*j%mod;
        res=res*ksm(i,mod-2)%mod;
    }
    return res;
}
int Lucas(int a,int b){
    if(a<mod&&b<mod)return c(a,b);
    return c(a%mod,b%mod)*Lucas(a/mod,b/mod)%mod;
}
void init(){

}
map<int,int>mp;
void solve(){
    int n;cin>>n;
    mp.clear();
    for(int i=0,u;i<(n*(n-1)/2);++i){
        cin>>u;
        mp[u]++;
    }
    vector<PII>g(mp.size());
    int idx=mp.size()-1;
    for(auto v:mp)g[idx--]={v.first,v.second};
    vector<int>ans(mp.size(),0);
    for(int i=0,pre=0;i<mp.size();++i){
        int c=g[i].second;
        int l=1,r=1e3,x;
        while(l<=r){
            int mid=l+r>>1;
            if((pre*mid+mid*(mid-1)/2)>=c)r=mid-1,x=mid;
            else l=mid+1;
        }
        ans[i]=x;
        pre+=x;
    }
    for(int i=0;i<mp.size();++i){
        while(ans[i]--)cout<<g[i].first<<' ';
    }cout<<'\n';
    return;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    init();
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code2

 

D - Strong Vertices

思路:找出等于最大值的

 

E - Power of Points

思路:对于每个s,求的是所有x到s的距离和,二分找到s的位置,前缀和求大于和小于等于s的值,对s求距离即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=2e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const double eps=1e-6;

int ksm(int x,int y){
    int res=1;
    while(y){
        if(y&1)res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
int c(int a,int b){
    if(b>a)return 0;
    int res=1;
    for(int i=1,j=a;i<=b;++i,--j){
        res=res*j%mod;
        res=res*ksm(i,mod-2)%mod;
    }
    return res;
}
int Lucas(int a,int b){
    if(a<mod&&b<mod)return c(a,b);
    return c(a%mod,b%mod)*Lucas(a/mod,b/mod)%mod;
}
void init(){

}

void solve(){
    int n;cin>>n;
    vector<PII>ve(n+1);
    vector<int>sum(n+1,0),ans(n+1);
    for(int i=1;i<=n;++i)cin>>ve[i].first,ve[i].second=i;
    sort(ve.begin()+1,ve.end());
    for(int i=1;i<=n;++i)sum[i]=sum[i-1]+ve[i].first;
    for(int i=1;i<=n;++i){
        int p= lower_bound(ve.begin()+1,ve.end(),ve[i])-ve.begin();
        int l=sum[p],r=sum[n]-sum[p],cl=p,cr=n-p;
        int s=0;
        if(cl>0)s+=abs(ve[i].first*cl-l)+cl;
        if(cr>0)s+=abs(r-ve[i].first*cr)+cr;
        ans[ve[i].second]=s;
    }
    for(int i=1;i<=n;++i)cout<<ans[i]<<' ';cout<<'\n';
    return;
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    init();
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

F - Sum and Product

思路:由a+b=x,ab=y,可以得出b2-xb+y=0,解方程即可

 

标签:891,typedef,return,int,res,Codeforces,long,Div,define
From: https://www.cnblogs.com/bible-/p/17615167.html

相关文章

  • CodeForces CF1846G 题解
    CodeForcesCF1846G题解CodeForces题目链接洛谷题目链接标准答案是状压之后,转化成Dijkstra算法跑最短路。我这里提供一个不一样的思路。题意简述主人公得了病,有部分类型的症状。所有类型症状共有\(n\)种,用长为\(n\)的01串表示是否有那种症状。共有\(m\)种药,吃......
  • Codeforces 890-891的一些题目的反思
    和atcoder一起出交互题是吧。D题回复逆序对个数,对于[L,R-1]和[L,R],如果R是最大值,那么对逆序对个数无影响。这样来确认某个数是不是最大的,然后递归扩展到整个区间这里看到逆序对,要想到归并排序、分治、递归、区间合并。。。。。查看代码//Problem:D.MoreWrong//Contest......
  • B. Longest Divisors Interval
    link需要思考一下如果这个题能做,那么肯定有一种比较可行的做法。如果\([l,r]\)是可行的,那么就意味着\([1,r-l+1]\)是可行的这是显然的,显然后者的每一个数在前者中必然有对应的倍数,所以等效。这样从1开始找就行了。#include<cstdio>#include<iostream>#include<cstring>#i......
  • vue问题:不存在div或者多个div
    <el-radiov-model="radio"label="1">备选项</el-radio><el-radiov-model="radio"label="2">备选项</el-radio>报错:Errorscompilingtemplate:Componenttemplateshouldcontainexactlyonerootelement.......
  • codeforces 891 (div3)857E - Power of Points
    E.点的力量每个测试限时2秒每个测试限制内存为256兆字节输入以标准格式输入输出以标准格式输出给定n个具有整数坐标x1,…xn的点,这些点位于数线上。对于某个整数s,我们构建段[s,x1],[s,x2],…,[s,xn]。注意,如果xi<s,则段将类似于[xi,s]。段[a,b]覆盖了所有整数点a,a+1,a+2,…,b。......
  • 【CF】#844 div1 T1~T4复健
    高考结束,我的人生即将迈入新的阶段。记得哪位退役学长说的话,尽管努力不够,天赋不足,但走进大学校园,我仍将拾起键盘。所以打了场cf比赛,没想到前几道题都不涉及算法板子,但断断续续做了好几天也才做了四个题。T5终于忍不住找了题解,一看是二分图可惜早已忘光,做不出来。前四道题不涉及......
  • Codeforces 1857D:Strong Vertices 与图论无关的出度最大统计
    1857D.StrongVerticesDescription:给定两个长度均为\(n\)的数组\(a\)和\(b\)(编号\(1\)~\(n\)),如果\(a_u-a_v\geqb_u-b_v\)\((u\neqv)\),那么从\(u\)到\(v\)建立一条有向边。"Strong"定义为:一个点\(V\)可以经过有向图中合法的通路到达其他所有的点。请求解出"......
  • Codeforces Round 891 (Div. 3)
    A.ArrayColoring题意给你\(n(2\len\le50)\)个数,你可以把每个数染成红或蓝,求是否有方案满足每个颜色都有数而且两种颜色每个颜色内所有数之和的奇偶性相同。多组数据\((t\le1000)\)。例如:\([1,2,4,3,2,3,5,4]\)染成\([\color{blue}1,\color{blue}2,\color{red}4,\color{......
  • 滚动到顶div块固定左侧不动
    <scripttype="text/javascript">$(function(){//获取要定位元素距离浏览器顶部的距离varnavH=$(".t_left").offset().top;//滚动条事件$(window).scroll(function(){//获取滚动条的滑动距......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute A-E1
    An=50非常小所以直接暴力枚举枚举每次把某个数以下的全部减完然后看一下是否上升就行 https://codeforces.com/contest/1856/submission/217275334  B题直接贪心前面优先放最小的最后一个放最大的 然后如果重复了就到前面去看能不能调整一下 https://codeforces.......