当前位置: 首页 > article >正文

【算法练习】尺取法——答案

这是答案!!!没做不要抄(去这里看题目做)

第一题(求和为C)

#include<bits/stdc++.h>
using namespace std;
int n,c,a[100005],k,ans;
int main(){
    cin>>n>>c;
    for(int i=1;i<=n;i++)
    {
		cin>>a[i];
    }
    k=k+a[1]; 
    for(int x=1,y=2;y<=n;y++)
	{
        k+=a[y];
		while(k>c)
        {
            k-=a[x++];
        }
		if(k==c && y-x>0) ans++;   
    }
    cout<<ans;
    return 0;
}

第二题(黑白奶牛)

#include<bits/stdc++.h>
using namespace std;
int sum[100001];
int t,l,r,s,ans=0;
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        if(t==0) sum[i]=sum[i-1]+1;
        else sum[i]=sum[i-1];
    }
    l=r=0;
    while(r<=n)
    {
        s=sum[r]-sum[l-1];
        if(s<=k)
        {
            ans=max(ans,r-l+1);
            r++;
        }
        else l++;
    }
    cout<<ans;
    return 0;
}

第三题(连续子序列)

#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],s[100005],mi=INT_MAX,sum,i=1,j;
long long ss;
int main()
{
    cin>>n>>ss;
    for(int x=1;x<=n;x++)
    {
    	cin>>a[x];
        sum+=a[x];
        s[x]=s[x-1]+a[x];
        if(sum>=ss) sum=INT_MIN,j=x;
    }
    for(;j<=n;)
    {
        if(s[j]-s[i-1]>=ss) mi=min(j-i+1,mi),i++;
        else j++;
        if(i==j) j++;
    }
    if(mi==INT_MAX)mi=0;
    cout<<mi;
    return 0;
}

第四题(射箭) 

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],s[2005],minn=INT_MAX,ans;
int main(){
    cin>>n>>m;
    for (int i = 1;i<=n;i++)
	{
        cin>>a[i];
    }
    int l=1,r=1; 
    for (;r<=n;r++)
	{
        s[a[r]]++;
        if (s[a[r]]==1) ans++;
        while(ans>=m)
		{
            minn=min(minn,r-l+1);
            s[a[l]]--;
            if(s[a[l]]==0) ans --;
            l++;
        }
    }
    if (minn==INT_MAX) minn=-1;
    cout<<minn;
    return 0;
}

第五题(最短序列)

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],k,ans=INT_MAX;
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]=(1-a[i])+a[i-1];
    }
    int l=1,r=1;
    for(;r<=n;r++)
    {
        while(a[r]-a[l-1]>=k)
        {
            ans=min(ans,r-l+1);
            l++;
        }
    }
    if(ans==INT_MAX) ans=0;
    cout<<ans;
    return 0;
}

第六题(唯一的雪花(一))

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int n,a[1000005],b[1000005],ans=0,s;
signed main(){
    cin>>t;
    while(t--)
    {
        
        cin>>n;
        ans=0,s=0;
        for(int i=1;i<=1000000;i++) a[i]=0;
        for(int i=1;i<=1000000;i++) b[i]=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }    
        int l=1,r=1;
        for(;r<=n;r++)
        {
            b[a[r]]++,s++;
            while(b[a[r]]>1)
            {
                b[a[l]]--,l++,s--;
            }
            ans=max(ans,r-l+1);
        }
        cout<<ans<<"\n";
    }
    return 0;
}

不会的私聊我哈!


http://www.kler.cn/a/444975.html

相关文章:

  • 在 Spring Boot 3 中实现基于角色的访问控制
  • 第二十四天 循环神经网络(RNN)基本原理与实现
  • Nginx中Server块配置的详细解析
  • Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入
  • 【Rust自学】3.3. 数据类型:复合类型
  • Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架
  • 【Linux篇】基础开发工具-编译器gcc/g++
  • 算法训练第二十三天|93. 复原 IP 地址 78. 子集 90. 子集 II
  • Restaurants WebAPI(一)—— clean architecture
  • ABeam 德硕 | ABeam旗下艾宾信息技术开发(上海)有限公司大连分公司数交会之行全景回顾
  • 51c视觉~合集33
  • 【GESP】C++二级考试大纲知识点梳理, (4)流程图
  • metagpt中ActionNode的用法
  • 如何保证开源AI呼入机器人和AI呼出机器人的数据安全性?
  • 系统架构设计师 (论文范文 --- 论基于rest服务的web应用系统设计)
  • 解锁移动设备管理新技能-RayLink远程控制手机
  • 在Centos7上安装MySQL数据库 How to install MySQL on Centos 7
  • Android Compose list 下拉刷新、上拉加载更多
  • JS实现在线预览HTML文件
  • 分布式刚度编织,让可穿戴触觉更出色 ——Haptiknit
  • Visio——同一个工程导出的PDF文件大小不一样的原因分析
  • 深度学习笔记27_RNN实现阿尔茨海默病诊断(pytorch)
  • 基础2:值类型与右值引用
  • React和Three.js结合-React Three Fiber
  • 前端面经每日一题Day16
  • 华为ensp--BGP路径选择-AS_Path