FZU Problem 1402 猪的安家

Problem 1402 猪的安家

Accept: 1385 Submit: 7593 Time Limit: 1000 mSec Memory Limit : 32768 KB

img Problem Description

Andy和Mary养了很多猪。他们想要给猪安家。但是Andy没有足够的猪圈,很多猪只能够在一个猪圈安家。举个例子,假如有16头猪,Andy建了3个猪圈,为了保证公平,剩下1头猪就没有地方安家了。Mary生气了,骂Andy没有脑子,并让他重新建立猪圈。这回Andy建造了5个猪圈,但是仍然有1头猪没有地方去,然后Andy又建造了7个猪圈,但是还有2头没有地方去。Andy都快疯了。你对这个事情感兴趣起来,你想通过Andy建造猪圈的过程,知道Andy家至少养了多少头猪。

img Input

输入包含多组测试数据。每组数据第一行包含一个整数n (n <= 10) – Andy建立猪圈的次数,解下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示Andy建立了ai个猪圈,有bi头猪没有去处。你可以假定(ai, aj) = 1.

img Output

输出包含一个正整数,即为Andy家至少养猪的数目。

img Sample Input

3 3 1 5 1 7 2

img Sample Output

16

img Source

Andy Zhau’s Contest No.1

解决方案1

#include<iostream>
int main() {
	int n, i, sum, flag, j;
	int a[10][2];
	while (scanf("%d", &n) != EOF) {
		for (i = 0; i < n; i++) {
			scanf("%d %d", &a[i][0], &a[i][1]);
		}
		i = 0;
		sum = a[n - 1][1];
		while (1) {
			flag = 1;
			for (j = 0; j < n - 1; j++) {
				if (sum%a[j][0] != a[j][1]) {
					flag = 0;
					break;
				}
			}
			if (flag == 1) {
				break;
			}
			else {
				i++;
				sum = a[n - 1][0] * i + a[n - 1][1];
			}
		}
		printf("%d\n", sum);
	}
}

Time Limit Exceed

解决方案2

本题应当注意的地方:

  1. ai与aj互质
  2. 应当用long long数据类型

思路:先求出最小满足第一行的,如例题中3+1=4,再验证是否符合第二行。4%5!=1,所以再把4递加3,直到(4+3*x)%5==1。继续验证下一行,不过递加要变为3和5的最小公倍数,一直循环到n,最后的总的最小公倍数即是答案。

#include<iostream>
typedef long long ll;

int main() {
	int n, i, flag, j;
	ll sum, times;
	ll a[10][2];
	while (scanf("%d", &n) != EOF) {
		for (i = 0; i < n; i++) {
			scanf("%I64d%I64d", &a[i][0], &a[i][1]);
		}
		times = a[0][0];
		sum = a[0][1];
		for (i = 1; i < n; i++) {
			while (sum%a[i][0] != a[i][1]) {
				sum += times;
			}
			times *= a[i][0];
		}
		printf("%I64d\n", sum);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_26154135/article/details/89397009
今日推荐