首页 > 其他分享 >2024 暑假友谊赛-热身1

2024 暑假友谊赛-热身1

时间:2024-07-12 21:09:24浏览次数:19  
标签:int 热身 js 2024 solve long 友谊赛 dp define

知识点

1.Floyd算法的核心代码

//floyd算法计算到达两点的最小代价
    for(int k=0;k<=n;k++)//n是节点数
    {
        for(int i=0;i<n;i++)//每加一个节点都要枚举图看看有没有可以被更新的
        {
            for(int j=0;j<n;j++) if(dp[i][j]>dp[i][k]+dp[k][j]) dp[i][j]=dp[i][k]+dp[k][j];
        }
    }

题解

D - Wall
1.使用floyd算法计算一下每个点到每个点到最小花费即可,然后输入查询相加即可

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};


void solve()
{
    int h,w; cin>>h>>w;
    int dp[10][10];
    for(int i=0;i<=9;i++)
    {
        for(int j=0;j<=9;j++) cin>>dp[i][j];
    }
    //floyd算法计算到达两点的最小代价
    for(int k=0;k<=9;k++)
    {
        for(int i=0;i<=9;i++)
        {
            for(int j=0;j<=9;j++) if(dp[i][j]>dp[i][k]+dp[k][j]) dp[i][j]=dp[i][k]+dp[k][j];
        }
    }
    int ans=0;
    //输入查询相加即可
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++)
        {
            int x;
            cin>>x;
         if(x>=0)   ans+=dp[x][1];
        }
    }
    cout<<ans;
    
    
}


signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

C - Minimization
1.这题我们思维定式会去找最小值的位置,其实跟最小值的位置没关系,因为一定会遍历到这个最小值,所以只要计算到最右边界的次数即可

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};

void solve()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
    }
    int d=0,res=0;
    while(d<n)
    {
        if(d==0) d+=m;
        else d+=m-1;
        res++;
    }
    cout<<res;
    
}


signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

Linear Approximation
1.令ci=ai-i;则题目就转化为求abs(ci-b)的和,那么只有当b为差值的中位数,对总和的贡献最小

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};

void solve()
{
    int n;
    cin>>n;
    vector<int>ve(n+1);
    for(int i=1;i<=n;i++) {
        cin>>ve[i];
        ve[i]=ve[i]-i;
    }
    sort(ve.begin()+1,ve.end());
    int temp=ve[n/2+1];
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        ans+=abs(ve[i]-temp);
    }
    cout<<ans;
}


signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

C. Brutality

1.按题意来模拟,就是找几个连续字母代表的数字的最大和,但不能超过k次,也就是几个连续字母这段区间的前k个值(从大到小)的和,不足k个则全加进去
2.一段一段区间来处理,会使代码更加简洁快速

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};


void solve()
{
    int n,m;

    cin>>n>>m;
    vector<int>ve(n);
    for(int i=0;i<n;i++)
    {
        cin>>ve[i];
    }
    string s; cin>>s;
    int ans=0;
    for(int i=0;i<n;i++)
    {
        //遍历到几个连续相同的就进行一次处理
        int j=i;
        vector<int>fi;
        while(j<n&&s[i]==s[j])
        {
            fi.push_back(ve[j]);
            j++;
        }
        sort(fi.rbegin(),fi.rend());//从大到小排序
        //accumulate函数中的这个min最关键,这样可以避免你还要重新去开几个查询的数组来找值的和
        ans+=accumulate(fi.begin(),fi.begin()+min(m,(int)fi.size()),0);
        i=j-1;
    }
    cout<<ans;
   
    
}


signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

D - Equal Cut
1.我们把题目想象成,我们在一组已经排列好的数里面,选择3个位置放挡板
2.首先,我们肯定要枚举第二块挡板,先把这些数分为左右两个区间,然后在左右区间里面,在分别枚举一块合适的挡板
3.那么什么情况下最合适呢,当左右区间里的两个区间的绝对值差值最小是最合适的,因为题目要我们求最大和区间-最小和区间的值,也就是要让最小区间和尽量大,最大区间和尽量小,这样差值才会更小,所以当区间绝对值差值最小的时候,就可以满足了

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};
int sum[200005];
int js(int l,int r)//求区间的和
{
    return sum[r]-sum[l-1];
}


void solve()
{
    int n; cin>>n;
    vector<int>ve(n+1);for(int i=1;i<=n;i++) cin>>ve[i];
    for(int i=1;i<=n;i++) sum[i]=ve[i]+sum[i-1];
    //枚举第二刀把其分为L R区间
    int l=1,r=3;
    int ans=1e9;
    for(int i=2;i<=n-2;i++)//总共有n个元素第二刀最多切到n-2
    {
        while(l+1<i&&abs(js(1,l)-js(l+1,i))>=abs(js(1,l+1)-js(l+2,i))) l++;
        //相当于你在L这个区间 找位置切,直到找到L里左右区间差值最小
        //差值最小能够保证我们前面有一个使减数尽量大的区间
        while(r+1<n&&abs(js(i+1,r)-js(r+1,n))>=abs(js(i+1,r+1)-js(r+2,n))) r++;
        //在R区间是同理的
        set<int>se;
        //set自动从小到大排序
        se.insert(js(1,l));
        se.insert(js(l+1,i));
        se.insert(js(i+1,r));
        se.insert(js(r+1,n));
        ans=min(ans,abs(*se.begin()-*prev(se.end())));//prev用来获取最后一个值的地址
        
    }
    cout<<ans<<endl;
    
    
}


signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

标签:int,热身,js,2024,solve,long,友谊赛,dp,define
From: https://www.cnblogs.com/swjswjswj/p/18296839

相关文章

  • 2024全网最全AI工具集合
    AI应用分类一、AI聊天机器人ChatGPTAPP描述:OpenAI推出的AI聊天机器人和智能对话工具下载量:20586豆包APP描述:字节跳动推出的AI聊天机器人下载量:2878Kimi智能助手APP......
  • Spark Exam 20240710黄洛天
    SparkExam20240710黄洛天0.整体总结时间安排:0-1h,+200pts,1h-4h,+0pts(expected+25pts)A,B较简单。C,D较难。排名4。Acceptable,完全不失误可以拿rnk1,所以还是挺好。D是大数据结构,不太想打(事实上做二维前缀和可以简单地拿到10pts)A.花菖蒲考虑构造完全二叉树,然后多余的1度......
  • 2024 暑假友谊赛-热身1
    2024暑假友谊赛-热身1A-......
  • 2024暑假集训测试4
    前言比赛链接。这次和高中一起打的,排名一次比一次低了,差点出前一半了……主要是T1\(dijkstra\)唐氏复杂度打假了,T2挂分,T3没想出来压位,T4题都没看。T1最短路原题:luoguP2966[USACO09DEC]CowTollPathsG。本题考察对\(Floyed\)的理解,\(Floyed\)数组在没有......
  • 使用ScaleBar调整CAD设计的尺寸-devDept EyeShot 2024.2
    使用新的ScaleBar调整CAD设计的尺寸2024年7月10日devDeptSoftware的EyeShot2024.2提供了一个屏幕标尺,用于实时尺寸估算,从而消除了初始设计阶段的猜测。devDeptSoftware的Eyeshot可让您将强大的CAD功能集成到.NET应用程序中。......
  • 【专题】2024餐饮行业及营销趋势报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36256原文出处:拓端数据部落公众号2024年,餐饮行业的趋势展望聚焦于健康、国潮、单品爆款和情感体验四大方向。首先,健康成为了消费者在选择餐饮时的首要考量。人们越来越注重食材的新鲜度和健康性,对菜品的口味也有了更高的要求。这意味着餐饮品牌需......
  • 2024 暑假训练记录
    2024暑假集训记录Day1-7.7cszhpdx生日快乐!教练发了2015BJJLHN省队集训,大概把BJ的题顺了一遍,感受是十年前的题目都好板啊...ppt还没来得及看,只简单看了几个2015BJ省队集训Day2-7.82021.8.30-2024.7.8继续看BJ省队集训题,写题解。发现即使很板,但是......
  • Nessus Professional 10.7 Auto Installer for Ubuntu 24.04 (updated Jul 2024)
    NessusProfessional10.7AutoInstallerforUbuntu24.04(updatedJul2024)发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu24.04请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-ubuntu/,查看最新版。原创作品,转载请保留出处。Ness......
  • 2024-07-12 vue项目中 运行 npm run build 或 yarn build 打包 没有生成 xx.es.js 文
    我在写一个ui组件库,在打包时发现dist文件夹里没有生成我想要的xx.es.js文件,我查看了我的vue项目中的vue.config.js文件,发现build.lib没有指定输出的文件名解决方案:配置项目中的vue.config.js文件,参考我的......
  • vue3前端项目结构解析(2024-07-12)
    .├──build#打包脚本相关│  ├──config#配置文件│  ├──generate#生成器│  ├──script#脚本│  └──vite#vite配置├──mock#mock文件夹├──public#公共静态资源目录├──src#主目录│  ├──api#接口......