Codeforces Round 784 (Div. 4) Kotlin

news2024/11/13 16:03:34

本期封面原图 画师煮タ 大福豆
最近学了下Kotlin的基础语法 想着巩固一下就开了一把div4 最后几题没时间了还是换回了C++ 要不然没法AK了
提交记录
Idea编译的时候最后必须加上一句main函数的调用,但是cf的测评机又不能加这一句,总是忘记注释掉所以ce了很多发,引以为戒喵
昨天打的 但是今天想了想还是把题解补一下吧

A - Division?

题意

输入一个分数输出他的division,可能当年cf的rated规则是这样?我只知道现在codechef是这个规则

思路

直接依照题意判断即可

语法tips

Kotlin的if和else if的用法和C基本相同,从控制台读入数据的方式和python基本相同,定义方式比python多了个var和val,相当于C语言加不加const,而且要求定义的时候必须赋值

代码

import java.util.*

fun solve()
{
    var n = readLine()!!.toInt()
    if(n>=1900)
        println("Division 1")
    else if(n>=1600)
        println("Division 2")
    else if(n>=1400)
        println("Division 3")
    else
        println("Division 4")
}

fun main()
{
    var t = readLine()!!.toInt()
    while(t-- > 0)
    {
        solve()
    }
}

//main()

B - Triple

题意

读入一个数组,输出任意出现次数大于等于3的数字,没有的话就输出-1

语法tips

定义一个数组是var b = IntArray(n+1),也就是定义一个长度为n+1的数组,默认所有位置的值都是0,for循环遍历的方式类似python
println会自动加一个回车,print就不会

代码

import java.util.*

fun solve()
{
    var n = readLine()!!.toInt()
    var a = readLine()!!.split(" ").map{it.toInt()}.toIntArray()
    //数组的定义
    var b = IntArray(n+1)
    for(i in a)
    {
        b[i]++
    }
    var ans=-1;
    for(i in 1..n)
    {
        if(b[i]>=3)
        {
            ans=i;
            break;
        }
    }
    println(ans)
}

fun main()
{
    var t = readLine()!!.toInt()
    while(t-- > 0)
    {
        solve()
    }
}

//main()

C - Odd/Even Increments

题意

每次操作可以对所有奇数位或所有偶数位的值加一,问能否以任意次操作使得整个数组的所有数奇偶性想通过

思路

看是不是奇数和偶数位分别奇偶性相同即可

语法tips

可以用step后面跟一个数字来控制循环的步长

代码

import java.util.*

fun solve()
{
    var n = readLine()!!.toInt()
    var a = readLine()!!.split(" ").map{it.toInt()}.toIntArray()
    for(i in 2 until n step 2)
    {
        if(a[i]%2!=a[0]%2)
        {
            println("NO")
            return
        }
    }
    for(i in 3 until n step 2)
    {
        if(a[i]%2!=a[1]%2)
        {
            println("NO")
            return
        }
    }
    println("YES")
}

fun main()
{
    var t = readLine()!!.toInt()
    while(t-- > 0)
    {
        solve()
    }
}

main()

D - Colorful Stamp

题意

原本的字符串全部都是W,每次可以将连续的两个字符变为RB或者BR,问最终有没有机会变为给定的字符串形式

思路

以W把字符串拆开成好几段,每一段都必须出现过R和B,如果一段只出现某一个字符那肯定不行

语法tips

kotlin的if里面一定要对每个判断加括号,要不然容易报错,至少我总是会莫名其妙报错

代码

import java.util.*

fun solve()
{
    var n = readLine()!!.toInt()
    var s = readLine()!!
    var B=0
    var R=0
    for(i in 0 until n)
    {
        if(s[i] == 'B')
        {
            B++
        }
        else if(s[i] == 'R')
        {
            R++
        }
        else
        {
            if(B==0 && R==0)
                continue
            if(R>0 && B>0)
            {
                B=0
                R=0
                continue
            }
            break
        }
    }
    if(((B<=0)&&(R>0))||((R<=0)&&(B>0)))
    {
        println("NO")
    }
    else
    {
        println("YES")
    }
}

fun main()
{
    var t = readLine()!!.toInt()
    while(t-- > 0)
    {
        solve()
    }
}

//main()

F - Eating Candies

题意

两个人一个从左往右一个从右往左吃糖,要求最后吃的一样多,问两个人最多能吃多少糖

思路

双指针模拟即可

语法tips

用max和min要引用math库

代码

import java.util.*
import kotlin.math.*

fun solve()
{
    var n = readLine()!!.toInt()
    var a=readLine()!!.split(' ').map{it.toInt()}
    var l=0
    var r=n-1
    var pre=0
    var back=0
    var ans=0
    while(l<=r)
    {
        pre+=a[l]
        while(r>l && back<pre)
        {
            back+=a[r]
            r--
        }
        if (back==pre)
        {
            ans=max(ans,l+n-r)
        }
        l++
    }
    println(ans)
}

fun main()
{
    var t = readLine()!!.toInt()
    while(t-- > 0)
    {
        solve()
    }
}

//main()

E - 2-Letter Strings

题意

输入n个长度为2的字符串,问一共有多少对只有某一位的字符相同

思路

遍历每一位即可

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n;
    scanf("%d",&n);
    ll ans=0;
    string s;
    int cnt[26][26];
    memset(cnt,0,sizeof(cnt));
    for(int i=0;i<n;i++)
    {
        cin>>s;
        int x=s[0]-'a';
        int y=s[1]-'a';

        for(int j=0;j<26;j++)
        {
            if(x!=j)
            {
                ans+=cnt[j][y];
            }
            if(y!=j)
            {
                ans+=cnt[x][j];
            }
        }
        cnt[x][y]++;
    }
    printf("%lld\n",ans);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

G - Fall Down

题意

模拟石头往下掉的过程,只要下面还是空的就要一直往下掉

思路

从下往上模拟即可

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n,m;
    scanf("%d%d",&n,&m);
    string s[n+1];
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
        s[i]=" "+s[i];
    }
    printf("\n");
    for(int i=n;i>=1;i--)
    {
        for(int j=1;j<=m;j++)
        {
            if(s[i][j]=='*')
            {
                s[i][j]='.';
                bool flag=false;
                for(int k=i;k<=n;k++)
                {
                    if(s[k][j]=='*' or s[k][j]=='o')
                    {
                        s[k-1][j]='*';
                        flag=true;
                        break;
                    }
                }
                if(!flag)
                    s[n][j]='*';
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            printf("%c",s[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

H - Maximal AND

题意

每次操作可以使某一个数的某一个二进制位变成1,问最后数组中所有数and值的最大值

思路

贪心,从最高位往下尽量都变成1就行

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int a[31];
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++)
    {
        int x;
        scanf("%d",&x);
        for(int j=0;j<=30;j++)
        {
            if(x&(1<<j))
            {
                a[j]++;
            }
        }
    }
    int ans=0;
    for(int i=30;i>=0;i--)
    {
        if(k>=n-a[i])
        {
            k-=n-a[i];
            ans|=1<<i;
        }
    }
    printf("%d\n",ans);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

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

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

相关文章

「C++系列」文件和流

【人工智能教程】&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站&#xff1a;【人工智能教程】 文章目录 一、文件和流1. 文件操作① 打开文件② 读写文件 2. 流操作 二、应…

【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存和缓存行说明

CPU物理核及L1、L2、L3及缓存 CPU缓存 CPU 缓存是一种用于存储临时数据以提高计算机程序性能的内存层次结构。它通常分为三个层次&#xff1a;L1&#xff08;一级&#xff09;、L2&#xff08;二级&#xff09;和L3&#xff08;三级&#xff09;缓存。缓存大小是CPU的重…

基于yolov5和openpose人体骨骼关键点实现的摔倒姿态识别检测系统实现

【参考源码】 https://github.com/HRonaldo/Openpose_YOLO 本项目参考上面框架进行全面改进&#xff0c;改进如下&#xff1a; &#xff08;1&#xff09;封装YOLOv5检测类&#xff0c;这样可以加强阅读便利性&#xff0c;模块设计方便嵌入其他框架&#xff0c;后面我会换成…

OpenAI o1-preview和o1-mini现已在 GitHub Copilot和GitHub Models中提供

微软 GitHub 今天宣布在 GitHub Copilot和 Models 中提供两个新的 Open AI 模型&#xff1a;o1-preview 和 o1-mini。OpenAI 推出了新的 o1 系列 人工智能模型&#xff0c;旨在花更多时间思考后再做出反应。与以前的 OpenAI 模型相比&#xff0c;这些模型能在科学、编码和数学领…

【吊打面试官系列-MySQL面试题】列对比运算符是什么?

大家好&#xff0c;我是锋哥。今天分享关于【列对比运算符是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 列对比运算符是什么&#xff1f; 在 SELECT 语句的列比较中使用&#xff0c;<>&#xff0c;<&#xff0c;<&#xff0c;> &#x…

vue3+element-plus icons图标选择组件封装

一、最终效果 二、参数配置 1、代码示例 <t-select-icon v-model"selectVlaue" />2、配置参数&#xff08;Attributes&#xff09;继承 el-input Attributes 参数说明类型默认值v-model绑定值string-prefixIcon输入框前缀iconstringSearchisShowSearch是否显…

CleanClip For Mac 強大的剪貼簿助手Paste替代工具 v2.2.1

软件介绍&#xff1a; CleanClip是一款专为Mac设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和生产力。这款应用完全采用原生Swift编写&#xff0c;为Mac用户提供了流畅、快速且直观的使用体验。CleanClip不仅支持文本内容的管理&#xff0c;还能处理图片、文件…

mac电脑打不开rar文件怎么办 rar文件怎么转换成zip并打开

rar文件是一种常见的压缩文件格式&#xff0c;它可以将多个文件或文件夹打包成一个文件&#xff0c;从而节省空间和方便传输。但是&#xff0c;mac系统并没有自带的工具可以直接打开或解压rar文件&#xff0c;那么&#xff0c;mac用户该如何处理rar文件呢&#xff1f; 一、mac电…

lettuce引起的Redis command timeout异常

项目使用Lettuce&#xff0c;在自己的环境下跑是没有问题的。在给客户做售前压测时&#xff0c;因为客户端环境比较恶劣&#xff0c;service服务和中间件服务不在同一机房。服务启动后不一会就会出现Redis command timeout异常。 经过差不多两周的追查&#xff0c;最后没办法把…

哪个牌子的麦克风好用?无线麦克风避坑指南:五大常见问题

随着短视频行业的兴起&#xff0c;和视频拍摄有关的外设也被推到了风口浪尖上&#xff0c;而麦克风作为视频拍摄或者现场直播使用的主要拾音工具&#xff0c;自然成为了大家非常关注的一个摄影外设工具&#xff0c;毕竟一款好的拾音工具能够给视频创作者或者直播博主带来更好的…

基于SpringBoot+Vue的高校一卡通系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

电脑ip会因为换了网络改变吗

在当今数字化时代&#xff0c;IP地址作为网络世界中的“门牌号”&#xff0c;扮演着至关重要的角色。它不仅是设备在网络中的唯一标识&#xff0c;也是数据交换和信息传递的基础。然而&#xff0c;对于普通用户而言&#xff0c;一个常见的问题便是&#xff1a;当电脑连接到不同…

STM32与51单片机的区别:是否应该直接学习STM32?

STM32与51单片机的区别&#xff1a;是否应该直接学习STM32&#xff1f; 在单片机的世界里&#xff0c;STM32和51单片机都是非常重要的角色。对于初学者来说&#xff0c;是否可以直接跳过51单片机&#xff0c;直接学习STM32&#xff0c;这个问题一直存在争议。让我们深入探讨这…

《家庭无线网络覆盖项目》

家庭无线网络覆盖报项目 目录 家庭无线网络覆盖项目 家庭无线网络覆盖项目 一、项目概述 二、设备清单及报价 三、安装调试费用 四、总报价 五、服务承诺 家庭无线网络覆盖项目 客户姓名:[客户姓名] 联系方式:[电话号码] 家庭地址:[详细地址] 一、项目概述 为客户…

系统架构设计师|数据库基础-006

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、 腾讯云优秀创作者、腾讯云TDP-KOL、墨天轮技术专家博主、ACDU成员 &#x1f3…

【赵渝强老师】K8s中的Deployment控制器

K8s的Deployment将Pod部署成无状态的应用程序&#xff0c;它只关心Pod的数量、Pod更新方式、使用的镜像和资源限制等。由于是无状态的管理方式&#xff0c;因此Deployment中没有角色和顺序的概念&#xff0c;换句话说&#xff1a;Deployment中没有状态。   通过使用Deploymen…

打工人必看!AI 编程助手让你轻松应对任务!

在当今科技飞速发展的时代&#xff0c;我们作为开发者面临着前所未有的挑战。技术栈频繁迭代&#xff0c;项目周期逐渐缩短&#xff0c;但对代码质量和的要求却不断提升这样的环境下&#xff0c;如何有效提升编程效率成为了一个永恒的议题。 最近&#xff0c;我找到了一位强大…

C语言定时器编程深入研究

定时器是操作系统提供的用于计时的功能之一&#xff0c;常用于控制程序中的延时操作或周期性任务。本篇文章将详细介绍如何使用C语言处理定时器&#xff0c;包括基本的定时器设置方法、自定义定时器处理函数以及一些高级主题。 1. 引言 定时器是操作系统向进程提供的一个用于…

Shiro-550—漏洞分析(CVE-2016-4437)

文章目录 漏洞原理源码分析加密过程解密过程 漏洞复现 漏洞原理 Shiro-550(CVE-2016-4437)反序列化漏洞 在调试cookie加密过程的时候发现开发者将AES用来加密的密钥硬编码了&#xff0c;并且所以导致我们拿到密钥后可以精心构造恶意payload替换cookie&#xff0c;然后让后台最…