zoukankan      html  css  js  c++  java
  • CF GYM 100703K Word order

    题意:给一个字符串,其中只有F、A、N三种字母,问最少交换多少次能使所有的A在所有F之前。

    解法:贪心。先预处理每位的左边有多少F右边有多少A,对于每位A必须至少向左交换的次数为它左面的F个数,而对于N来说比较左面F的个数和右面A的个数,将少的部分交换至N的另一端。将以上两种情况的答案加和即为最后答案。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<limits.h>
    #include<time.h>
    #include<stdlib.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #define LL long long
    using namespace std;
    int main()
    {
        int n;
        string s;
        while(~scanf("%d", &n))
        {
            cin >> s;
            int a[105] = {0}, f[105] = {0};
            if(s[0] == 'F')
                f[0] = 1;
            int ans = 0;
            for(int i = 1; i < n; i++)
            {
                if(s[i] == 'F')
                    f[i] = f[i - 1] + 1;
                else
                    f[i] = f[i - 1];
            }
            for(int i = n - 1; i >= 0; i--)
            {
                if(s[i] == 'A')
                {
                    a[i] = a[i + 1] + 1;
                    ans += f[i];
                }
                else
                    a[i] = a[i + 1];
            }
            for(int i = 0; i < n; i++)
            {
                if(s[i] == 'N')
                    ans += min(f[i], a[i]);
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    canvas之碎碎念
    canvas之动态时钟
    属性小问题
    readonly and disabled
    table
    地图热区
    子块元素在父块元素中居中
    Ajax与JS
    前端测试
    html5/css3
  • 原文地址:https://www.cnblogs.com/Apro/p/4685262.html
Copyright © 2011-2022 走看看