2013年12月8日 星期日

TOJ ProID:48 就是要走出自己的路!

[神秘剪枝]

最早出現的M必然小於sum/2

是說這是第一次用map :3

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
map<int,int>list;
vector<int> vec;
int main()
{
    int T;scanf("%d",&T);
    while(T--)
    {
        int N;scanf("%d",&N);
        int Line[200];
        int sum=0;
        for(int lx=0;lx<N;lx++)
        {
            scanf("%d",&Line[lx]);
            sum+=Line[lx];
        }
        sort(Line,Line+N);
        list.clear();list[0]=1;
        bool OK=false;
        map<int,int>::iterator it;
        for(int lx=0;(lx<N)&&(OK==false);lx++)
        {
            vec.clear();
            if(2*Line[lx]>sum) break;
            for(it=list.begin();(it!=list.end());++it)
                vec.push_back(it->first);
            for(int ly=0;(ly<vec.size())&&(OK==false);ly++)
            {
                if(2*(vec[ly]+Line[lx])>sum) break;
                list[vec[ly]+Line[lx]]++;
                if(list[vec[ly]+Line[lx]]>=2)
                    OK=true;
            }
            //printf("\n=========\n");^M
        }

        if(OK)
            printf("Time to show my power!\n");
        else
            printf("I hate this number set!\n");
    }
    return 0;
}

沒有留言:

張貼留言