数青蛙​、[USACO10FEB]Chocolate Giving S

news2024/11/24 7:19:39

一、1419. 数青蛙

思路

这道题有俩种解法,一是记数,二是贪心

记数:

这是官方的题解

我们用frog_ num来表示现在正在发出蛙鸣声的青蛙数目,用cnt[c] 示已经发出-次有效蛙鸣中的字符c的青蛙个数,比如当cnt['c'] = 2时表示当前有2只青蛙已经发出了有效蛙鸣中的字符‘c’,下-个要发出学符r'。那么我们遍历字符串croakOfFrogs来模拟青蛙蛙鸣,现在记遍历到的字符为c,有:


1.若c='c',则需要-只青蛙开始发出蛙鸣,有fog_ num= fog_ num+ 1, cnt{'c']= cnt'c']+ 1。
2.则我们记prec为-次有效蛙鸣中该字符c的前一个字符
3.若当前cnt[prec]= 0,即没有青蛙可以发出字符c,直接返回-1。
4.否则cntprec] = cntprec]- 1, cnt[c]= cnt[c] +1。 哨c=k'时,说明一只青蛙完成了完
5.整的- -次蛙鸣,此时正在发出蛙鸣声的青蛙数目减- -,有: fog. num= fog_ num- 1。

若遍历完还有正在发出蛙鸣的青蛙,即fog_ num > 0,说明croakOfFrogs 不是被若干有效的蛙鸣混合而成,直接返回- 1。 否则我们只要返回在遍历的过程中正在发出蛙鸣的青蛙数目的最大值即可。
贪心:

这里有大佬的图片

 代码实现

记数:
 

int minNumberOfFrogs(char * croakOfFrogs){
    int len=strlen(croakOfFrogs);
    if(len%5!=0)return -1;
    int res=0,num=0;
    int cnt[4],map[26];
    memset(cnt,0,sizeof(cnt));
    map['c'-'a']=0;
    map['r'-'a']=1;
    map['o'-'a']=2;
    map['a'-'a']=3;
    map['k'-'a']=4;
    for(int i=0;i<len;i++)
    {
        char c=croakOfFrogs[i];
        int t=map[c-'a'];
        if(t==0)
        {
            cnt[t]++;
            num++;
            if(num>res)res=num;
        }
        else
        {
            if(cnt[t-1]==0)return -1;
            cnt[t-1]--;
            if(t==4)num--;
            else cnt[t]++;
        }
    }
    if(num>0)return -1;
    return res;
}

贪心

int minNumberOfFrogs(char * croakOfFrogs){
    int len=strlen(croakOfFrogs);
    int cnt[5]={0};
    for(int i=0;i<len;i++)
    {
        switch(croakOfFrogs[i])
        {
           case 'c':
                if(cnt[4])cnt[4]--;
                cnt[0]++;
                break;
            case 'r':
                if(cnt[0])
                {
                    cnt[0]--;
                    cnt[1]++;
                }
                else return -1;
                break;
            case 'o':
                if(cnt[1])
                {
                    cnt[1]--;
                    cnt[2]++;
                }
                else return -1;
                break;
            case 'a':
                if(cnt[2])
                {
                    cnt[2]--;
                    cnt[3]++;
                }
                else return -1;
                break;
            case 'k':
                if(cnt[3])
                {
                    cnt[3]--;
                    cnt[4]++;
                }
                else return -1;
                break;
        }
    }
    if(cnt[0]==0&&cnt[1]==0&&cnt[2]==0&&cnt[3]==0)return cnt[4];
    else return -1;
}

 二、[USACO10FEB]Chocolate Giving S

 

 

思路

这道题是一道最短路劲的问题,虽然当时做的时候读懂题意花了很久,但是细想的话就很简单,就它就是多了一道要从a去b的时候还要必须经过一个点1,这样可以分成俩段路径,一种是1到a点的最短路径,一种是1到b点的最短路径,这样做就很简单了

要注意一点的是,这题不能用邻接矩阵来做,要用链式前向星或者邻接表来做,否则会爆掉

代码实现

#include<stdio.h>
#include<string.h>
#define inf 100001
int dis[50001], book[50001], x[50001][50001];
int n, m, b, sum = 0;

int dijkstra(int from, int to)
{
    int i,pos;
    for (i = 1; i <= n; i++)  //初始化
    {
        book[i] = 0;
        dis[i] = x[from][i];
    }
    book[from]=1;
    for (i = 1; i < n; i++)
    {
        int min = inf;
        for (int j = 1; j <= n; j++)
        {
            if (book[j] == 0 && min > dis[j])
            {
                min = dis[j];
                pos = j;
            }
        }
        book[pos] = 1;
        for (int j = 1; j <= n; j++)
        {
            if (book[j] == 0 && dis[j] > dis[pos] + x[pos][j])
                dis[j] = dis[pos] + x[pos][j];
        }
    }
return dis[to];
}

int main()
{
    scanf("%d %d %d", &n, &m, &b);
    for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)x[i][j] = inf;
    while (m--)
    {
        int r, s, t;
        scanf("%d %d %d", &r, &s, &t);
        x[r][s] = t;
        x[s][r] = t;
    }
    while (b--)
    {
        int r, s;
        scanf("%d %d", &r, &s);
        if(s==1)sum=dijkstra(r,s);
        else sum = dijkstra(r, 1) + dijkstra(1,s);
        printf("%d\n", sum);
    }
    return 0;
}

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

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

相关文章

[mini LCTF 2023] 西电的部分

感觉比赛还是很不错&#xff0c;就是有点难了&#xff0c;不过都是简单题重复更没意思。作出一道来就有一点收获。 misc1 签到题也不简单&#xff0c;已经很久不作misc了&#xff0c;感觉这东西需要安的东西太多&#xff0c;怕机子累坏了。 一个复合的wav声音文件&#xff0…

【Android入门到项目实战-- 8.5】—— 使用HTTP协议访问网络的实践用法

目录 准备工作 一、创建HttpUtil类 二、调用使用 一个应用程序可能多次使用到网络功能&#xff0c;这样就会大量代码重复&#xff0c;通常情况下我们应该将这些通用的网络操作封装到一个类里&#xff0c;并提供一个静态方法&#xff0c;想要发送网络请求的时候&#xff0c;只…

【c语言】字符串匹配(搜索) | API仿真

c语言系列专栏&#xff1a;c语言之路重点知识整合 字符串知识点&#xff1a;字符串基本概念、存储原理 字符串匹配 目录 一、字符串匹配二、strstr仿真声明&#xff1a;指针方式定义&#xff1a;调用测试&#xff1a;运行结果&#xff1a; 一、字符串匹配 字符串匹配是对一个…

HttpClient连接池使用不当问题分析解决

目录 背景代码实现工具类功能实现模拟使用 问题分析与定位解决方案总结 背景 最近遇到一个HttpClient问题&#xff0c;某个接口一直报404错误。该接口使用HttpClient调用其他服务获取数据&#xff0c;为了提高接口调用性能&#xff0c;利用httpclient池化技术来保证请求的数量…

嵌入式中利用软件实现定时器的两种方法分析

目录 第一&#xff1a;简介 第二&#xff1a;链表实现方式 第三&#xff1a;结构体实现方式 第一&#xff1a;简介 在一般的嵌入式产品设计中&#xff0c;介于成本、功耗等&#xff0c;所选型的MCU基本都是资源受限的&#xff0c;而里面的定时器的数量更是有限。在我们软件…

Origin如何绘制基础图形?

文章目录 0.引言1.绘图操作2.图形设置3.图形标注 0.引言 因科研等多场景需要绘制专业的图表&#xff0c;笔者对Origin进行了学习&#xff0c;本文通过《Origin 2022科学绘图与数据》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对绘制基础图形进行阐述。 1.…

2023.5.7 第五十二次周报

目录 前言 文献阅读&#xff1a;基于BO-EMD-LSTM模型预测教室长期二氧化碳浓度 背景 思路 BO-EMD-LSTM 混合模型 EMD 算法 与其他模型的比较 结论 论文代码 总结 前言 This week, I studied an article that uses LSTM to predict gas concentration.This study wa…

Springboot +Flowable,按角色分配任务

一.简介 在为 UserTask 设置处理人的时候&#xff0c;除了设置单个的处理人&#xff0c;也可以设置 Group&#xff08;分组&#xff09;&#xff0c;就是某一个用户组内的所有用户都可以处理该 Task。 二.绘制流程图 首先我们还是使用之前旧的流程图&#xff0c;流程图截图如…

从0学Spring Boot框架(Spring Boot配置文件与Spring Boot日志文件)

文章目录 1. 什么是Spring Boot&#xff1f;2. 如何创建Spring Boot项目&#xff1f;3. 验证Spring Boot项目的创建3.1 补充添加依赖3.2 代码示例 4. Spring Boot配置文件4.1 配置文件的作用4.2 配置文件的格式4.2.1 properties的语法4.2.2 yml的语法4.2.3 properties与yml的对…

想把PDF转成Word?这三个免费在线工具不容错过!

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转为Word文档的情况。本文将介绍三种不同的PDF转Word的方法。 首先是推荐的PDF转Word网站&#xff1a;记灵在线工具&#xff08;http://remeins.com)。 这是一个功能非常强大的PDF在线处理网站&#xff0c;可以完全…

CNI_02_Flannel 跨主机通信Overlay Network三种实现

文章目录 一、前言二、跨主机网络三、UDP模式四、VXLAN模式4.1 VXLAN完全在内核态中构建Overlay Netwok覆盖网络4.2 VXLAN模式整个流程步骤1&#xff1a;网络请求从容器到宿主机步骤2&#xff1a;根据目的容器IP在Node1宿主机上找到正确的route路由步骤3&#xff1a;构建内部数…

深度学习实战项目(一)-基于cnn和opencv的车牌号识别

深度学习实战项目(一)-基于cnn和opencv的车牌号识别 网上大部分是关于tensorflow&#xff0c;使用pytorch的比较少&#xff0c;本文也在之前大佬写的代码的基础上&#xff0c;进行了数据集的完善&#xff0c;和代码的优化&#xff0c;效果可比之前好一点。 数据集 数据集来自…

AutoCV:Python基础总结

目录 Python基础总结前言Python基础课程总结第一课&#xff1a;开发环境和基本数据类型第二课&#xff1a;控制流程和函数第三课&#xff1a;闭包和根号2的求解第四课&#xff1a;类和三大神器第五课&#xff1a;文件IO和pickle、json第六课&#xff1a;作用域、模块和包、Data…

IDM下载器|Windows系统经典下载工具idm6.41|IDM如何在线视频下载工具 |下载视频教程

IDM全称Internet Download Manager,是一种将下载速度提高最多5倍的专业下载工具,支持大部分文件格式下载和基本所有的下载链接,无视网址本身下载限速,直接达到电脑该有的网速。 下载更快更可靠 下载INTERNET DOWNLOAD MANAGER(IDM下载器)开始您的极速下载旅程&#xff0c;永远…

鲲志说 我的创作纪念日(2023-05-07)

目录 前言有时候缘分就是这么巧&#xff01;努力终会有所获日常规划成就憧憬 前言 今天是个特殊的日子&#xff0c;是我成为创作者的第2048天。但不仅仅是因此今天才特殊&#xff0c;更重要的是因为你&#xff0c;今天才特殊&#xff0c;值得纪念。不管前路如何&#xff0c;积…

微信小程序开发19__第三方UI组件Vant Weapp的应用

为了提高小程序的开发效率&#xff0c; 可以考虑使用第三方 UI 组件来实现界面的视觉统一。 本文以有赞第三方 UI 组件库 Vant Weapp 为例&#xff0c;介绍如何使用自定义组件 实现一个小程序。 Vant Weapp 是一款轻量、 可靠的小程序UI组件库&#xff0c; 与有赞移动端组…

数字图像处理-绪论

数字图像处理-绪论 文章目录 前言一、闲谈二、什么是数字图像处理&#xff1f;2.1. 什么是数字图像&#xff1f;2.1.1. 可见光图像2.1.2. 不可见光图像 2.2. 什么是数字图像处理&#xff1f; 三、数字图像处理的前世今生3.1. 数字图像处理的前世3.2. 数字图像处理的今生 四、数…

计网笔记 01 概述 计算机网络体系结构、参考模型

文章目录 前言1、计网概述1.1 概念、组成、功能、分类1.1.1 概念1.1.2 计网组成1.1.2 计网分类 1.2 标准化工作及相关组织1.2.1 标准的分类 1.3 性能指标★★★1.3.1 速率相关性能指标1.3.2 时延相关指标 2、体系结构&参考模型★★★★★&#xff08;对应王道视频7-10p 相当…

【MySQL学习】MySQL 内置函数

文章目录 一、日期函数二、字符串函数三、数学函数四、其他函数 一、日期函数 函数名称功能描述current_data()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date()返回datetime的日期部分date_add(date, interval d_value_type)以date为基础&…

【2023/05/07】汇编语言

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第2天。 Share Stray birds of summer come to my window to sing and fly away. And yellow leaves of autumn,which have no songs,flutter and full there with a sigh. 译文&#xff1a; 夏天的鸟&…