kmjp's blog

競技プログラミング参加記です

TopCoderOpen 2015 Round1B Easy TheNicePair

TCO R1Bは不参加。
ただ練習でEasy/MediumでWAを出したので、結果的に出なくて助かったかも。
http://community.topcoder.com/stat?c=problem_statement&pm=13715

問題

正整数の配列A[i]がある。
A[i]の連続部分列A[x..y]がValidであるとは、ある2以上の整数vについて、A[x..y]中にvの倍数であるものが半分以上含まれることを示す。

A[i]中で最長の連続部分列を求め、その長さを答えよ。

解法

A[i]はさほど大きくないので、x,y,vを総当たりすればよい。
vは素数でないものも総当たりしても間に合うようだ。

class TheNicePair {
	public:
	int solve(vector <int> A) {
		int i,j;
		int x,y,z;
		int ret=-1;
		
		for(i=2;i<=1000;i++) {
			FOR(y,A.size()) FOR(x,y+1) {
				int num=0;
				for(z=x;z<=y;z++) if(A[z]%i==0) num++;
				if(num>=(y-x+2)/2) ret=max(ret,(y-x));
			}
		}
		return ret;
	}
}

解法

奇数長の時に割り算を間違ってWAした…。