问题标题: 酷町堂:7278 曹冲养猪,是大佬的都快来

0
0
已解决
熊潇然
熊潇然
初级启示者
初级启示者

7278   曹冲养猪

经验值:2800 时间限制:1000毫秒 内存限制:512MB

题目描述 Description

自从曹冲搞定了大象以后,曹操就开始琢磨让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲很不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把。

举个例子,假如有 1616 头母猪,如果建了 33 个猪圈,剩下 11 头猪就没有地方安家了;如果建造了 55 个猪圈,但是仍然有 11 头猪没有地方去;如果建造了 77 个猪圈,还有 22 头没有地方去。你作为曹总的私人秘书理所当然要将准确的猪数报给曹总,你该怎么办?

输入描述 Input Description

第一行包含一个整数 nn,表示建立猪圈的次数;

接下来 nn 行,每行两个整数 a_i, b_iai​,bi​,表示建立了 a_iai​ 个猪圈,有 b_ibi​ 头猪没有去处。你可以假定 a_i,a_jai​,aj​ 互质。

输出描述 Output Description

输出仅包含一个正整数,即为曹冲至少养猪的数目。

样例输入 Sample Input

3

3 1

5 1

7 2

样例输出 Sample Output

16

数据范围及提示 Data Size & Hint

对于全部数据,1≤n≤10,1≤bi​≤ai​≤1000。

#include<bits/stdc++.h>
using namespace std;
int n,a[15],b[15];
bool check(int x){
	for(int i=1;i<=n;i++){
		if(x%a[i]!=b[i]){
			return 0;
		}
	}
	return 1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	for(int k=0;;k++){
		if(check(k)){
			cout<<k;
			break;
		}
	}
	return 0;
}

TLE 50分

哪位大佬过来指点一下!

熊潇然在2022-10-26 09:49:52追加了内容

d

熊潇然在2022-10-26 10:46:08追加了内容

@汪宇航 样例都没过

#include<bits/stdc++.h>
using namespace std;
int n,a[15],b[15];
int ans;
bool check(){
	for(int i=1;i<=n;i++){
		if(ans%a[i]==b[i]){
			return 0;
		}
	}
	return 1;
}
int gcd(int a,int b){
	int r;
	while(a%b!=0){
		r=a%b;
		a=b;
		b=r;
	}
	return b;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	for(int k=0;;k++){
		ans=ans*k/gcd(ans,k);
		if(check()){
			cout<<k;
			break;
		}
	}
	return 0;
}

 

熊潇然在2022-10-26 15:18:33追加了内容

@汪宇航 帮我解决一下

 


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

函数不用1~n,之前遍历过的必然成立

0
刘意阳
刘意阳
初级天翼
初级天翼

@熊潇然,汪宇航说的是这种方法,但我只做到了WA20

 

不喜勿**

0
曹博扬
曹博扬
初级天翼
初级天翼

中国剩余定理优化一下

0
包思远
包思远
新手启示者
新手启示者

我会,但30豆不够!!得100豆!!

还有:

150豆    告诉你一道和这一样的3分题+1道7分题

200豆    150豆的结果上再告诉你1道8分题

0
熊潇然
熊潇然
初级启示者
初级启示者

@汪宇航 怎么做呀!!!

 

我要回答