• 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;
    }
    

      

  • 相关阅读:
    EasyUI:combotree(树形下拉框)复选框选中父节点(子节点的状态也全部选中)输入框中只显示父节点的文本值
    js表单插件
    前端模块化入门
    前端模板引擎
    量化策略研究员
    量化策略研究员
    C++ 纯虚函数接口,标准 C 导出 DLL 函数的用法
    一月5日
    一月5日
    一月5日
  • 原文地址:https://www.cnblogs.com/Apro/p/4685262.html
Copyright © 2020-2023  润新知