Contest3047 - 计科2101~2104算法设计与分析上机作业04

目录

问题 A: 繁衍

问题 B: 平面分割 

问题 C: 二分查找(binary)

 问题 D: 求逆序对(deseq)

问题 E: 任务安排问题

 问题 F: 最长单调递增子序列的长度


问题 A: 繁衍

题目描述

有一种生物A,一天就能长大,长大的A每过一天就能生一个小A(刚长大的A会从下一天开始生小A),小A过一天后也会长大。。。以此往复。现在,我们有一个刚出生的小A,问n天后共有多少个长大的生物A

输入

输入仅一行,包含一个自然数 n,0<=n<=46.

输出

长大的A的个数

样例输入 

5

样例输出 

5

提示

sample 2
0
0

模拟一下就好啦

#include<bits/stdc++.h>
#define int long long
using namespace std;

void fun(int n){
    int all=0;
    int young=1;
    int old=0;
    for(int i=1;i<=n;i++){
        all=young+old;
        int temp=old;
        old+=young;
        young=temp;
    }
    cout<<all<<endl;
}

signed main(){
    int n;
    cin>>n;
    fun(n);
}

问题 B: 平面分割 

题目描述

同一平面内有 n(n≤500)条直线,已知其中 p(p≥2)条直线相交于同一点,则这 n 条直线最多能将 平面分割成多少个不同的区域? 

输入

两个整数 n(n≤500)和 p(2≤p≤n)。 

输出

一个正整数,代表最多分割成的区域数目。 

样例输入 

12 5

样例输出 

73

画个图,不难看出,要使分割的区域最大,必然相交的线要最多,

不难看出,当五条线交与一点时,再新增一条线,与之相交的线最多有五条,最多增加5+1块区域

#include<bits/stdc++.h>
#define int long long
using namespace std;

void fun(int n,int k){
    int ans=k*2;
    for(int i=k+1;i<=n;i++){
        ans+=i;
    }
    cout<<ans<<endl;
}

signed main(){
    int n,k;
    cin>>n>>k;
    fun(n,k);
}

问题 C: 二分查找(binary)

题目描述

  给出有 n 个元素的由小到大的序列,请你编程找出某元素第一次出现的位置。(n<=10^6)

输入

 第一行:一个整数,表示由小到大序列元素个数;下面 n 行,每行一个整数;最后一行 一个整数 x,表示待查找的元素;

输出

  如果 x 在序列中,则输出 x 第一次出现的位置,否则输出-1。

样例输入 

5
3
5
6
6
7
6

样例输出 

3

这里不是非得用二分,方法很多,像二维数组,map,甚至遍历,既然它叫我们用二分,那我们就用二分吧

注意判别不存在的情况

#include<bits/stdc++.h>
#define int long long
using namespace std;

vector<int>a;

void fun(int n,int t){
    int l=0,r=n-1;
    int mid=(l+r)/2;
    int ans=0;
    int flag=0;
    while(r-l>1){
        if(a[mid]>t){
            r=mid;
            mid=(l+r)/2;
        }
        else if(a[mid]<t){
            l=mid;
            mid=(l+r)/2;
        }
        else{
            ans=mid;
            flag=1;
            break;
        }
    }
    if(a[r]==t){
        ans=r;
    }
    else if(a[l]==t){
        ans=l;
    }
    else{
        if(!flag){
            cout<<-1<<endl;
            return ;
        }
    }
    while(a[ans]==t){
        ans--;
    }
    cout<<ans+2<<endl;
}

signed main(){
    int n;
    cin>>n;
    int temp;
    for(int i=0;i<n;i++){
        cin>>temp;
        a.push_back(temp);
    }
    int t;
    cin>>t;
    fun(n,t);
}

 问题 D: 求逆序对(deseq)

题目描述

给定一个序列 a1,a2,…,an,如果存在 i<j 并且 ai>aj,那么我们称之为逆序对,求逆序对 的数目。

输入

第一行为 n,表示序列长度,接下来的 n 行,第 i+1 行表示序列中的第 i 个数。

输出

所有逆序对总数。

样例输入 

4
3
2
3
2

样例输出 

3

提示

N<=10^5,Ai<=10^5

分治???太难了,不会,我用set试试

#include<bits/stdc++.h>
#define int long long
using namespace std;

class Mycompare{
    public:
        bool operator()(int v1, int v2){
            return v1 > v2;
        }
};

multiset<int,Mycompare>a;

signed main(){
    int n;
    cin>>n;
    int temp;
    int ans=0;
    for(int i=0;i<n;i++){
        cin>>temp;
        a.insert(temp);
        ans+=distance(a.begin(),a.find(temp));
    }
    cout<<ans<<endl;
}

我擦,时间超了,没道理呀,On*logn鸭。(可能是distance函数太慢了,我去,它的时间复杂度是On,你太baby了)

吐了,老老实实分治吧

有种归并排序的意思

#include<bits/stdc++.h>
#define int long long
using namespace std;

int a[100005];
int b[100005];

int fun(int l,int r){
    if(l==r){
        return 0;
    }
    int mid=(l+r)/2;
    int ans=fun(l,mid)+fun(mid+1,r);
    for(int i=l,j=l,k=mid+1;i<=r;i++){
        if(j>mid){ 
            b[i]=a[k++];
            continue;
        }
        if(k>r){
            b[i]=a[j++];
            continue;
        }
        if(a[j]>a[k]){
            b[i]=a[k++];
            ans+=mid-j+1;
        }
        else{
            b[i]=a[j++];
            continue;
        }
    }
    for(int i=l;i<=r;i++){
        a[i]=b[i];
    }
    return ans;
}

signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cout<<fun(1,n)<<endl;
}

问题 E: 任务安排问题

题目描述

某个系统中有一个设备,该设备每次只能分配给一个任务使用,且只有当任务结束后才能再分配给另一个任务使用。 假设系统启动时间计为时间0点,预先有一份任务计划表,预定了每个任务的开始时间点和持续时间。 要求设计算法统计出该设备最多能够满足任务计划表中的多少个任务的使用请求。

输入

输入的第一行为一个整数m,表示要计算的用例的个数。 从第二行开始是m个测试用例的输入数据。 每个测试用例的第一行为一个整数n,表示任务计划表中的任务个数,n≤1000。 每个测试用例的第二行为2*n个整数,分别为每个任务的开始时间点和持续时间,整数之间用空格隔开。

输出

要求对每个测试用例输出一行结果,输出结果为该测试用例下,能够满足的最大任务数。

样例输入 

1
11
12 2 2 11 8 4 8 3 6 4 5 4 3 5 5 2 0 6 3 2 1 3

样例输出 

4

 结束时间早的优先

#include <bits/stdc++.h>
using namespace std;
#define int long long

struct info{
    int s;
    int e;
};


bool mysort(info a,info b){
    return a.e<b.e;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<info>all(n);
        int temp;
        for(int i=0;i<n;i++){
            cin>>all[i].s>>temp;
            all[i].e=all[i].s+temp;
        }
        sort(all.begin(),all.end(),mysort);
        int ti=-1;
        int ans=0;
        for(int i=0;i<n;i++){
            if(ti<=all[i].s){
                ans++;
                ti=all[i].e;             
            }
        }
        cout<<ans<<endl;
    }
}

 问题 F: 最长单调递增子序列的长度

题目描述

请设计算法找出一个整数序列中最长单调递增子序列的长度。

输入

第一行为测试用例个数n,0<n≤1000。 第二行开始,每行为一个测试用例。每个测试用例由一组空格间隔的整数组成,第一个整数m为序列的长度,后面m个整数为序列内容,0<m≤1000。0≤ai≤1000

输出

对每个测试用例,输出其最长单调递增子序列的长度,每个输出占一行。

样例输入 

2
5 1 3 2 4 5
6 3 2 4 5 3 2

样例输出 

4
3

动态规划嘛。。。

注意:dp[i]是表示i之前的最大递增子序列,我们如何求dp[i]呢?

当然是遍历i之前的dp数组,如果a[i]>a[j],那么dp[i]=max(dp[j]+1,dp[i])

dp数组初始化为1嗷 

#include <bits/stdc++.h>
using namespace std;
#define int long long

int a[1005];

signed main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        int dp[1005];
        for(int i=0;i<1005;i++){
            dp[i]=1;
        }
        int ans=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<i;j++){
                if(a[i]>a[j]){
                    dp[i]=max(dp[j]+1,dp[i]);
                }
            }
            ans=max(ans,dp[i]);
        }
        cout<<ans<<endl;
    }
}

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

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

相关文章

[OtterCTF 2018]之Misc篇(NSSCTF)刷题记录⑦

NSSCTF-Misc篇-[OtterCTF 2018] [OtterCTF 2018]General Info[OtterCTF 2018]Play Time[OtterCTF 2018]Silly Rick[OtterCTF 2018]What the password?[OtterCTF 2018]Name Game[OtterCTF 2018]Hide And Seek[OtterCTF 2018]Name Game 2[OtterCTF 2018]Path To Glory[OtterCTF …

2023年第二十届五一数学建模竞赛C题:“双碳”目标下低碳建筑研究-思路详解与代码答案

该题对于模型的考察难度较低&#xff0c;难度在于数据的搜集以及选取与处理。 这里推荐数据查询的网站&#xff1a;中国碳核算数据库&#xff08;CEADs&#xff09; https://www.ceads.net.cn/ 国家数据 国家数据​data.stats.gov.cn/easyquery.htm?cnC01 以及各省市《统…

安陆EGS20 SDRAM仿真

目录 一. 搭建仿真平台 二. 实现SDRAM连续写入1024个数据&#xff0c;然后再连续读出&#xff0c;并比较 1. 调试过程中问题&#xff1a; 2. 顶层代码 3. 功能代码 三. SDRAMFIFO实现上述功能调试 1. 代码设计要点 2. 仿真过程问题 3. 上板运行调试 安陆反馈&#xf…

YOLOv6 4.0 使用记录: OpenCV DNN C++推理

目录 1、下载源码 2、下载权重文件 3、配置环境 4、推理 6、ONNX格式导出 权重文件为yolov6list_s.pt 权重为yolov6.pt 7、opencv DNN推理 8、个人总结 1、下载源码 下载最新的4.0版本的 2、下载权重文件 我下的是YOLOv6Lite-S 3、配置环境 cd到项目目录&#xff0c;运…

3.6 cache存储器

学习步骤&#xff1a; 我会采取以下几个步骤来学习Cache存储器&#xff1a; 确定学习目标&#xff1a;Cache存储器作为一种高速缓存存储器&#xff0c;通常用于提高计算机系统的运行效率。因此&#xff0c;我需要明确学习Cache存储器的目的&#xff0c;包括了解其原理、结构和…

一图看懂 requests 模块:用Python编写、供人类使用的HTTP库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 requests 模块&#xff1a;用Python编写、供人类使用的HTTP库, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【requests】统计常量str 模块3 w…

java数据结构之HashMap

目录 前言 1、初始化 1.1、初始化 1.2、插入第一条数据 2、数组 链表 2.1、插入数据&#xff1a;没有hash冲突 2.2、插入数据&#xff1a;Key不同&#xff0c;但产生hash冲突 2.3、插入数据&#xff1a;Key相同 3、数组 红黑树 3.1、链表如何转化为红黑树&#xff1f; 3.…

golang - switch

switch 的使用 switch 语句用于基于不同条件执行不同操作&#xff0c;&#xff0c;直每一个 case 分支都是唯一的&#xff0c;从上到下逐一测试到匹配为止匹配项后面也不需要再加 break switch 表达式 {case 表达式1, 表达式2, ... :语句块1case 表达式2, 表达式3, ... :语句块…

GPT:你知道这五年我怎么过的么?

时间轴 GPT 首先最初版的GPT&#xff0c;来源于论文Improving Language Understanding by Generative Pre-Training&#xff08;翻译过来就是&#xff1a;使用通用的预训练来提升语言的理解能力&#xff09;。GPT这个名字其实并没有在论文中提到过&#xff0c;后人将论文名最后…

【Unity3D小功能】Unity3D中实现轮船在水面上移动效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 标题是啥我写啥&#xff0c;大家好&#xff0c;今天给大家带来…

你的 Kubernetes 安全吗?最新benchmark的重要趋势解读

导语 疫情过后经济处在缓慢复苏的阶段&#xff0c;对于企业应该优先考虑数字化转型&#xff0c;因为它可以促进增长和创新。 不可避免地&#xff0c;当今的数字化转型计划依赖于云的可扩展性和灵活性。 虽然在云中启动应用程序和服务带来了许多机遇&#xff0c;但也带来了新的…

云原生Istio架构和组件介绍

目录 1 Istio 架构2 Istio组件介绍2.1 Pilot2.2 Mixer2.3 Citadel2.4 Galley2.5 Sidecar-injector2.6 Proxy(Envoy)2.7 Ingressgateway2.8 其他组件 1 Istio 架构 Istio的架构&#xff0c;分为控制平面和数据面平两部分。 - 数据平面&#xff1a;由一组智能代理&#xff08;[En…

HCIA-RS实验-路由配置-静态路由缺省路由(2)

接上文HCIA-RS实验-路由配置-静态路由&缺省路由 继续完成缺省路由&#xff1b;其他原截图就不再一一截图&#xff0c;有需要往回看一篇。 关闭上一篇的接口shutdown&#xff08;重新启动&#xff09; 上一篇在R2关闭的接口2 需要重新启动&#xff0c;输入 undo shutdown…

4月VR大数据:PICO平台应用近400款,领跑国内VR生态

Hello大家好&#xff0c;每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么&#xff1f;关注这里就对了。我们会统计Steam平台的用户及内容等数据&#xff0c;每月初准时为你推送&#xff0c;不要错过喔&#xff01; 本数据报告包含&#xff1a;Steam VR硬…

我们公司的面试,有点不一样!

我们公司的面试&#xff0c;有点不一样&#xff01; 朋友们周末愉快&#xff0c;我是鱼皮。因为我很屑&#xff0c;所以大家也可以叫我屑老板。 自从我发了自己创业的文章和视频后&#xff0c;收到了很多小伙伴们的祝福&#xff0c;真心非常感谢&#xff01; 不得不说&#…

Elasticsearch:人类语言到 Elasticsearch 查询 DSL

Elasticsearch 为开发者提供了强大的搜索功能。Elasticsearch 使用 DSL 来进行查询。对于很多从关系数据库过来的人&#xff0c;这个很显然不很适应。虽然我们可以使用 SQL 来进行查询&#xff0c;但是我们必须通过一些命令来进行转换。我们可以通过阅读文章&#xff1a; Elast…

【Java面试八股文】数据库篇

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 请你说说MySQL索引,以及它们的好处和坏处 请你说说MySQL的索引是什么结构,为什么不用哈希表 请你说说数据库索引的底…

Segmentation of retinal vessels based on MRANet

随手把一篇论文的创新部分抽取出来 MLF 为了更好地聚合每一层的上采样特征信息和MSR块的信息&#xff0c;在解码路径中使用了MLF块&#xff0c;这允许最大限度地重用功能&#xff0c;从而减少细节的损失。MLF块的结构如图2所示。 如图2所示&#xff0c;有两种输入:input1和inp…

观察 | 卫浴产业数字化转型下的中国智造样本

文 | 智能相对论 作者 | 佘凯文 数字技术的发展已成为全球科技变革向高端技术不断升级的方向。 年初&#xff0c;中共中央、国务院印发《数字中国建设整体布局规划》&#xff0c;这是党的二十大后党中央在我国数字化发展领域作出的最全面擘画&#xff0c;从顶层设计的高度对…

ETL工具 - Kettle 介绍及基本使用

一、Kettle 介绍 在介绍 Kettle 前先了解下什么是 ETL&#xff0c;ETL是 Extract-Transform-Load 的缩写&#xff0c;即数据 抽取、转换、装载 的过程&#xff0c;对于企业或行业应用来说&#xff0c;经常会遇到各种异构数据的处理、转换、迁移等操作&#xff0c;这些操作有可…
最新文章