TopCoder SRM 582 SpaceWarDiv1

2828 단어
이 문제는 비교적 간단해서 더 말할 필요가 없다. 가장 직관적인 해법은 이분이다. 사고방식이 뚜렷하고 쓰기도 편리하다.그러나 이것만으로는 부족하다. 다른 사람의 코드를 보면 O(n)의 해법이 있는 것 같다. 나중에 생각해 보니 그럴 수 있다. 그래서 한 문제에 다른 해법이 있을 수 있다.그리고 나는 개인적으로 모든 해법은 하나의 사상이라고 생각한다.
이분 코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

const int N=1002;
long long c[N];
bool ok(long long k,vector &m,vector &e,vector &ec)
{
    for(unsigned int i=0;i0&&j0)
    return false;
    return true;
}
class SpaceWarDiv1
{
    public:
    long long minimalFatigue(vector  m, vector  e, vector ec)
    {
        sort(m.begin(),m.end());
        int M1=0;
        for(unsigned int i=0;i

O(n) 코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

const int N=52;
struct node
{
    int e;
    long long ec;
}a[N];
bool cmp(node x,node y)
{
    return x.e m, vector  e, vector ec)
    {
        int len1=m.size();
        int len2=e.size();
        sort(m.begin(),m.end());
        long long sum=0;
        for(int i=0;i0)
            ++tmp;
            M=max(M,tmp);
            while(l=a[l].e&&tmp>0)
            {
                if(a[l].ec>=tmp)
                {
                    sum-=tmp;
                    a[l].ec-=tmp;
                    tmp=0;
                }else
                {
                    tmp-=a[l].ec;
                    sum-=a[l].ec;
                    a[l].ec=0;
                }
                if(a[l].ec==0)
                ++l;
            }
        }
        return M;
    }

};

  
전재 대상:https://www.cnblogs.com/liulangye/archive/2013/06/15/3137961.html

좋은 웹페이지 즐겨찾기