2018牛客暑期ACM多校训练营第二场(有坑未填)

第二场终于等来学弟 开始(被队友带飞)的开心(被虐)多校之旅

A   run

A题是一个递推(dp?)+前缀和 因为看数据量比较大 就直接上前缀和了 

一个比较简单的递推 没有太多难点 签到题 需要注意的一个点是在最后求前缀和相减取模的过程中先加上一个MOD 防止相减变成负数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
const int MOD=1e9+7;
int dp[N][2];
int l[N],r[N],sum[N];
int main(){
    int q,k;
    scanf("%d%d",&q,&k);
    memset(dp,0,sizeof(dp));
    memset(sum,0,sizeof(sum));
    int maxn=0;
    for(int i=1;i<=q;i++){
        scanf("%d%d",&l[i],&r[i]);
        maxn=max(maxn,r[i]);
    }
    for(int i=0;i<=k-1;i++){
        dp[i][0]=1;
        dp[i][1]=0;
    }
    for(int i=k;i<=maxn;i++){
        dp[i][0]=(dp[i-1][0]+dp[i-1][1])%MOD;
        dp[i][1]=dp[i-k][0];
    }
    for(int i=1;i<=maxn;i++){
        sum[i]+=(sum[i-1]+dp[i][0]+dp[i][1])%MOD;
    }
    for(int i=1;i<=q;i++){
        printf("%d\n",(sum[r[i]]-sum[l[i]-1]+MOD)%MOD);
    }
    return 0;
} 
View Code

D   money

比赛中是队友写的 没有研究很多 赛后自己补题的时候用了模拟的思想 还有说可以用dp的 这里也没有想了

模拟的话 用tmp表示买进的价格 从a[0]开始与后一个比较 如果a[i]小于tmp 则表明可以用更低的价格去购买 同时用flag=0标记表明这一个是可以买的商品 

如果a[i]大于tmp 则表明这是可以卖出的价格 假设在这一个点卖出 用flag=1标记在这里可以卖出 tmp更新为a[i] 用于检查之后是否有连续价格更高的可以卖的商品 如果之前已经有标记flag为1 表示前面的cnt已经有过更新 这里就不用再更新了 

具体代码如下

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int a[maxn];
int main(){
    int t,n;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        } 
        ll sum=0,cnt=0,tmp=a[0];
        int flag=0;
        for(int i=1;i<n;i++){
            if(tmp>a[i]){
                tmp=a[i];
                flag=0;
            }
            if(tmp<a[i]){
                sum+=(a[i]-tmp);
                cnt+=2;
                tmp=a[i];
                if(flag==1) cnt-=2;
                flag=1;
             }
        }
        printf("%lld %lld\n",sum,cnt);
    }
    return 0;
} 
View Code

剩余题目先留坑 补完题再来

猜你喜欢

转载自www.cnblogs.com/whdsunny/p/9350390.html