Codeforces Round 739 (Div. 3)

news2024/11/25 20:37:40

A.Dislike of Threes

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=2e5+10;
int f[N];
int cnt;
int main()
{
    for(int i=1;;i++){
        if(i%3!=0&&i%10!=3) f[++cnt]=i;
        if(cnt>=1000) break;
    }
    int t;
    cin>>t;
    while(t--){
        int k;
        cin>>k;
        cout<<f[k]<<endl;
    }
    return 0;
}

B.Who's Opposite?

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
void solve()
{
    int a,b,c;
    cin>>a>>b>>c;
    if(a>b) swap(a,b);
    int sum=2+(b-a-1)*2;
    if(c>sum){
        cout<<-1<<endl;
        return;
    }
    if(c<=sum/2) c+=(b-a);
    else c-=(b-a);
    if(a>sum||b>sum){
        cout<<-1<<endl;
        return;
    }
    if(c==a||c==b){
        cout<<-1<<endl;
        return;
    }
    if(c<1||c>sum){
        cout<<-1<<endl;
        return;
    }
    cout<<c<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

C.Infinity Table

每一行的第一个都是2的次幂,通过二分来找到是哪一行

注意二分的范围,如果开太大,平方超出int范围,会变成负数,导致错误

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int sqr(int x){
    return x*x;
}
void solve()
{
    int k;
    cin>>k;
    int l=1,r=4e4;
    while(l<r){
        int mid=(l+r)/2;
        if(sqr(mid)>=k) r=mid;
        else l=mid+1;
    }
    int x,y;
    int diff=sqr(l)-k;
    if(diff<=l-1) {
        x=l;
        y=diff+1;
    }
    else{
        x=l-(diff-(l-1));
        y=l;
    }
    cout<<x<<" "<<y<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

D.Make a Power of Two

先打表,预处理2的次幂,以字符串的形式存储,存储尽可能多的2的次幂(因为还有前导0)

数字n也以字符串的形式输入进来,记为字符串ss,然后将字符串与打好表的所有2的次幂进行比较,

利用双指针,必须从左往右按顺序依次匹配,也就是说对于每一个2的次幂字符串,如果前一位没有被匹配,那么就不去匹配后一位,因为只能在最右边加数,前一位没有匹配到,我们是不能通过删除和在右边添加元素来使得这个数出现的

然后如果某一个2的次幂每一位都被匹配的话,就只要删除多余的位数

否则,除了要删除多余的位数,还要在右边添加没有匹配到的位数

用res记录答案,对于变成每一个2次幂所需的操作次数,都取最小

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N=110;
string s[N];
//打表
void init()
{
    for(int i=0;i<61;i++){
        int x=1ll<<i;
        s[i]=to_string(x);
    }
}
void solve()
{
    string ss;
    cin>>ss;
    int res=2e9;
    for(int i=0;i<61;i++){
        int match=0;
        int p=0,q=0;
        while(ss[q]){
            if(ss[q]==s[i][p]){
                p++;
                match++;
            }
            q++;
        }
        int len1=s[i].size(),len2=ss.size();
        if(match==len1) res=min(res,len2-match);
        else res=min(res,len2-match+len1-match);
    }
    cout<<res<<endl;
}
signed main()
{
    init();
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

或者在双指针匹配的同时,如果不匹配就执行删除操作(即操作数+1),然后最后s[i]中没有匹配的都加到ss的右边

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N=110;
string s[N];
void init()
{
    for(int i=0;i<61;i++){
        int x=1ll<<i;
        s[i]=to_string(x);
    }
}
void solve()
{
    init();
    string ss;
    cin>>ss;
    int res=2e9;
    for(int i=0;i<61;i++){
        int cnt=0;
        int match=0;
        int p=0,q=0;
        while(ss[p]){
            if(ss[p]==s[i][q]){
                q++;
                match++;
            }
            else cnt++;
            p++;
        }
        int len1=ss.size(),len2=s[i].size();
        res=min(res,cnt+len2-match);
    }
    cout<<res<<endl;
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

E.Polycarp and String Transformation

先根据变换后的字符串t得到删除的字符及其顺序,因为字符越是在后面则越晚被删除

然后因为原字符串s第一次加到了字符串t中,所以只需确定其长度即可通过遍历得到

原字符串s的长度为字符串t中第一次删除的字符个数+第二次删除的字符个数除以2+...

然后遍历得到字符串s

最后验证字符串s按题目操作之后得到的字符串是否和t相等,如果相等则正确,否则输出-1

注意,vector.erase()中要写迭代器,即地址,不能写值

for(auto v:s) 得到的v是值,不能直接erase(值)

可以用vector删除所有与指定值相等的元素

 

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
#include<map>
#include<vector>
using namespace std;
void solve()
{
    string ss;
    cin>>ss;
    set<char>se;
    string ans;
    map<char,int>mp;
    vector<char>s;
    for(int i=ss.size()-1;i>=0;i--){
        if(!se.count(ss[i])){
            se.insert(ss[i]);
            ans=ss[i]+ans;
        }
        mp[ss[i]]++;
    }
    int len=0;
    for(int i=0;i<ans.size();i++) {
        mp[ans[i]]/=(i+1);
        len+=mp[ans[i]];
    }
    for(int i=0;i<len;i++) s.push_back(ss[i]);
    //验证
    string tt="";
    for(int i=0;i<ans.size();i++){
        for(auto v:s) tt+=v;
        s.erase(remove(s.begin(),s.end(),ans[i]),s.end());
    }
    if(tt==ss){
        for(int i=0;i<len;i++) cout<<ss[i];
        cout<<" ";
        cout<<ans<<endl;
    }
    else cout<<-1<<endl;
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

F1.F2.

Nearest Beautiful Number (easy version)

Nearest Beautiful Number (hard version)

参考zhbbbb!

判断当前n不同数字个数是不是小于等于k,如果小于等于k,则直接输出

找到第一个大于k的不同数,这是关键,每次都是找第一个大于k的不同数

使得这位数+1,后面全置为0,原因是该位已经是第k+1位不同的数了,并且我们要找的数需要大于等于n,所以只能将其变大,但又不能一下子变太大,因为要找最小的大于等于n的,故加1,然后再判断当前n不同数字的个数是否小于等于k,如此反复

注意,如果找到的第k+1个不同的数是9,则需要进位,那么只需要往前移动,直到找到不是9的位,对其+1,然后后面全部置为0

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
#include<map>
#include<vector>
using namespace std;
void solve()
{
    string ss;
    cin>>ss;
    int k;
    cin>>k;
    while(1){
        set<char>s;
        for(int i=0;i<ss.size();i++) s.insert(ss[i]);
        if(s.size()<=k){
            cout<<ss<<endl;
            return;
        }
        s.clear();
        int pos=0;
        while(1){
            s.insert(ss[pos]);//将字符从左到右一个一个的放入set中
            if(s.size()>k){
                while(ss[pos]=='9') pos--;
                ss[pos]++;
                for(int i=pos+1;i<ss.size();i++) ss[i]='0';
                break;
            }
            pos++;
        }
    }
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    solve();
    return 0;
}

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

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

相关文章

第一阶段-第六章 Python的数据容器

目录 一、数据容器入门  1.学习目标  2.为什么要学习数据容器  3.什么是数据容器  4.本小节的总结 二、数据容器&#xff1a;list&#xff08;列表&#xff09;  2.1列表的定义  1.学习目标  2.为什么需要列表  3.列表的定义  4.本节的代码演示  5.本小节的…

【Java练习题汇总】《第一行代码JAVA》面向对象基础篇,汇总Java练习题——面向对象:特性、类与对象、数组、String、内部类... ~

Java练习题 面向对象基础篇 1️⃣ 面向对象基础篇 1️⃣ 面向对象基础篇 一、填空题 面向对象的三大特征&#xff1a;_______ 、_______ 、_______。类由_______和_______组成。运算符_______的作用是根据对象的类型分配内存空间。当对象拥有内存空间时&#xff0c;会自动调…

oceanbase基础

与mysql对比 分布式一致性算法 paxos 存储结构&#xff08;引擎&#xff09;用的是两级的 数据库自动分片功能&#xff0c;提供独立的obproxy路由写入查询等操作到对应的分片 多租户 方便扩展 存储层 http://www.hzhcontrols.com/new-1391864.html LSM tree&#xff0c;is very…

CnOCR 使用教程

目录 一、 简介二、使用教程三、效果展示 一、 简介 CnOCR 是 Python 3 下的文字识别&#xff08;Optical Character Recognition&#xff0c;简称OCR&#xff09;工具包&#xff0c;支持简体中文、繁体中文&#xff08;部分模型&#xff09;、英文和数字的常见字符识别&#…

[COCI2010-2011#6]STEP

目录 1.题目&#xff1a; 题目描述 输入格式 输出格式 2.思路 1.ans数组的维护 2.L and R 的维护 3.ne数组与pr数组的维护 4.len数组&#xff1a; 3.代码&#xff1a; 1.有注释版&#xff1a; 2.copy版&#xff1a; 1.题目&#xff1a; 题目描述 给定一个长度为N的…

Java设计模式-责任链(Chain of Responsibility)模式

介绍 Java责任链&#xff08;Chain of Responsibility&#xff09;设计模式是指很多处理对象构成一个链&#xff0c;链中前一个对象指向后一个对象。请求在链中传递&#xff0c;一个请求可以被一个或者多个对象处理。调用方&#xff08;即客户端&#xff09;不知道请求会被链中…

【UniApp开发小程序】项目创建+整合UI组件(FirstUI和uView)

创建项目 下图为初始化的项目的文件结构 引入组件 俗话说&#xff1a;“工欲善其事&#xff0c;必先利其器”&#xff0c;为了更加方便地开发出页面较为美观的小程序&#xff0c;我们先引入成熟的UI组件&#xff0c;再开始开发之旅。&#xff08;如果你是前端高手&#xff0…

ardupilot IMU陀螺仪方向的重要性

目录 文章目录 目录摘要1.简介---BMI088 方向2.控制摘要 本节主要记录IMU陀螺仪方向的重要性,欢迎批评指正!!! 1.简介—BMI088 方向 注意这个BMI088 的IMU方向,特别是是那个左上角的黑色点点,他的坐标系满足右手坐标系,但是我们无人机坐标系是北东地坐标系,因此需要把…

Cobalt Strike实战实例

客户端 初始化界面如下&#xff1a; 可以多个客户端同时连接&#xff0c;可以聊天。 msg 指定id 文字。 msg 文字。 创建监听器 这里出现了&#xff0c;监听设置不成功。原因是服务端的CS4.0报错了。我重新下载就可以了。如果这里有问题&#xff0c;可联系我。我帮你。这里解…

python+requests接口自动化测试

原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的是java语言&#xff0c;但对于一个学java&…

Feign远程调用组件

Feign Feign是Netfix开发的一个轻量级REstFul的HTTP服务客户端,是以java接口注解的方式调用HTTP请求,而不用像java中通过封装HTTP请求报文的方式直接调用,可以帮助我们更加便捷,优雅的调用HTTP API Feign RestTemplate Ribbon Hystrix 本质:封装了HTTP调用流…

JAVA (static) 简述

前言&#xff1a; 在力扣上提交代码&#xff0c;发现用static定义变量&#xff0c;和不用static修饰变量&#xff0c;虽然每次运行的结果都一样&#xff0c;但是提交的结果却有通过与不通过两种情况。 测试题目&#xff1a;组合&#xff08;力扣&#xff09;dfs 回溯 剪枝 JA…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的&#xff0c;所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表尾…

【Matlab】智能优化算法_流向算法FDA

【Matlab】智能优化算法_流向算法FDA 1.背景介绍2.数学模型3.文件结构4.算法流程图5.详细代码及注释5.1 FDA.m5.2 initialization.m5.3 main.m5.4 Select_Functions.m 6.运行结果7.参考文献 1.背景介绍 在流域中&#xff0c;过量或有效降雨量是指流过地表且未渗入土壤的降雨量。…

使用可视化数据库工具 DBeaver

新建一个名为 test 的数据库&#xff1a;右击数据库点击新增&#xff0c;然后创建一张 test &#xff0c;utf8mb4 字符的&#xff0c;点击确定 在 test 数据库下新建一张数据表&#xff0c;如下所示&#xff1a;右击表&#xff0c;然后点击新建表 鼠标放列上面&#xff0c;右键…

安全狗重磅发布数据资产梳理系统

今年6月&#xff0c;浙江某科技有限公司因违反《中华人民共和国数据安全法》第四十五条及相关规定&#xff0c;公司及项目主管人员、直接责任人员分别罚款100万元、8万元、6万元。这也是《数据安全法》开始运行以来的首例“高额罚单”案件。实际上&#xff0c;这也给我国众多行…

002 Jetpack Compose基础组件学习

1.Text组件 Text组件就是原先的TextView组件&#xff0c;用法还是挺简单的&#xff0c;如下就是简单的Text用法&#xff1a; package com.test.composeimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent im…

(搜狗输入法)自定义输入日期格式

需求 想要按特定格式快速输入当天的日期戳&#xff1a;XXXX-XX-XX&#xff0c;如 2023-07-13 方法 参考链接&#xff1a;搜狗输入时间日期格式输入及自定义 按上述教程操作&#xff0c;自定义短语表达式&#xff1a;#$year-$month_mm-$day_dd 即可实现用搜狗输入法输入“r…

Table Recognition Metric: 表格识别算法评测工具包及相关评测基准数据集

Table Recognition Metric 该库用于计算TEDS指标&#xff0c;用来评测表格识别算法效果。可与魔搭-表格识别测试集配套使用。TEDS计算代码参考&#xff1a;PaddleOCR 和 DAVAR-Lab-OCR 使用说明&#xff1a; Install package by pypi.pip install table_recognition_metricRu…

2023-7-13-第十八式观察者模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…