zoukankan      html  css  js  c++  java
  • CF-920C-Swap Adjacent Elements 贪心

    题意

    给你一个1~n的排列。

    并给你一个字符串——其中用0和1表示对应数列中的位置上的值可不可以和后面相邻的数交换。

    判断该数列能否在限制中交换为不降序数列。

    思路

    由于刚学了树状数组,一开始以为是用这样的数据结构去找有没有逆序。

    事实上题目中的1~n并且每个数并不相同应该引起注意。关键就是这了。

    下面是两种不同的思路;

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    //这个思路是只要当前的最大比位子i大,说明要向后移动,要是str=0,则NO;
    using namespace std;
    int n,a[200000+10];
    string str;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        cin>>str;
        int maxn=0,flag=1;
        for(int i=1;i<=n;i++)
        {
            if(maxn < a[i])maxn = a[i];
            if(str[i-1]=='0')
            {
                if(maxn>i)
                {
                    flag=0;
                    break;
                }
            }
        }
        if(flag)puts("YES");
        else puts("NO");
        return 0;
    }
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <string>
    //队长是先跑字符串,判断每个i位子的最大可能值;
    using namespace std;
    int a[200000],dp[200000],n;
    string str;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        cin>>str;
        dp[n-1]=n;
        for(int i=n-2;i>=0;i--)
        {
            if(str[i]=='1')
            {
                dp[i]=dp[i+1];
            }
            else dp[i]=i+1;
        }
        int flag=1;
        for(int i=1;i<=n;i++)
        {
            if(a[i]>dp[i-1])
            {
                flag=0;
                break;
            }
        }
        if(flag)puts("YES");
        else puts("NO");
    
    
        return 0;
    }
    skr
  • 相关阅读:
    001.CDN概述
    006.Ceph对象存储基础使用
    005.Ceph文件系统基础使用
    002.Oracle安装部署-ASM
    001.Oracle安装部署-本地文件系统
    004.NTP多层级架设
    004.MySQL双主+Keepalived高可用
    003.MMM双主-双从读写分离部署
    001.Amoeba读写分离部署
    003.MySQL高可用主从复制新增slave
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/8409778.html
Copyright © 2011-2022 走看看