Educational Codeforces Round 165 (Rated for Div. 2)[A~D]

这场签到很快那会rank1400吧,但到c就写不动了,最后排名也是3000 左右,可见很多人其实都不会写dp。快速签到也很重要啊!!

A. Two Friends

Problem - A - Codeforces

题目大意

        M有n个朋友,编号1-n,如果朋友i来则必须pi需要收到邀请,求来2个朋友至少需要发出多少邀请函。

思路

        这题我照着样例摸了一下,一眼感觉就是如果pi=j并且pj=i就只需要邀请两个人,否则至少邀请三个人。至于为什么邀请三个人一定能满足条件当时没有细想,猜了结论交上去就a了。

        那么现在来看一下,1 2 3 4

                                         3 4 2 1这种就是至少要邀请三个人的情况了,如果我想要1来就得邀请3,如果3来就得邀请2,所有只要邀请123就一定至少有2个人来。很显而易见了hhhh。 

#include<bits/stdc++.h>
using ll=long long;
const int N=5000+10;
const int mod=998244353;
int a[N];
std::map<char,int> mp;
void solve()
{
    int n;
    std::cin>>n;
    for(int i=1;i<=n;i++)
    {
        std::cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i]==j&&a[j]==i)
            {
                std::cout<<2<<'\n';
                return;
            }
        }
    }
    std::cout<<3<<'\n';
}
signed main()
{
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    int t=1;
    std::cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

 B. Shifts and Sorting

Problem - B - Codeforces 

题目大意

        给定一个只含01的字符串,要求把它变成非递减的。每次可以做变换,如把1000->0100,每次操作其中一个子串把最后一位放到第一位,如把10子串变成01花费2。

思路

       这题我当时照着样例推了一遍,

5
10              最后结果一定是01,要求次数最少,01,花费2
0000          所有位相同花费0
11000        最后结果一定是00011,要求次数最少,第一个1一定要移到后面,所以每有个0都得交换。11000->01100->00110->00011    花费3+3+3=9
101011      最后结果一定是001111,101011->011011->001111  2+3=5
01101001  最后结果一定是00001111,01101001->00111001->00011101->00001111  3+4+4=11

        其实推完样例结果就很容易出来了(也就是说比赛的时候一定要静下心来认真推样例)。只需要对第一个1操作,把所有0都移到他的前面去,这个串就是非递减的了。每一次操作完之后都会有一个0跑到前边去,所以花费可以减少1。

#include<bits/stdc++.h>
using ll=long long;
const int N=5000+10;
const int mod=998244353;
int a[N];
std::map<char,int> mp;
void solve()
{
    std::string s;
    std::cin>>s;
    ll ans=0;
    int ind=-1;
    for(int i=0;i<=s.length();i++)
    {
        if(s[i]=='1')
        {
            ind=i;
            break;
        }
    }
    ll cnt=0;
    if(ind==-1)
    {
        std::cout<<0<<'\n';
        return ;
    }
    for(int i=ind+1;i<s.length();i++)
    {
        if(s[i]=='0')
        {
            ans+=i-ind+1-cnt;
            cnt++;
        }
    }
    std::cout<<ans<<'\n';
}
signed main()
{
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    int t=1;
    std::cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

 C. Minimizing the Sum

Problem - C - Codeforces

题目大意

        给定一个序列,每次操作可以把其中一个数的左边/右边变得跟他一样,例如:

𝑎=[3,1,2], you can get one of the arrays [3,3,2], [3,2,2] and [1,1,2]。最多操作k次,输出这个序列的最小总和。

思路

       这题我写的时候一眼贪心啊,敲了个优先队列存储pair,敲完突然想到好几个hack样例,贪心包过不了的啊。然后感觉这个很像dp了,但是本人dp写得极少,确实写不出来。(菜就多练.jpg)。

        代码思路很清晰,看代码吧。

#include<bits/stdc++.h>
using ll=long long;
#define int ll
const int N=1e6+10;
const int mod=998244353;
using PII=std::pair<int,int>;
int a[N];
int dp[N][15];//对前i个数操作j次
void solve()
{
    int n,k;
    std::cin>>n>>k;

    for(int i=1;i<=n;i++)
    {
        std::cin>>a[i];
    }

    a[0]=1e9,a[n+1]=1e9;

    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=k;j++)
        {
            dp[i][j]=dp[i-1][j]+a[i];
        }
        for(int j=0;j<=k;j++)//之前已经操作了多少次
        {
            for(int p=0;p+j<=k&&p<=i;p++)//当前要操作多少次
            {
                dp[i][j+p]=std::min(dp[i][j+p],dp[i-p][j]+p*std::min(a[i+1],a[i-p]));
            }
        }
    }
    std::cout<<dp[n][k]<<'\n';
}
signed main()
{
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);

    //freopen("a.txt","r",stdin);
    //freopen("b.txt","w",stdout);

    int t=1;
    std::cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

 D. Shop Game

Problem - D - Codeforces 

题目大意

        商店里有n个商品,对alic的价格是ai,bob的价格是bi。

        alice每次能从中买商品:

        如果个数小于k,bob能免费全拿走。

        否则,bob会从alice手中免费拿走k个,其余的付bi购买。

        如果alice让自己的利润最大,bob让alice的利润最小,输出alice最后的利润。

思路

       偷个别人的题解,我悟了。

#include<iostream>
#include<cstring>
#include<vector>
#include<set>
#include<numeric>
#include<algorithm>
using namespace std;
using LL = long long;

int main()
{

    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    int T;
    cin >> T;
    while(T--)
    {
        int n, k;
        cin >> n >> k;
        vector<int> a(n), b(n);
        for(int i = 0; i < n; i++) cin >> a[i];
        for(int i = 0; i < n; i++) cin >> b[i];
        vector<int> id(n);
        iota(id.begin(), id.end(), 0);

        sort(id.begin(), id.end(), [&](int x, int y)
        {
            if (b[x] != b[y]) return b[x] > b[y];
            return a[x] < a[y];
        });

        LL s1 = 0, s2 = 0, ans = 0;
        set<pair<int, int> > s;

        for(int i = 0; i < k; i++)
        {
            s.insert({a[id[i]], id[i]});//b免费拿走的
            s1 += a[id[i]];
        }

        for(int i = k; i < n; i++)
        {
            if (b[id[i]] > a[id[i]])
            {
                s2 += b[id[i]] - a[id[i]];//利润
            }
        }
        for(int i = k; i < n; i++)
        {
            ans = max(ans, s2 - s1);//存最大利润

            if (b[id[i]] > a[id[i]])
            {
                s2 -= b[id[i]] - a[id[i]];
            }
            s.insert({a[id[i]], id[i]});
            s1 += a[id[i]];
            s1 -= prev(s.end())->first;
            s.erase(prev(s.end()));
        }
        cout << ans << '\n';
    }
}

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

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

相关文章

【Java】java实现文件上传和下载(上传到指定路径/数据库/minio)

目录 上传到指定路径 一、代码层级结构 二、文件上传接口 三、使用postman进行测试&#xff1b; MultipartFile接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFile part接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFileByRequest 接收前端传递…

基于大模型的智能案件询问系统

一、数据库层面 1、document表 这个表是用来存储文件信息的。具体字段含义如下&#xff1a; 1. id&#xff1a;文件的唯一标识&#xff0c;整型&#xff0c;自增。 2. name&#xff1a;文件名称&#xff0c;字符串类型&#xff0c;最大长度为255个字符。 3. type&#xff1a…

宠物领养|基于SprinBoot+vue的宠物领养管理系统(源码+数据库+文档)

宠物领养目录 基于Spring Boot的宠物领养系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1前台 1.1 宠物领养 1.2 宠物认领 1.3 教学视频 2后台 2.1宠物领养管理 2.2 宠物领养审核管理 2.3 宠物认领管理 2.4 宠物认领审核管理 2.5 教学视频管理 四、…

Linux专栏03:使用Xshell远程连接云服务器

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Linux专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 使用Xshell远程连接云服务器 编号&#xff1a;03 文章目录 使用Xsh…

Windows中Redis安装配置

一&#xff0c;下载 Redis官网 Redis中文网 Redis的Github资源 安装 更改资源路径及添加环境变量 添加防火墙异常 设置最大缓存 三、验证redis安装是否成功 redis-cli

TiDB系列之:部署TiDB集群常见报错解决方法

TiDB系列之&#xff1a;部署TiDB集群常见报错解决方法 一、部署TiDB集群二、unsupported filesystem ext3三、soft limit of nofile四、THP is enabled五、numactl not usable六、net.ipv4.tcp_syncookies 1七、service irqbalance not found,八、登陆TiDB数据库 一、部署TiDB…

RTSP,RTP,RTCP

机器学习 Machine Learning&#xff08;ML&#xff09; 深度学习&#xff08;DL&#xff0c;Deep Learning&#xff09; CV计算机视觉&#xff08;computer vision&#xff09; FFMPEG&#xff0c;MPEG2-TS,H.264,H.265,AAC rstp,rtp,rtmp,webrtc onvif,gb28181 最详细的音…

Rust中的并发性:Sync 和 Send Traits

在并发的世界中&#xff0c;最常见的并发安全问题就是数据竞争&#xff0c;也就是两个线程同时对一个变量进行读写操作。但当你在 Safe Rust 中写出有数据竞争的代码时&#xff0c;编译器会直接拒绝编译。那么它是靠什么魔法做到的呢&#xff1f; 这就不得不谈 Send 和 Sync 这…

排序算法大总结

引言 排序算法&#xff08;sorting algorithm&#xff09;是用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 如图 1-1 所示&#xff0c;排序算法中的数据类型可以是整数、浮点数、字符或字符串等…

SpringBoot中实现发送邮件

概要 在Spring Boot中发送电子邮件相对简单。你可以使用Spring的邮件支持来实现这一点。 步骤&#xff1a; 1.添加依赖&#xff1a;首先&#xff0c;需要在你的pom.xml文件中添加Spring Boot的邮件发送器依赖。 2. 配置邮件服务器&#xff1a;在application.properties或app…

Python 机器学习 基础 之 学习 基础环境搭建

Python 机器学习 基础 之 学习 基础环境搭建 目录 Python 机器学习 基础 之 学习 基础环境搭建 一、简单介绍 二、什么是机器学习 三、python 环境的搭建 1、Python 安装包下载 2、这里以 下载 Python 3.10.9 为例 3、安装 Python 3.10.9 4、检验 python 是否安装成功&…

设计模式第二次测试 | 数据库连接池设计(原型模式、创建者模式、适配器模式)

需求中文如下&#xff1a;原本是英文&#xff0c;用百度翻译转换而来 我们需要设计一个工具&#xff0c;它负责创建一个与数据库软件MySQL的连接池。 连接池中有数百个连接可供客户端使用。 所有连接对象都有相同的内容&#xff0c;但它们是不同的对象。 连接对象的创建是资源密…

【嵌入式笔试题】进程线程笔试题

非常经典的笔试题。 1.进程&线程(16道) 1.1异步IO和同步IO区别? 答案:如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完。 相反,异步IO操作在后台运行,IO操作和应用程序可以同时运行,提高系统性能,提 高IO流量。 解读:在同步文件IO中,线…

Sarcasm detection论文解析 |用于微博讽刺检测的上下文增强卷积神经网络

论文地址 论文地址&#xff1a;Context-augmented convolutional neural networks for twitter sarcasm detection - ScienceDirect 论文首页 笔记大纲 用于微博讽刺检测的上下文增强卷积神经网络 &#x1f4c5;出版年份:2018 &#x1f4d6;出版期刊:Neurocomputing &#x1f…

Django后台项目开发实战五

完成两个功能&#xff1a; HR 可以维护候选人信息面试官可以录入面试反馈 第五阶段 创建 interview 应用&#xff0c;实现候选人面试评估表的增删改功能&#xff0c;并且按照页面分组来展示不同的内容&#xff0c;如候选人基础信息&#xff0c;一面&#xff0c;二面的面试结…

在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文将说明如何在离线环境中将 CentOS 7.5 升级并迁移至 RHEL 7.9。为了简化准备过程&#xff0c;本文前面将在在线环境中安装用到的各种所需验证软件&#xff0c;而在后面升级迁移的时候再切换到由 ISO 构成的离线 Yum Repo…

20240430,类模板案例-数组类封装,STL初识,STRING容器(构造函数,赋值)

我真的碎掉了&#xff0c;主要是我很缺那点钱啊现在&#xff0c;我真的碎掉了我碎掉了碎掉了碎掉了 0.8 类模板案例-数组类封装 需求&#xff1a;1&#xff0c;存储&#xff1a;内置和自定义数据类型&#xff1b; 2&#xff0c;存到堆区&#xff1b; 3&#xff0c;构造函数传入…

Docker部署RabbitMQ与简单使用

官网地址&#xff1a; Messaging that just works — RabbitMQ 我的Docker博客:Docker-CSDN博客 1.结构 其中包含几个概念&#xff1a; **publisher**&#xff1a;生产者&#xff0c;也就是发送消息的一方 **consumer**&#xff1a;消费者&#xff0c;也就是消费消息的一方 …

第三节课,功能2:开发后端用户的管理接口--http client -- debug测试

一、idea 中 Http client 使用 二、测试步骤&#xff0c;先进入主程序 2.1 先run &#xff0c;再debug 2.2 再进入想要测试的代码 2.2.1 进入测试的接口 三、程序逻辑 1&#xff09;用户注册逻辑&#xff1a;如果用户不存在再后端&#xff0c;看用户名&密码&校验码是…

一些优雅的监控运维技巧

准备工作 安装 sysstat sudo apt install sysstat查看某个进程的cpu情况 pidstst -u -p 256432查看某个进程的RAM情况 pidstst -r -p 256432查看某个进程的IO情况 pidstst -d -p 256432查看某个进程下的线程执行情况 pidstst -t -p 256432查看指定PID的进程对应的可执行文件…