AtCoder Beginner Contest 347(A~D)

A - Divisible

如果序列里面的数能被k整除,就整除后输出

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int n,k;
    cin>>n>>k;

    int a[n+1];
    per(i,1,n)cin>>a[i];

    per(i,1,n){
        if(a[i]%k==0){
            cout<<a[i]/k<<" ";
        }
    }
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

B - Substring

串S,有几个不同的子串,暴力枚举。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    string s;
    cin>>s;

    map<string,bool>f;

    per(len,1,s.length()){
        per(i,0,s.length()-1){
            if(i+len<=s.length())
            f[s.substr(i,len)]=true;
        }
    }

    cout<<f.size();
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

C - Ideal Holidays

A假期,B工作日,A假期,B工作日,这么轮回。

问N个plan是否能全部都在假期里面。

因为plan是afterday,所以plan序列是固定的,我们只需要左右移动这个序列,看是否能恰好嵌入到假期里面。

所以把plan1令为a的第一天,那么我们现在可以向右移动a-1天,接下来分类讨论即可。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int n,a,b;
    cin>>n>>a>>b;

    int d[n+1];
    per(i,1,n)cin>>d[i];

    rep(i,n,2)d[i]-=d[i-1];

    int r=a-1;

    int now=1;
    per(i,2,n){
        now+=d[i];
        if(now>a+b){
            if(now%(a+b)==0)now=a+b;
            else now%=a+b;
        }

        if(now>=a+1 and now<=a+b){//如果在这里面,我们需要往右移动到a=1
            if(r>=a+b-now+1){
                r-=a+b-now+1;//r由最小的决定,所以这里只需要减掉
                now=1;
            }else{
                cout<<"No";
                return;
            }
        }else{
            r=min(r,a-now);//如果落在同一个里面,取最小值
        }
    }
    cout<<"Yes";
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

补题:D - Popcount and XOR 

输出任意一组X,Y

满足以上条件。

假设C=13,即二进制

1110,因为要求异或后相等,所以C上是1的地方,一定是1 xor 0,即X那个位是1 y那个位是0,反之亦可。

如果C上是0,考虑X和Y那一位都是1,或者都是0。

所以我们先把C上是1的地方放好1,0,并且交替使用a和b,让a和b最终使用之后能相等,这样最后异或才会不影响答案,如果a!=b,最终答案一定不会等于C。

如果a,b还有剩,我们就往高位放1,不影响答案(注意放的位数超过61了就超出题目范围了,需要判断特殊情况)

那么答案就呼之欲出了(正常数学做可能没这么麻烦,本蒟蒻只会模拟)

需要注意的是不要在运算式中使用pow函数,请调用计算结果(这里建议直接使用位运算)。

如 int a=pow(2,60),int ans=a,cout<<a

如果直接使用 cout<<pow(2,60),会造成错误。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

int popcount(int x){
    int cnt=0;
    while(x)cnt+=x&1,x>>=1;
    return cnt;
}

void solve(){
    int a,b,c;
    cin>>a>>b>>c;


    //x xor y =C

    //位不一样输出1,一样输出0

    //x,只有a个1
    //y,只有b个1

    //
    //
    //0111

    stack<int>s;
    if(c==0)s.push(0);
    while(c){
        s.push(c%2);
        c>>=1;
    }

    deque<int>x,y;

    while(s.size()){
        int now=s.top();
        s.pop();

        if(now==1){
            if(b>=a){
                if(b==0){
                    cout<<-1;
                    return;
                }
                b--;
                x.push_back(0);
                y.push_back(1);
            }else{
                if(a==0){
                    cout<<-1;
                    return;
                }
                a--;
                x.push_back(1);
                y.push_back(0);
            }
        }else{//now=0
            //放两个1或者两个0

            x.push_back(-1);
            y.push_back(-1);//暂定
        }
    }

//    for(auto i:x){
//        cout<<i;
//    }cout<<endl;
//    for(auto i:y){
//        cout<<i;
//    }cout<<endl;

    deque<int>newx,newy;

    int ansx=0,ansy=0,cnt=0;
    if(a+b){//a+b还有剩余 1
        if(a!=b){//不相同无解
            cout<<-1;
            return;
        }

        int cul=a;//有cul个位需要放1

        per(i,0,x.size()-1){
            if(x[i]==-1){
                if(cul){
                    cul--;
                    newx.push_back(1);
                    newy.push_back(1);
                }else{
                    newx.push_back(0);
                    newy.push_back(0);
                }
            }else{
                newx.push_back(x[i]);
                newy.push_back(y[i]);
            }
        }

        while(cul){
            cul--;
            newx.push_front(1);
            newy.push_front(1);
        }
    }else{
        //暂定全部用0
        per(i,0,x.size()-1){
            if(x[i]==-1){
                newx.push_back(0);
                newy.push_back(0);
            }else{
                newx.push_back(x[i]);
                newy.push_back(y[i]);
            }
        }
    }

//    for(auto i:newx){
//        cout<<i;
//    }cout<<endl;
//    for(auto i:newy){
//        cout<<i;
//    }cout<<endl;

//10
if(newx.size()>60){
    cout<<-1;
    return;
}

cnt=1;

    rep(i,newx.size()-1,0){//0~59
        ansx+=newx[i]*cnt;
        ansy+=newy[i]*cnt;
        cnt*=2;
    }

//cout<<popcount(ansx)<<" "<<popcount(ansy)<<endl;

    cout<<ansx<<" "<<ansy;
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android ImageView 的scaleType 属性图解

目录 前言测试素材测试布局xmlscaleType前言 一、ScaleType.FIT_CENTER 默认二、ScaleType.FIT_START三、ScaleType.FIT_END四、ScaleType.FIT_XY五、ScaleType.CENTER六、ScaleType.CENTER_CROP七、ScaleType.CENTER_INSIDE八、ScaleType.MATRIX 前言 原文链接&#xff1a; A…

macOS搭建php环境以及调试Symfony

macOS搭建php环境以及调试Symfony macOS搭建php环境以及调试Symfony 古老的传说运行环境快速前置安装环境 php 的安装安装 Xdebug 来调试 php如何找到你的 php.iniXdebug 安装成功 创建并调试的 Hello world 安装 PHP Debug 安装 Symfony 安装 Composer安装 Symfony CLI 创建 …

tcpdump + wireshark 服务器抓包分析

tcpdump wireshark 服务器抓包分析 1.tcpdump安装2.tcpdump使用3.安装wireshark4.使用wireshark 本文用以总结使用tcpdump进行抓包&#xff0c;然后使用wireshark工具打开抓包出来的pacp文件进行分析。通过tcpdump可以实时监控到linux服务器中tcp和http、https等通讯的内容和信…

HarmonyOS 应用开发之FA模型访问Stage模型DataShareExtensionAbility

概述 无论FA模型还是Stage模型&#xff0c;数据读写功能都包含客户端和服务端两部分。 FA模型中&#xff0c;客户端是由DataAbilityHelper提供对外接口&#xff0c;服务端是由DataAbility提供数据库的读写服务。 Stage模型中&#xff0c;客户端是由DataShareHelper提供对外接…

【重学C语言】二、C语言简介和开发工具

【重学C语言】二、C语言简介和开发工具 C语言发展史C语言标准变迁C语言特点开发软件CLion安装步骤 VIsual Studio安装步骤 Clion 和 VS2022 绑定 VS 项目创建项目 Clion 项目(本博主主用)创建项目Clion 配置 构建类型构建模式 C语言发展史 1970年&#xff0c;美国 AT&T 公…

leetcode.209.长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3] 输出&#…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载&#xff08;点击下方官网链接&#xff09; Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载&#xff0c;我下的是jdk 11&#xff0c;JDK有安装版和解压版&#xff0c;我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

设计模式10--适配器模式

定义 案例一 案例二 优缺点

稀碎从零算法笔记Day34-LeetCode:最小栈

感谢耶稣&#xff0c;笔者又过了一天“复活节”。月末斩杀一道Hard画上句号 题型&#xff1a;栈、模拟数据结构 链接&#xff1a;155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 设计一个支持 push &#xff0c;pop &#xff0c;…

「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K

C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是&#xff08;&#xff09;。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…

阿里云轻量应用服务器优惠价格表,61元和165元一年

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表&#xff0c;轻量2核2G3M带宽61元一年&#xff0c;轻量2核4G4M带宽165元1年&#xff0c;均不限制月流量&#xff0c;阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xff1a; 阿里云轻量应用服务器价格 61元/年…

线程池详解、核心参数、拒绝策略

什么是线程池 线程池是一种池化技术&#xff0c;它预先创建一组线程&#xff0c;用于执行异步任务。当有新任务到来时&#xff0c;线程池可以立即分配一个线程来处理&#xff0c;而不需要临时创建。这样可以减少因为频繁创建和销毁线程而导致的开销。 线程池的应用场景 高并…

C++中使用虚函数实现多态

虚函数是C中用于实现多态&#xff08;Polymorphism&#xff09;的重要特性。下面是关于虚函数的讲解和代码示例&#xff1a;### 虚函数的定义&#xff1a; 虚函数是在基类中声明为 virtual 的成员函数。 在派生类中重写&#xff08;override&#xff09;这个虚函数&#xff0c;…

C语言分支循环探秘:解锁编程逻辑的无限可能 篇章1

目录 1.if语句 2.关系操作符 3.条件操作符 4.逻辑操作符&#xff1a;&&&#xff0c;||&#xff0c;&#xff01; 5.switch语句 6.while循环 7.for循环 8.do-while循环 9.break和continue语句 10.循环的嵌套 11.goto 导入 C语言是结构化的程序设计语言&…

STM32 | PWM脉冲宽度调制(第五天按键中断,控制电机正/反转、加速、减速、暂停与继续源码解析)

​ STM32 | PWM脉冲宽度调制(第五天)STM32 | PWM脉冲宽度调制(第五天呼吸灯源码解析)STM32 | PWM脉冲宽度调制(第五天电机速度控制源码解析)PWM 技术在以下其他机器学习领域和应用中也可以发挥作用: 自然语言处理 (NLP):调节文本生成模型(例如 GPT-3)的输出长度和多样…

简明Pytorch分布式训练 — DistributedDataParallel 实践

上一次的Pytorch单机多卡训练主要介绍了Pytorch里分布式训练的基本原理&#xff0c;DP和DDP的大致过程&#xff0c;以及二者的区别&#xff0c;并分别写了一个小样作为参考。小样毕竟还是忽略了很多细节和工程实践时的一些处理方式的。实践出真知&#xff0c;今天&#xff08;简…

微服务(基础篇-007-RabbitMQ)

目录 初识MQ(1) 同步通讯&#xff08;1.1&#xff09; 异步通讯&#xff08;1.2&#xff09; MQ常见框架&#xff08;1.3&#xff09; RabbitMQ快速入门(2) RabbitMQ概述和安装&#xff08;2.1&#xff09; 常见消息模型&#xff08;2.2&#xff09; 快速入门&#xff…

YARN集群 和 MapReduce 原理及应用

YARN集群模式 本文内容需要基于 Hadoop 集群搭建完成的基础上来实现 如果没有搭建&#xff0c;请先按上一篇: <Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤> 搭建&#xff1a;https://mp.weixin.qq.com/s/zPYsUexHKsdFax2XeyRdnA 配置hadoop安装目录下的 etc…

docker 部署 nali 开源 IP 地理信息归属查询软件

前言 早前用到一个小巧开源的 IP 归属地查询软件&#xff0c;官方提供了 Dockerfile&#xff0c;使用了一段时间觉得还不错&#xff0c;非常简单便捷。 部署 docker 启动 由于该项目会在首次启动自动下载 IP 数据库,所以最好通过挂载目录的方式,将数据库目录挂在到本地,避免…

代码随想录 Day24 理论基础 77. 组合

理论基础 1. 回溯是配合递归算法进行使用的&#xff0c;一般是在递归的下面。回溯的算法是一种暴力的算法&#xff0c;虽然效率并不高&#xff0c;但是常常使用。因为很多时候使用多层for&#xff08;因为层数实在是套多了&#xff09;也不能将题目解答&#xff0c;这个时候就…