*[topcoder]ChooseTheBestOne

 

https://www.topcoder.com/stat?c=problem_statement&pm=13146&rd=15852

// Need carefully calc the shift and the final index

#include <vector>

using namespace std;

class ChooseTheBestOne

{

public:

    int countNumber(int N)

    {

        vector<int> vec(N);

        for (int i = 1; i <= N; i++)

        {

        	vec[i-1] = i;

        }

        // silulate the steps

        int idx = 0;

        for (int i = 1; i < N; i++)

        {

        	// i ^ 3 % (LEN)

        	int L = vec.size();

        	int mod = (((i * i) % L) * i) % L; // 0 ~ L-1

        	idx = (idx + mod) % L;

			idx--;

			if (idx < 0)

				idx += L; 
// actually, we can use idx = (idx + mod - 1) % L vec.erase(vec.begin() + idx); } return vec[0]; } };

 

你可能感兴趣的:(topcoder)