Water --- CSU 1550: Simple String

 Simple String

Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1550


 

Mean: 

略。

analyse:

水题。

Time complexity: O(n)

 

Source code: 

 

Water --- CSU 1550: Simple String
//  Memory   Time

//  1347K     0MS

//   by : crazyacking

//   2015-03-29-12.08

#include<map>

#include<queue>

#include<stack>

#include<cmath>

#include<cstdio>

#include<vector>

#include<string>

#include<cstdlib>

#include<cstring>

#include<climits>

#include<iostream>

#include<algorithm>

#define MAXN 1000010

#define LL long long

using namespace std;

int main()

{

        ios_base::sync_with_stdio(false);

        cin.tie(0);

//      freopen("C:\\Users\\Devin\\Desktop\\cin.cpp","r",stdin);

//      freopen("C:\\Users\\Devin\\Desktop\\cout.cpp","w",stdout);

        string a,b,c;

        while(cin>>a>>b>>c)

        {

                bool flag=true;

                int len=a.length();

                int aa[26],bb[26],cc[26],dd[26];

                memset(aa,0,sizeof aa),memset(bb,0,sizeof bb),memset(cc,0,sizeof cc),memset(dd,0,sizeof dd);

                for(int i=0;i<len;++i)

                {

                        aa[a[i]-'A']++;

                        bb[b[i]-'A']++;

                        cc[c[i]-'A']++;

                }

                for(int i=0;i<26;++i)

                {

                        if(aa[i]+bb[i]<cc[i])

                        {

                                flag=false;

                                puts("NO");

                                break;

                        }

                }

                if(!flag) continue;

                for(int i=0;i<26;++i)

                {

                        dd[i]=cc[i]-aa[i];

                }

                int sum=0;

                for(int i=0;i<26;++i)

                {

                        if(dd[i]>0)

                        {

                                sum+=dd[i];

                                if(dd[i]>bb[i])

                                {

                                        flag=false;

                                        break;

                                }

                        }



                }

                if(!flag)

                {

                        puts("NO");

                        continue;

                }

                int half=len/2;

                sum=0;

                for(int i=0;i<26;++i)

                {

                        if(dd[i]<=0)

                        {

                                sum+=min(bb[i],cc[i]);

                        }

                        else

                        {

                                sum+=min(bb[i],cc[i]);

                        }

                }

                if(sum>=half)

                {

                        puts("YES");

                        continue;

                }

                else

                {

                        puts("NO");

                        continue;

                }

        }

        return 0;

}

/*



*/

/**************************************************************

    Problem: 1550

    User: crazyacking

    Language: C++

    Result: Accepted

    Time:8 ms

    Memory:1976 kb

****************************************************************/
View Code

 

 

 

你可能感兴趣的:(String)