zoukankan      html  css  js  c++  java
  • Codeforces 1136D Nastya Is Buying Lunch (贪心)

    题意:

    给一个序列和一组交换序列(a,b),当且仅当a在b的前面(不允许有间隔),这两个数才能交换,问最后一个数最多能移动多少个位置。

    分析: 这题是思路是十分的巧妙呀 , 用一个数组num[x]  表示在x的后面有什么是可以于他交换的数 , 注意核心来了: 如果这个数目等于x的位置到目标位置id , 则目标可以向前进行移动 ,秒呀

    #include<bits/stdc++.h>
    using namespace std ;
    int a[300001];
    vector<int>G[300001];
    int num[300001];
    int  main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1 ; i<=n ; i++)
        scanf("%d",&a[i]);
    
        for(int i=1 ; i<=m ; i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            G[v].push_back(u);
        }
    
        for(int i=0 ; i<G[a[n]].size() ; i++)
        num[G[a[n]][i]]++;
        int ans=0;
        int id=n;
        for(int i=n-1 ; i>=1 ; i--)
        {
            if(num[a[i]]==id-i) {ans++; id--;}
            else
            {
                for(int j=0 ; j<G[a[i]].size() ; j++)
                num[G[a[i]][j]]++;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    UIWebView控件中 字体大小和字体样式的修改
    IOS statusBarStyle 设置
    SSZipArchive解压失败的原因
    uiimageview 的 animation 动画
    App网络管理
    系统日志输出工具类
    软键盘管理
    获取App应用信息
    Activity管理类
    SharePreference工具类
  • 原文地址:https://www.cnblogs.com/shuaihui520/p/10554626.html
Copyright © 2011-2022 走看看