【CF Round13】A、B - Minimal Cost、【C仅思路】

传送门

A - K-th Largest Value

题意:
一个数组,里面只有0,或1。
q组操作:1or2,
1取1-ai,2查询第k个最大值

题解:
写一个sum记录1的数目即可

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5+3;
ll a[maxn];
bool cmp(int a,int b){
   return a>b;
}
int main(){
    int n,q;cin>>n>>q;
    int sum=0;
    for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum+=a[i];}
    while(q--){
        int t;cin>>t;
        int x;cin>>x;
        if(t==1){
         a[x]=1-a[x];
        if(a[x]==1)sum++;
        else sum--;
        }
        else if(t==2){
               // cout<<"**"<<sum<<endl;
            if(x<=sum)printf("1\n");
            else printf("0\n");

        }
    }

    return 0;
}

B - Minimal Cost

题意:
要求从(1,0)->(n,1e6+1),每行一个障碍物。
移动障碍物,上下花费u,左右花费v。
求最小花费。

题解:
三种情况:
1》竖着一道墙:min(v+v,u+v)
2》斜着一道墙:min(u,v)
3》剩下所有,不动即可实现

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+3;
ll a[maxn];
int main(){
    int t; scanf("%d",&t);
    while(t--){
        ll n,u,v;
        ll sum=0;
        ll mmax=0;
        scanf("%lld%lld%lld",&n,&u,&v);
        int f=1;
        for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                if(i!=1&&a[i]!=a[i-1])f=0;
                if(i!=1)mmax=max(abs(a[i]-a[i-1]),mmax);//斜着
        }
        if(f) sum=min(u+v,v+v);
        else if(mmax==1) sum=min(u,v);
        printf("%lld\n",sum);
    }
    return 0;
}

一些反思:
一直害怕出现这种情况:
在这里插入图片描述
可惜题目范围表示根本不会。。多看看题目!

C - Pekora and Trampoline

题意:
每次从任意点开始跳,且在此次跳跃过程中可进行连续跳跃:i+si,想要知道什么时候可以跳到全为1

题解:

每次都从第一个位置跳就会跳的最长,故而最优。
暴力必定会超时啦,看看如何简化。
用一个数组【f】记录该点被跳到过几次。
然后从头开始遍历。
1》若ai-1>fi,若想让它变为1,则它会影响【i+2】到【min(n,ai+i)】的值,全部进行+1。ans=ans+ai-1-fi。
2》fi>ai-1,【i+2】到【min(n,ai+i)】的值,全部进行+1,且fi-ai-1即ai变成1后又跳了多少次,使f i+1再加上fi-ai-1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值