UVa 1588 Kickdown

原题传送


方法:先固定一个字符串,再移动另一个字符串

C代码:(由于UVA的C编译器不支持C99标准,请使用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\n", 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\n", ans);
	}
	return 0;
}


你可能感兴趣的:(UVa)