zoukankan      html  css  js  c++  java
  • 嵊州普及Day4T2

    题意:有一个单行走廊,每回合第ai个展柜会冒出来一只鬼,右边尽头有一个人间大炮和向最左传送门(费用均1金币),你需要每回合将所有鬼交换展柜,全部至最右,问若从一到n所有回合结束是需多少金币可射死所有鬼。

    思路:花一块可将一只鬼挪至最右,然后使用一个指针储蓄最右有几个鬼,然后相减就可以了。

    见代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int n,k,a[300001],b[300001];
    bool c[300001];
    int main()
    {
        freopen("coin.in","r",stdin);
        freopen("coin.out","w",stdout);
        cin>>n;
        k=n;
        b[0]=1;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            c[a[i]]=true;
            if(a[i]==k)
            {
                while(c[k]==true)
                k--;
                if(k==n-i)
                b[i]=1;
                else
                b[i]=b[i-1];
            }
            else
            b[i]=1+b[i-1];
        }
        for(int i=0;i<=n;i++)
        cout<<b[i]<<" ";
        return 0;
    }

    又双叒叕炸掉了!

    原因是部分在右部分不在右的情况未考虑清。

    见代码*2:

    #include<iostream>
    using namespace std;
    int n,k,a[300001],b[300001];
    bool c[300001];
    int main()
    {
        cin>>n;
        k=n;
        b[0]=1;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            c[a[i]]=true;
            b[i]=b[i-1]+1;
            if(a[i]==k)
            {   
                while(c[k]==true)
                {
                    b[i]--;
                    k--;
                }
            }
        }
        for(int i=0;i<=n;i++)
        cout<<b[i]<<" ";
        return 0;
    }

    好题哉!!!

  • 相关阅读:
    SQL复杂查询和视图(2)
    SQL复杂查询和视图
    SQL语言概述
    元组演算与关系代数关系
    关系的元组演算
    线索二叉树
    二叉树的遍历
    树的基本概念
    【支付专区】之微信支付构建请求参数xml
    【支付专区】之微信支付请求数据签名
  • 原文地址:https://www.cnblogs.com/qing1/p/11185594.html
Copyright © 2011-2022 走看看