zoukankan      html  css  js  c++  java
  • codeforces 1209/C Paint the Digits 观察

    题意
    给你一个序列
    问你能否选出两个序列 然后拼接
    是他们成为有序的序列 输出方案

    解:
    说下我的思路
    开始我吧题目看错了以为求的是单调递减的。。。
    这题考的是贪心加观察
    后来才发现
    然后我又试了lis 树状数组 都不行
    最后我发现对于一个序列 最终状态一定是有序的
    那么我们不妨对于这个序列首先进行双关键字排序
    然后 最小的一个一定是标号为1 然后 我们对于每一个必须为1 的标上1

    注意判断重复元素
    code:

    //
    //  main.cpp
    //  sadf
    //
    //  Created by ALEZ on 2019/9/15.
    //  Copyright © 2019 比赛. All rights reserved.
    //
    #include<iostream>
    #include<cstdio>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define maxnn 2000000
    struct node
    {
        int val,id;
    }ed[maxnn];
    int mask[maxnn];
    int tot=0;
    string s;
    bool cmp(node a,node b){
        if(a.val==b.val)
        return a.id<b.id;
        return a.val<b.val;
    }
    int T,n;
    int k[maxnn];
    int main()
    {
        cin>>T;
        while(T--)
        {
            for(int i=1;i<=n;i++)mask[i]=0,k[i]=0;
            cin>>n;
            tot=0;
            cin>>s;
            for(int i=0;i<s.size();i++)
            {
                ed[++tot].id=i+1;
                ed[tot].val=s[i]-'0';
            }
            sort(ed+1,ed+1+tot,cmp);
        int biao=0;
        int las=ed[1].id;
        k[ed[1].id]=1;
            mask[ed[1].id]=1;
            int fla=0;
            int p=0;
        for(int i=2;i<=tot;i++)
        {
    	if(biao)
    	if(ed[i].val>ed[biao].val) break;
            if(p)
            {
                if(ed[p].val==ed[i].val)p=0;
                else break;
            }
            if(ed[i].id<las)
            {
                fla=1;
                p=i;
    	biao=i;
                continue;
            }
            k[ed[i].id]=1;
            mask[ed[i].id]=1;
            las=ed[i].id;
        }
            if(fla)
            {
                int u=1;
                while(mask[ed[u].id])u++;
                 las=ed[u].id;
                k[ed[u].id]=2;
                mask[ed[u].id]=1;
                for(int i=u;i<=tot;i++)
                {
                    if(mask[ed[i].id])continue;
                    if(las>ed[i].id)continue;
                    k[ed[i].id]=2;
                    mask[ed[i].id]=1;
                    las=ed[i].id;
                }
            }
            int ffla=1;
            for(int i=1;i<=tot;i++)
            {
                if(!k[i])ffla=0;
            }
            if(ffla==0)
            {
                puts("-");
                continue;
            }
            else{
                for(int i=1;i<=tot;i++)
                    cout<<k[i];
            }
            cout<<endl;
        }
    }
    
    刀剑映出了战士的心。而我的心,漆黑且残破
  • 相关阅读:
    当梦想渐行渐远的时候
    android开发系列之aidl
    看到这页代码,我要疯了
    android开发系列之性能优化
    近期的一个项目反思与总结
    IOS中摇一摇实现截屏(可实现问题反馈的功能)
    IOS设计模式浅析之外观模式(Facade)
    IOS项目开发中的文件和文件夹操作
    XCode 4.6下XIB文件提示“...could not be opened..."的问题
    "Xcode"意外退出
  • 原文地址:https://www.cnblogs.com/OIEREDSION/p/11525354.html
Copyright © 2011-2022 走看看