lp6m’s blog

いろいろかきます

CODE THANKS FESTIVAL 2014 A日程に参加してきました

CODE THANKS FESTIVAL 2014 A日程に参加してきました.

fc2blogから移転しました.
CODE FESTIVAL本戦には予選落ちで参加できなかった.予選落ち救済コンテストみたいな感じ。
1回生で予選通った人たくさんいて悲しいなあ(解いてないから当たり前)とか思いながら,企業の金で東京に行った.企業の金サイコー.

前日15時に品川についた.ホテルにチェックインしたあと東京の友達が10時まで用事があるみたいだからぼっちで回ってた.
21時からのABCにマクドで参加した.
次の日までしか持たないお菓子を買ってしまったので仕方なく友達と二人で食べた.

朝8時くらいに起きてだらだらした.
お弁当とTシャツが配られた.企業のお金ってすごい.
f:id:lp6m:20141208031835j:plain





コンテスト結果:
515点/800 22位/78.
f:id:lp6m:20141208030441p:plain
実は開始3分は1位だった.Eまで解いたときに6位〜とか言ってた.


F問題が全く方針たたなかったのでH問題の部分点15点を取った.

f:id:lp6m:20141208030333p:plain

なんでみんな通してるんだ?とか思いながらF問題う〜〜っていってよくわからないコードをかいていた.
20分くらいして,あぁ二つ目の要素が1になってるやつの一つ目の要素の人たちほげほげとか気づいた.

A:計算
B:問題文の意味がよくわからなかったので先Cをといた.next_permutationは使わなかった.

int n;
int data[3];
int search(int a,int b,int c){
	int ima = 0;
	int rst = 0;
	while(ima<n){
		if(rst%3==0) ima+=data[a];
		if(rst%3==1) ima+=data[b];
		if(rst%3==2) ima+=data[c];
		rst++;
	}
	return rst;
}
int main(){
	cin >> n >> data[0] >> data[1] >> data[2];
	int ans = inf;
	ans = min(search(0,1,2),ans);
	ans = min(search(0,2,1),ans);
	ans = min(search(1,0,2),ans);
	ans = min(search(1,2,0),ans);
	ans = min(search(2,0,1),ans);
	ans = min(search(2,1,0),ans);
	cout << ans << endl;
	return 0;
}

C:計算
D:うまいやり方ありそう・・とか思ったけど場合分けなんて数個しかないやと思って丁寧に書いた.

int n,q;
int main(){
	cin >> n >> q;
	REP(i,q){
		int a,b,s,t;
		cin >> a >> b >> s >> t;
		if(b<=s||t<=a){
			cout << (t-s)*100 << endl;
			continue;
		}
		if(a<=s&&t<=b){
			cout << 0 << endl;
			continue;
		}
		if(s<=a&&b<=t){
			cout << ((a-s)+(t-b))*100 << endl;
			continue;
		}
		if(a<=s&&b<=t){
			cout << (t-b)*100 << endl;
			continue;
		}
		if(s<=a&&t<=b){
			cout << (a-s)*100 << endl;
			continue;
		}

	}
	return 0;

E:とりあえず全部ためして書いて提出してからTLEしそうって気づいて書き直した.
TLEするコード:

int r,c,m,n;
int ban[100][100];
int funcc[4][5000];
int countsouth(){
	int rst = 0;
	REP(i,r){
		REP(j,c){
			if(ban[i][j]%4==0) rst++;
		}
	}
	return rst;
}
void move(int ra,int rb,int ca,int cb){
	FOR(i,ra-1,rb){
		FOR(j,ca-1,cb){
			ban[i][j]++;
		}
	}
}

bool search(int tejun){
	REP(i,n){
		if(i!=tejun){
			move(funcc[0][i],funcc[1][i],funcc[2][i],funcc[3][i]);
		}
	}
	if(countsouth()==m) return true;
	else return false;
}
int main(){
	cin >> r >> c >> m;
	cin >> n;
	REP(i,100) REP(j,100)  ban[i][j] = 0;o
	REP(i,n){
		REP(j,4){
			cin >> funcc[j][i];
		}
	}
	REP(i,n){
		REP(i,100) REP(j,100) ban[i][j] = 0;
		if(search(i)) cout << i+1 << endl;
	}
	return 0;
}

書き直したコード

int r,c,m,n;
int ban[100][100];
int funcc[4][5000];
int kekka[100][100];
int countsouth(){
	int rst = 0;
	REP(i,r){
		REP(j,c){
			if(ban[i][j]%4==0) rst++;
		}
	}
	return rst;
}
void move(int ra,int rb,int ca,int cb){
	FOR(i,ra-1,rb){
		FOR(j,ca-1,cb){
			ban[i][j]++;
		}
	}
}
void movekekka(int ra,int rb,int ca,int cb){
	FOR(i,ra-1,rb){
		FOR(j,ca-1,cb){
			kekka[i][j]++;
		}
	}
}
void unmove(int ra,int rb,int ca,int cb){
	FOR(i,ra-1,rb){
		FOR(j,ca-1,cb){
			ban[i][j]--;
		}
	}
}
bool search(int tejun){
	REP(i,100)REP(j,100) ban[i][j] = kekka[i][j];
	unmove(funcc[0][tejun],funcc[1][tejun],funcc[2][tejun],funcc[3][tejun]);
	if(countsouth()==m) return true;
	else return false;
}
int main(){
	cin >> r >> c >> m;
	cin >> n;
	REP(i,n){
		REP(j,4){
			cin >> funcc[j][i];
		}
	}
	REP(i,100) REP(j,100)  ban[i][j] = 0;
	REP(i,100) REP(j,100)  kekka[i][j] = 0;
	REP(i,n) movekekka(funcc[0][i],funcc[1][i],funcc[2][i],funcc[3][i]);
	REP(i,n){
		REP(i,100) REP(j,100) ban[i][j] = 0;
		if(search(i)) cout << i+1 << endl;
	}
	return 0;
}

F:25回提出した.WA.

懇親会では,色々と話をしていた.本戦じゃないからか、アルハラはなかった.

帰りのゆりかもめからみえる景色が綺麗だった.結局今回も用事だけ済ませて急いで帰ることになった.ゆっくり旅行したい.

今回のコンテスト、優しめの問題設定で「解いてる」っていう実感があって楽しかった.
来年は普通に予選突破できるレベルまで上げたい.なんだかんだで下がってたプロコンのモチベがあがった.
アプリ開発やらバイトの物理シュミレーションのプログラムやらもあるけどやっぱりプロコンの勉強も少しずつ進める.

ちょくだいさんとのツーショットがとれて幸せだった.笑顔が思いっきりにぱーってしてて素敵でした.

CODE THANKS FESTIVAL,本当に楽しかったです.スタッフの方々,ありがとうございました!!