AtCoder Beginner Contest 044(4/4)

news2025/1/17 15:50:35

Tak and Hotels (ABC Edit)

前k晚花费x,k+1晚以后花费y

AC代码:

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Solve Work = new Solve();
        int T = 1;
        // int T = Integer.parseInt(in.next());
        for (int i = 1; i <= T; i++) {
            Work.main(i, in, out);
        }
        out.close();
    }
    static class Solve {
        public void main(int testNumber, InputReader in, PrintWriter out) {
            int n = in.nextInt(), k = in.nextInt(), x = in.nextInt(), y = in.nextInt();
            int ans = 0;
            if (n >= k) {
                ans = k * x + (n - k) * y;
            } else {
                ans = n * x;
            }
            out.println(ans);
        }
    }
    //IO
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
            return Long.parseLong(next());
        }
        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}

Beautiful Strings

字符串中出现的字符,每种字符的个数为偶数

AC代码:

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Solve Work = new Solve();
        int T = 1;
        // int T = Integer.parseInt(in.next());
        for (int i = 1; i <= T; i++) {
            Work.main(i, in, out);
        }
        out.close();
    }
    static class Solve {
        public void main(int testNumber, InputReader in, PrintWriter out) {
            String s = in.next();
            int len = s.length();
            int[] cnt = new int[26];
            for (int i = 0; i < len; i++) {
                cnt[s.charAt(i) - 'a']++;
            }
            boolean ok = true;
            for (int i = 0; i < 26; i++) {
                if (cnt[i] % 2 == 1) {
                    ok = false;
                    break;
                }
            }
            if (ok) {
                out.println("Yes");
            } else {
                out.println("No");
            }
        }
    }
    //IO
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
            return Long.parseLong(next());
        }
        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}

Tak and Cards

题意是在序列中选择任意个数使得他们的平均数为A的方案数

DP,考虑到尽量不要使用浮点数,那么就将A扩大对应的倍数即可,显然是个01背包问题,这里直接用滚动数组优化后的dp,状态就是前i个里面选j个和为k,其中j<=i,k<= ,因为滚动数组中存的是上一轮状态的解,所以这里要从大到小枚举,可得转移方程dp[j][k]=dp[j][k]+dp[j-1][k-x[i]]

AC代码:

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Solve Work = new Solve();
        int T = 1;
        // int T = Integer.parseInt(in.next());
        for (int i = 1; i <= T; i++) {
            Work.main(i, in, out);
        }
        out.close();
    }
    static class Solve {
        public void main(int testNumber, InputReader in, PrintWriter out) {
            int n = in.nextInt(), A = in.nextInt();
            int[] x = new int[n + 1];
            for (int i = 1; i <= n; i++) {
                x[i] = in.nextInt();
            }
            long[][] dp = new long[(n + 1)][500 * 500 + 10];
            dp[0][0] = 1;
            int sum = 0;
            for (int i = 1; i <= n; i++) {
                sum += x[i];
                for (int j = i; j >= 1; j--) {
                    for (int k = sum; k >= x[i]; k--) {
                        dp[j][k] = dp[j][k] + dp[j - 1][k - x[i]];
                    }
                }
            }
            long ans = 0;
            for (int i = 1; i <= n; i++) {
                ans = ans + dp[i][i * A];
            }
            out.println(ans);
        }
    }
    //IO
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
            return Long.parseLong(next());
        }
        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}

Digit Sum

求最小的b进制,使得在b进制下的n的各位之和为s,如果不存在输出-1

可以观察到当n==s的时候答案为n+1,当n<s时答案为-1

最后讨论当n>s时

当b的最高幂次大于等于2的时候,

进而

所以可以暴力枚举b从[2,],判断是否有满足条件的最小的b

当b的最高幂次小于2的时候,

联立上述两式可得

有了上述公式,可以从大到小枚举,这样相当于从小到大在枚举b,从而可以找到最小的符合条件的b,由于前面已经筛过了b从[2,],这里只需要枚举b从(,n-s],并且可以得到,所以只需要枚举的部分即可

AC代码:

import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Solve Work = new Solve();
        int T = 1;
        // int T = Integer.parseInt(in.next());
        for (int i = 1; i <= T; i++) {
            Work.main(i, in, out);
        }
        out.close();
    }
    static class Solve {
        public void main(int testNumber, InputReader in, PrintWriter out) {
            long n = in.nextLong(), s = in.nextLong();
            long z = (long)Math.sqrt(1.0 * n) + 1;
            for (long i = 2; i <= z; i++) {
                if (check(i, n, s)) {
                    out.println(i);
                    return;
                }
            }
            if (n < s) {
                out.println(-1);
                return;
            }
            if (n == s) {
                out.println(n + 1);
                return;
            }
            long x = n - s, y = x / z + 1;
            for (long i = y; i >= 1; i--) {
                if (x % i == 0 && s - i >= 0 && s - i < x / i + 1 && i < x / i + 1) {
                    out.println(x / i + 1);
                    return;
                }
            }
            out.println(-1);
        }
        public boolean check(long base, long n, long s) {
            long res = 0;
            while (n > 0) {
                res += n % base;
                n /= base;
            }
            if (res == s) {
                return true;
            } else {
                return false;
            }
        }
    }
    //IO
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
            return Long.parseLong(next());
        }
        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }
}

发现一个按照D改编的原题jjgg的难题

AC代码:

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    LL n, s;
    cin >> n >> s;
    if (n < s) {
        cout << "-1\n";
        exit(0);
    }
    if (n == s) {
        cout << n + 1 << '\n';
        exit(0);
    }
    LL ans = 1999999999999LL;
    LL p = n - s;
    function<LL(LL)> check = [&](LL z) {
        z++;
        LL sum = 0, x = n;
        while (x) {
            sum += x % z;
            x /= z;
        }
        return sum;
    };
    for (LL i = 1; i * i <= p; i++) {
        if (p % i == 0) {
            if (check(i) == s) {
                ans = min(ans, i + 1);
            }
            if (check(p / i) == s) {
                ans = min(ans, p / i + 1);
            }
        }
    }
    if (ans != 1999999999999LL) {
        cout << ans << '\n';
    } else {
        cout << "-1\n";
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

喜报 | 迅镭激光荣获2022年度江苏省科学技术奖

1月6日&#xff0c;江苏省科技厅发布了2022年度江苏省科学技术奖综合评审结果公示名单&#xff0c;迅镭激光与江苏师范大学等单位合作的“高功率2微米激光器关键技术及应用”项目&#xff0c;荣获2022年度江苏省科学技术二等奖。 江苏省科学技术奖是省内科技领域最高级别的奖项…

Java 23种设计模式(1.设计模式概念和UML)

1. 设计模式概念 软件设计模式&#xff08;Software Design Pattern&#xff09;&#xff0c;又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 1.1 设计模式学习必要性理由 设计模式的本质是面向对象设计原则的实际运用&#xff0c;是对类的…

2022边缘计算开源项目

在边缘计算社区&#xff0c;统计边缘计算开源项目发展情况&#xff0c;开源软件生态蓬勃发展&#xff0c;边缘计算开源项目又是开源软件生态中不可忽视的重要力量。 2022 年边缘计算领域较为活跃和热门的十个开源项目&#xff1a;KubeEdge、EdgeXFoundry、Akraino、OpenYurt、B…

【UE4 第一人称射击游戏】47-修改AI为僵尸样貌

上一篇&#xff1a;【UE4 第一人称射击游戏】46-蹲高调整本篇效果&#xff1a;将AI修改成了僵尸的模样步骤&#xff1a;可以先从Mixamo网站下载 僵尸 资源&#xff0c;相关教程可以参考这篇文章&#xff1a;UE4 利用Mixamo自动绑骨并导入虚幻4我下载的是这个僵尸资源下载的时候…

【Qt】富文本处理简单介绍

文章目录Qt富文本处理富文本文档结构文本块QTextBlock表格、列表、图片查找功能语法高亮与HTML参考《Qt Creator快速入门(第三版)》。 Qt富文本处理 富文本Rich Text&#xff0c;简单说就是在文档中可以使用多种格式&#xff0c;比如字体颜色、图片和表格等&#xff0c;是与纯…

给定一个有序数组arr,代表坐落在X轴上的点 给定一个正数K,代表绳子的长度 返回绳子最多压中几个点? 即使绳子边缘处盖住点也算盖住

目录暴力求解贪心二分法滑动窗口对数器测试题目&#xff1a; 给定一个有序数组arr&#xff0c;代表坐落在X轴上的点 给定一个正数K&#xff0c;代表绳子的长度 返回绳子最多压中几个点&#xff1f; 即使绳子边缘处盖住点也算盖住 这道题有三个解决方案 暴力求解 //暴力求解O(N…

Docker容器MySQL数据库的备份与还原,以及每天定时自动备份.

1.快速启动mysql容器 1&#xff1a;拉取mysql镜像&#xff1a; 根据自己需要&#xff0c;我这个是5.7版本的镜像。 docker pull nanlist/mysql:5.72&#xff1a;宿主机建立挂载目录&#xff1a; mkdir三个文件夹&#xff0c;方便持久化。 /home/mysql/conf /home/mysql/log…

java面试资料(二)

这里写目录标题Spring什么是 Spring Framework&#xff1f;列举 Spring Framework 的优点。Spring Framework 有哪些不同的功能&#xff1f;Spring Framework 中有多少个模块&#xff0c;它们分别是什么&#xff1f;什么是 Spring 配置文件&#xff1f;Spring 应用程序有哪些不…

MySQL数据同步ES的4种方法,你能想到几种?

大家好&#xff0c;我是老三&#xff0c;这期给大家分享一个电商中常见的场景——MySQL数据同步Elasticsearch。 大家应该都在各种电商网站检索过商品&#xff0c;那么检索商品一般都是通过什么实现呢&#xff1f;搜索引擎Elasticsearch。 那么问题来了&#xff0c;商品上架&a…

【布隆过滤器】如何防止缓存穿透、海量邮箱的垃圾邮件过滤等问题?

目录 一、布隆过滤器是什么&#xff1f; 二、布隆过滤器的模拟实现 2.1、模拟实现 2.2、布隆过滤器的优点和缺点 优点&#xff1a; 缺点&#xff1a; 2.3、布隆过滤器的删除功能 2.4、布隆过滤器的使用场景 一、布隆过滤器是什么&#xff1f; 它是一种概率型数据结构&am…

敏捷.概念辨析

第一部分 1. 最小可行产品MVP&#xff08;Minimum Viable Product&#xff09; 在很多同学的脑海里&#xff0c;MVP就是你想传达给用户的功能的最小集合。 错&#xff0c;完全错。 问题不在于“你觉得应该……”&#xff0c;关键是“用户目前感觉……”。我们预设了立场&am…

Android Glide 4.9 常见方法总结

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/128665358 本文出自【赵彦军的博客】 文章目录依赖submit 下载图片DrawableImageViewTargetRequestListener 加载圆角图片回调圆形 CircleCrop圆角 RoundedCornersFitCenterCenterCropCenterInsid…

RK3399平台开发系列讲解(中断篇)ARM64异常处理详解

🚀返回专栏总目录 文章目录 一、异常级别二、异常分类三、异常向量表四、异常处理沉淀、分享、成长,让自己和他人都能有所收获!😄 一、异常级别 📢ARM64的处理器支持多个异常等级(exception level),其中EL0是用户模式,EL1是内核模式,也称为特权模式;EL2 是虚拟化…

算力狂热时代的冷静之道:宁畅总裁秦晓宁分享企业的算力最优解

算力是数字化时代的生产力之源&#xff0c;近年来已经成为共识。所以&#xff0c;我们能看到各个层面对算力的追逐&#xff0c;无论是国家层面的政策利好&#xff0c;算力基础设施建设的加速&#xff0c;还是诸多行业和企业积极地增加算力部署&#xff0c;呈现出一片如火如荼的…

958. 二叉树的完全性检验

958. 二叉树的完全性检验 难度中等 给定一个二叉树的 root &#xff0c;确定它是否是一个 完全二叉树 。 在一个 完全二叉树 中&#xff0c;除了最后一个关卡外&#xff0c;所有关卡都是完全被填满的&#xff0c;并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 …

AWVS扫描Web应用程序

AWVS扫描Web应用程序 系列文章 AWVS安装与激活 1.账户密码登录扫描 我们准备了一个靶场用来做测试扫描&#xff1a; 1.点击【Targets】&#xff0c;点击【add Target】 2.输入扫描地址和扫描描述,点击【save】 3.点击【Site Login】 4.选择【try to auto-login into the si…

降本增效,软件质量是要降还是要升?

最近一年&#xff0c;裁员潮席卷而来&#xff0c;意味着许多企业经营遇到了很大困难&#xff0c;“降本增效”自然成了企业的主旋律&#xff1a;内部研发和运营要努力降低成本&#xff0c;外部市场想突出重围、开拓新局面&#xff0c;创造新营收&#xff0c;企业才能渡过难关&a…

DeViSE: A Deep Visual-Semantic Embedding Model

摘要 现代视觉识别系统受限于其能力为&#xff1a;扩大大规模数量的目标类别。 scale to large numbers of object categoriestext data :文本数据这篇文章我们提出一个a new deep visual-semantic embedding model从unannotated text 中收集的语义信息和有标签的图像数据。o…

经纬恒润荣膺2022年度中国港口协会科学技术奖一等奖!

近日&#xff0c;2022年度中国港口协会科学技术奖评终审答辩会在青岛圆满闭幕&#xff0c;经纬恒润和山东港口日照港集装箱发展有限公司共同申报的“顺岸开放式全自动化集装箱码头集卡无人驾驶关键技术研究和应用”获得2022年度中国港口协会科技进步奖一等奖。 中国港口协会科学…

[go]深入学习Go总结

Go 深入学习 文章目录Go 深入学习编译过程概念编译四阶段词法分析 语法分析类型检查中间代码生成机器码生成类型系统分类底层类型类型相同类型赋值类型强制转换类型方法自定义类型方法方法调用方法调用时的类型转换类型断言接口类型查询数据结构数组初始化访问和赋值切片数据结…