BestCoder Round #86 HDU 5804,HDU 5805,HDU 5806,HDU 5807

第一题: HDU 5804 链接

0 ~ 商品总和之间的任意价格都可以取到 每次判断记录是否大于总和即可

代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#define sf scanf
#define pf printf
using namespace std;
typedef long long LL;

int main(){
    int T,n,m;
    LL temp,sum;
    sf("%d",&T);
    while( T-- ){
        sum = 0;
        sf("%d %d",&n,&m);
        for(int i = 0;i < n;++i){
            sf("%I64d",&temp);
            sum += temp;
        }
        for(int i = 0;i < m;++i){
            sf("%I64d",&temp);
            if(temp > sum){
                pf("1");
            }else pf("0");
        }
        pf("\n");
    }
    return 0;
}

第二题: HDU 5805 链接

记录前缀和后缀最大值f,g 枚举所有去掉点 求左端点 的 前缀最大值 、右端点后缀最大值,左右端点距离 的MAX 求和即可

long long 没注意 被hack了
然后hack我的人 我已经关注你了!

代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#define sf scanf
#define pf printf
#define fabs(n) ((n) > 0 ? n : -(n))
using namespace std;
typedef long long LL;
const int maxn = 100000 + 5;
int A[maxn];
int pre_max[maxn];
int tail_max[maxn];
int main(){
    int T;
    sf("%d",&T);
    while( T-- ){
        int n;sf("%d",&n);
        for(int i = 0;i < n;++i){
            sf("%d",&A[i]);
        }
        pre_max[0] = 0;
        for(int i = 1;i < n;++i){
            pre_max[i] = max(pre_max[i - 1],fabs(A[i - 1] - A[i]));
        }

        tail_max[n - 1] = 0;
        for(int i = n - 2;i >= 0;--i){
            tail_max[i] = max(tail_max[i + 1],fabs(A[i + 1] - A[i]));
        }
        LL ans = 0;
        for(int i = 1;i < n - 1;++i){
            ans += max(pre_max[i - 1],max( tail_max[i + 1] ,fabs(A[i - 1] - A[i + 1])) );
        }
        ans += tail_max[1] + pre_max[n - 2];
        pf("%I64d\n",ans);
    }
    return 0;
}

第三题: HDU 5806 链接

和题解的比起来我的有些复杂
枚举区间坐端点 之后二分查找合法的最左右端点p
∑(n - p + 1)就是答案了

代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#define sf scanf
#define pf printf
using namespace std;
const int maxn = 200000 + 5;
int sum[maxn];
typedef long long LL;
int main(){
//    freopen("read.txt","r",stdin);
    int T;
    sf("%d",&T);
    int n,k,m;
    while( T-- ){
        sf("%d%d%d",&n,&m,&k);
        for(int i = 1;i <= n;++i){
            sf("%d",&sum[0]);
            if(sum[0] >= m){
                sum[i] = 1;
            }else sum[i] = 0;
        }

        sum[0] = 0;
        for(int i = 1;i <= n;++i){
            sum[i] = sum[i - 1] + sum[i];
        }
//        for(int i = 1;i <= n;++i) pf("%d\n",sum[i]);
        LL ans = 0;
        for(int i = 1;i <= n;++i){
//            pf("aa");
            int p = lower_bound(sum + 1,sum + n + 1,sum[i - 1] + k) - sum;
            ans += n - p + 1;
        }
        pf("%I64d\n",ans);
    }
    return 0;
}

第四题:HDU 5807 链接

简单的DAG图 初始化将两个城市不能通信的状态值 设为0
dp[i][j][k] = ∑dp[a][b][c]
加了一个状态p表示此时是第几个人移动到 0表示3人都移动完成 加快的算法速度

代码:

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#define sf scanf
#define pf printf
using namespace std;
int fabs(int n){
    return n > 0 ? n : -n;
}
typedef long long LL;
const int maxn = 51;
const LL mod = 998244353;
LL dp[maxn][maxn][maxn][4];
int kk[maxn];
vector<int> Adj[maxn];
LL get_next_point(int a,int b,int c,int lable){
    LL &ans = dp[a][b][c][lable];
    if(ans != -1) return ans;
    ans = 0;
    if(lable == 0){
        ans = 1;
        ans += get_next_point(a,b,c,1);
        ans %= mod;
//        pf("%d %d %d %lld\n",a,b,c,ans);
        return ans;
    }
    if(lable == 1){
        for(int i = 0;i < Adj[a].size();++i){
            ans += get_next_point(Adj[a][i],b,c,2);
            ans %= mod;
        }
    }
    if(lable == 2){
        for(int i = 0;i < Adj[b].size();++i){
            ans += get_next_point(a,Adj[b][i],c,3);
            ans %= mod;
        }
    }
    if(lable == 3){
        for(int i = 0;i < Adj[c].size();++i){
            ans += get_next_point(a,b,Adj[c][i],0);
            ans %= mod;
        }
    }
    return ans;
}


void init(){
    for(int i = 0;i < maxn;++i){
        Adj[i].clear();
    }
}

int main(){
//    freopen("read.txt","r",stdin);
    int T;
    int n,m,k,q;
    sf("%d",&T);
    while( T-- ){
        init();
        sf("%d%d%d%d",&n,&m,&k,&q);

        for(int i = 1;i <= n;++i){
            sf("%d",&kk[i]);
        }
        for(int i = 0;i < m;++i){
            int u,v;sf("%d%d",&u,&v);
            Adj[u].push_back(v);
        }

        memset(dp,-1,sizeof(dp));
        for(int i = 1;i <= n;++i){
            for(int j = 1;j <= n;++j){
                if(fabs( kk[i] - kk[j] ) > k){
//                    pf("%d %d\n",i,j);
                    for(int p = 1;p <= n;++p){
                        dp[i][j][p][0] =  dp[i][p][j][0] = dp[p][i][j][0] = 0;
                    }
                }
            }
        }
        for(int i = 0;i < q;++i){
            int a,b,c;
            sf("%d%d%d",&a,&b,&c);
            printf("%lld\n",get_next_point(a,b,c,0));
        }
    }
    return 0;
}
标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值