kmjp's blog

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

April Fools Day Contest 2016 : E. Out of Controls、F. Ace It!、G. You're a Professional

なんだかなぁ。
http://codeforces.com/contest/656

E. Out of Controls

再帰を使ってループを回避し、3項間演算子を使ってif文を回避した。
CFがサポートする範囲で、問題の制限に影響なく書ける言語はあるのかな…?

#include <bits/stdc++.h>
using namespace std;

int N;
int A[101][101];

void hoge(int y,int x) {
	cin>>A[y][x];
}

int loop(int y,int x) {
	hoge(y,x);
	return (x<N-1)?loop(y,x+1):(y<N-1)?loop(y+1,0):0;
}
int loop2(int y,int x) {
	int r=(x<N-1)?loop2(y,x+1):(y<N-2)?loop2(y+1,y+2):0;
	return max(r,A[y][x]);
}

int dfs(int z,int x,int y) {
	A[x][y]=min(A[x][y],A[x][z]+A[z][y]);
	return (y<N-1)?dfs(z,x,y+1):(x<N-1)?dfs(z,x+1,0):(z<N-1)?dfs(z+1,0,0):0;
}

int main(int argc,char** argv){
	
	cin>>N;
	loop(0,0);
	dfs(0,0,0);
	cout<<loop2(0,1)<<endl;
}

F. Ace It!

一見OEISと見せかけて、単に文字の並びをトランプに見立ててブラックジャック風のスコア計算するだけ。
本番Aceという問題名中の記載からトランプは思い浮かんだけど、そこからブラックジャックにはいかなかった。

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>s;
	int ret=1;
	FORR(r,s) {
		if(r>='1'&&r<='9') ret+=r-'0';
		if(r=='0') ret+=9;
	}
	cout<<ret<<endl;
}

G. You're a Professional

C++で書くともっと新しい言語で書けと怒られる。PythonやRubyなら良いようだ。
また、コード長の制限があり、長いコードは却下される。
最後にコメントで「#kitten」を加えたら通った。

F,I,T=map(int,raw_input().split(" "))
L=[0]*10#kitten
ret=0
for f in range(F):
	S=raw_input()
	for x in range(I):
		if S[x]=='Y':
			L[x]+=1
			if L[x]==T:
				ret+=1
print ret

まとめ

次回は面白い問題を期待したい。