kmjp's blog

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

AtCoder ARC #017 : A - 素数、コンテスト、素数、B - 解像度が低い。

ARC017は少し時間に遅れて参加。
Aで出力ミスをして1WAしてしまうも、ABCはすんなり解けた。
Dは時間切れしたが解きなおしたらあっさり。本番中に解ききりたかったな。
http://arc017.contest.atcoder.jp/tasks/arc017_1
http://arc017.contest.atcoder.jp/tasks/arc017_2

A - 素数、コンテスト、素数

17~10^6の整数Nが与えられるので、素数かどうか判定せよ。
√Nまでで割るだけ。

void solve() {
	int f,i,j,k,l,x,y;
	cin>>x;
	
	for(i=2;i<x;i++) {
		if((x%i)==0) return _P("NO\n");
	}
	_P("YES\n");
	
}

B - 解像度が低い。

N要素の数列が与えられる。ここから連続するK要素を抜き出した部分列が真に単調増加となるような抜き出し方は何通りあるか。

数列を前から順に見ていき、前の値より大きな数字が何回連続で出るかを数えることで、各要素を終端とする数列がK個以上連続して増加しているかわかる。

void solve() {
	int f,i,j,k,l,x,y;
	int N,K;
	
	cin>>N>>K;
	x=0,y=0;
	int ma=0;
	FOR(i,N) {
		
		cin>>l;
		if(l>x) y++;
		else y=1;
		x=l;
		if(y>=K) ma++;
	}
	_P("%d\n",ma);
}

まとめ

このあたりはだいぶ簡単だね。