UVa 1588 Kickdown

1716 ワード

原題転送
メソッド:1つの文字列を固定してから、別の文字列を移動します.
Cコード:(UVAのCコンパイラはC 99規格をサポートしていませんので、C++コミットを使用してください)
#include 
#include 
int main(void) {
	char c1[105], c2[105];
	while(~scanf("%s%s", c1, c2)) {
		int ans = strlen(c1) + strlen(c2);
		int j;
		for(int i = 0; i < strlen(c1); i++) {
			for(j = 0; j < strlen(c2) && i + j < strlen(c1); j++)
				if (c1[i + j] + c2[j] - 96 > 3)
					break;
			if(j == strlen(c2) || i + j == strlen(c1)) {
				ans = strlen(c1) + strlen(c2) - j;
				break;
			}
		}
		for(int i = 0; i < strlen(c2); i++) {
			for(j = 0; j < strlen(c1) && i + j < strlen(c2); j++)
				if (c2[i + j] + c1[j] - 96 > 3)
					break;
			if(j == strlen(c1) || i + j == strlen(c2)) {
				ans = strlen(c1) + strlen(c2) - j > ans ? ans : strlen(c1) + strlen(c2) - j;
				break;
			}
		}
		printf("%d
", ans); } return 0; }

C++コード:
#include 
using namespace std;
int main(void) {
	string a, b;
	while(cin >> a >> b) {
		int ans = a.size() + b.size();
		int j;
		for(int i = 0; i < a.size(); i++) {
			for(j = 0; j < b.size() && i + j < a.size(); j++)
				if(a[i + j] + b[j] - 96 > 3)
					break;
			if(j == b.size() || i + j == a.size()) {
				ans = a.size() + b.size() - j;
				break;
			}
		}
		for(int i = 0; i < b.size(); i++) {
			for(j = 0; j < a.size() && i + j < b.size(); j++)
				if(b[i + j] + a[j] - 96 > 3)
					break;
			if(j == a.size() || i + j == b.size()) {
				ans = min(int(a.size() + b.size() - j), ans);
				break;
			}
		}
		printf("%d
", ans); } return 0; }