IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Acwing第 42 场周赛【完结】 -> 正文阅读

[数据结构与算法]Acwing第 42 场周赛【完结】

老了,废了。该remake了。

4311. 最小值【签到】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n,m;
double ans=1e9,a,b;
int main(void)
{
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a>>b,ans=min(ans,a/b);
    printf("%.6lf\n",m*ans);
	return 0;
}

4312. 出现次数【前缀和 / KMP】

在这里插入图片描述
用的KMP获得位置,然后保存排序。
每次询问暴力查找,但过了r的时候break
比赛的时候想的前缀和,但是那个边界处理没想明白。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int n,m,k,s[N];
char a[N],b[N];//让其下标从1开始
int ne[N];//ne[i]表示前i个字符的最长的相等的前后缀
vector<pair<int,int>>ve;
void init()
{
    for(int i=2,j=0;i<=n;i++)
    {
        while(j&&a[i]!=a[j+1]) j=ne[j];
        if(a[i]==a[j+1]) j++;
        ne[i]=j;
    }
    for(int i=1,j=0;i<=m;i++)
    {
        while(j&&b[i]!=a[j+1]) j=ne[j];
        if(b[i]==a[j+1]) j++;
        if(j==n)//求a在b出现的所有的位置
        {
            ve.push_back({i-n+1,i});
            j=ne[j];
        }
    }
}
int main(void)
{
    cin>>m>>n>>k;
    cin>>b+1>>a+1;
    init();
    sort(ve.begin(),ve.end());
    while(k--)
    {
        int l,r; scanf("%d%d",&l,&r);
        int cnt=0;
        for(int i=0;i<ve.size();i++)
        {
            int x=ve[i].first,y=ve[i].second;
            if(l<=x&&y<=r) cnt++;
            if(y>r) break;
        }
        printf("%d\n",cnt);
    }
	return 0;
}

前缀和做法:我们将子串的开头作为标识。
故求 [l,r] 内的子串个数等于s[r-b.size()+1]-s[l-1]

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int n,m,k,s[N];
string a,b;
int main(void)
{
    cin>>m>>n>>k;
    cin>>a>>b;
    a="0"+a;
    for(int i=1;i<a.size();i++)
    {
        s[i]=s[i-1];
        if(a.substr(i,b.size())==b) s[i]++;
    }
    while(k--)
    {
        int l,r; scanf("%d%d",&l,&r);
        r=r-b.size()+1;
        if(r<l) cout<<0<<endl;
        else cout<<s[r]-s[l-1]<<endl;
    }
	return 0;
}

4313. 满二叉树等长路径【递归 / 贪心】

在这里插入图片描述

//递归加贪心,因为是路径和,只要父节点增加,
//对应的子节点都会增加,所以只要把每个子节点搞成相同的即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int w[N],n,ans;
int dfs(int u)//子树到u的距离
{
    if(u>=pow(2,n+1)) return 0;
    int l=dfs(u*2)+w[u*2];
    int r=dfs(u*2+1)+w[u*2+1];
    ans+=abs(l-r);//俩子树弄成相同的值的花费
    return max(l,r);
}
int main(void)
{
    cin>>n;
    for(int i=2;i<pow(2,n+1);i++) cin>>w[i];
    dfs(1);
    cout<<ans;
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:50:27  更:2022-03-15 22:51:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:51:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码