kmjp's blog

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

Indeedなう(予選B) : A - 高橋くんとマンハッタン、B - 高橋くんと文字列操作

Indeedなうの予選に参加。CとDでどちらも実装ミスでタイムロスしてしまった。
http://indeednow-qualb.contest.atcoder.jp/tasks/indeednow_2015_qualb_1
http://indeednow-qualb.contest.atcoder.jp/tasks/indeednow_2015_qualb_2

A - 高橋くんとマンハッタン

2次元座標上で隣接する格子点に移動できる場合、(x1,y1)から(x2,y2)を最短経路で結ぶと何個の格子点を通るか。

abs(x1-x2)+abs(y1-y2)+1を答えればよい。始点の分1追加される点に注意。

void solve() {
	int i,j,k,l,r,x,y; string s;
	cin>>x>>y>>i>>j;
	
	cout<<abs(x-i)+abs(y-j)+1<<endl;
}

B - 高橋くんと文字列操作

文字列S,Tが与えられる。
Sを最小で何文字ローテートすればTと一致するか答えよ。

Sのサイズはさほど大きくないので、実際にローテートさせながら比較すればよい。

string S,T;
int L;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>S>>T;
	L=S.size();
	if(S.size()==T.size()) {
		FOR(i,L) {
			if(S==T) {
				cout<<i<<endl;
				return;
			}
			S=S.substr(L-1)+S.substr(0,L-1);
		}
	}
	cout<<-1<<endl;
	
}

まとめ

Bは幸いFAでした。