codeforces round 948 div2(a,b,c)

题目链接

A

复制代码
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

void solve()
{
    int n,m;cin>>n>>m;
    if(n&1){
        if((m&1)&&m>=1&&m<=n)cout<<"YES"<<'\n';
        else cout<<"NO"<<'\n';
    }else{
        if((m%2==0)&&m>=0&&m<=n)cout<<"YES"<<'\n';
        else cout<<"NO"<<'\n';
    }
}

signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

B

题目概述

给定正整数 x x x,构造满足以下条件的数列

思路

如果没有"相邻两个元素不同时为非零数",就变成了写出 x x x的二进制表示

而二进制表示与最终的答案相差在哪?在于二进制表示有连续的 1 1 1上,我们想要用什么代替连续的 1 1 1

经过写几个例子发现,几个连续的二进制 1 1 1可以转换为首位的 − 1 -1 −1和末位置 + 1 +1 +1的 1 1 1,如图

ACcode

复制代码
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

void solve()
{
    int x;cin>>x;
    vector<int>a(35,0);
    for(int i=0;i<32;i++){ 
        a[i]=x>>i&1;//位移运算存储二进制表示
    }
    for(int i=0;i+1<32;i++){
        if(a[i]==1&&a[i+1]==1){
            int j=i;
            while(a[j]==1&&a[j+1]==1)j++;
            a[i]=-1;
            a[j+1]=1;
            for(int k=i+1;k<=j;k++)a[k]=0;
            i=j;
        }
    }
    cout<<32<<'\n';
    for(int i=0;i<32;i++)cout<<a[i]<<' ';
    cout<<'\n';
}

signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

C

题目大意

给定 n n n个正整数的数组 a a a,定义特殊子序列为该子序列的最小公倍数不在 a a a内,问 a a a的最长特殊子序列的长度

思路

如果最大元素 m a ma ma不能整除其他元素,则为 n n n

否则,最长的 l c m lcm lcm一定是 m a ma ma的约数,遍历约数筛最大即可

ACcode

复制代码
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

void solve()
{
    int n;cin>>n;
    vector<int>a(n+1);
    int ma=-1;
    for(int i=1;i<=n;i++)cin>>a[i],ma=max(ma,a[i]);
    for(int i=1;i<=n;i++){
        if(ma%a[i]){
            cout<<n<<'\n';
            return;
        }
    }

    //最长lcm必为ma约数
    int ans=0;
    auto check=[&](int x){
        for(int i=1;i<=n;i++)if(a[i]==x)return;
        int t,cnt;
        cnt=0;
        t=1;
        for(int i=1;i<=n;i++){
            if(x%a[i]==0){
                cnt++;
                t=lcm(t,a[i]);
            }
        }
        if(t==x)ans=max(ans,cnt);
    };
    for(int i=1;i*i<=ma;i++){
        if(ma%i==0){
            check(i);
            check(ma/i);
        }
    }
    cout<<ans<<'\n';
}

signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
相关推荐
Code-keys5 分钟前
Android Codec2 Filter 算法模块开发指南
android·算法·音视频·视频编解码
无忧智库17 分钟前
低空经济新基建:构建低空飞行大数据中心与行业应用算法工厂的全景式蓝图(WORD)
算法
赵侃侃爱分享27 分钟前
学完Python第一次写程序写了这个简单的计算器
开发语言·python
断眉的派大星41 分钟前
# Python 魔术方法(魔法方法)超详细讲解
开发语言·python
2501_933329551 小时前
技术深度拆解:Infoseek舆情处置系统的全链路架构与核心实现
开发语言·人工智能·自然语言处理·架构
妮妮喔妮1 小时前
supabase的webhook报错
开发语言·前端·javascript
我的xiaodoujiao1 小时前
API 接口自动化测试详细图文教程学习系列11--Requests模块3--测试练习
开发语言·python·学习·测试工具·pytest
闻缺陷则喜何志丹1 小时前
【背包 组合】P7552 [COCI 2020/2021 #6] Anagramistica|普及+
c++·算法·背包·洛谷·组合
xiaoye-duck1 小时前
【C++:C++11】C++11新特性深度解析:从类新功能、Lambda表达式到包装器实战
开发语言·c++·c++11
qq_12084093711 小时前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机