首页 > 代码库 > TopCoder SAM 632 DIV2

TopCoder SAM 632 DIV2


250:简单题

class RunningAroundPark {
public:
	int numberOfLap(int N, vector <int> d)
	{
	    int n=d.size();
	    int ans=1,last=-1;
	    for(int i=0;i<n;i++)
        {
            if(d[i]<=last)
            {
                ans++;
                last=d[i];
            }
            else last=d[i];
        }
        return ans;
	}
};

500:找规律,简单题

class PotentialGeometricSequence {
public:
	int numberOfSubsequences(vector <int> d)
	{
        int n=d.size();
        if(n==1) return 1;
        int ans=0,last=1,slope=d[1]-d[0];
        for(int i=2;i<n;i++)
        {
            int newslope=d[i]-d[i-1];
            if(newslope==slope)
            {
                last++;
            }
            else
            {
                last++;
                int jia=(last+1)*last/2;
                if(ans) jia--;
                ans+=jia;
                last=1;
                slope=newslope;
            }
        }
        last++;
        int jia=(last+1)*last/2;
        if(ans) jia--;
        ans+=jia;
        return ans;
	}
};


1000: 背包


typedef long long int LL;
const LL mod=1000000007LL;

class GoodSubset {
public:
	int numberOfSubsets(int goodValue, vector <int> d)
	{
	    int n=d.size();
	    map<LL,LL> mp;
	    map<LL,LL>::reverse_iterator it;
        mp[1]=1;
        for(int i=0;i<n;i++)
        {
            for(it=mp.rbegin();it!=mp.rend();it++)
            {
                LL t=it->first*d[i];
                if(goodValue%t==0)
                {
                    mp[t]=(mp[t]+it->second)%mod;
                }
            }
        }
        mp[1]--;
        return mp[goodValue];
	}
};




TopCoder SAM 632 DIV2