TopCoder SRM 582 SpaceWarDiv1

这个题比较简单,不需要多说,最直观的解法就是二分,思路很清晰,写起来也方便。但仅满足于这个是不够的,看了别人的代码,好像有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

你可能感兴趣的:(TopCoder SRM 582 SpaceWarDiv1)