您的位置:首页 > 其它

1167: How Many Eggs Do I Have? 秦九韶定理

2010-11-17 13:53 330 查看
ResultTIME LimitMEMORY LimitRun TimesAC TimesJUDGE


3s8192K2050454Standard
1st Jilin University ACM International Collegiate Programming Contest

Assume you are needed to count a basket of eggs. Even though counting is very
easy but unfortunately you are forbidden to count them 1 by 1 instead of
counting them c by c, where c is greater than 1. For example, if you count them
3 by 3, then there will be 1 egg left in the basket, if you count them 5 by 5,
then there will be 3 eggs left in the basket and if you count them 7 by 7, then there
will be 1 egg left again in the basket. Your task is to determine how many eggs
there are originally in the basket.

Input Specification

The input consists of several test cases. The first line of each test case
contains an integer N(1<=N<=5), then follow N lines, each of which contains two integers
ci and bi(3<=ci<=49, 0<=bi<=ci-1, ci is a primary number). It means that you
count the eggs ci by ci and finally there are bi eggs left. N=0 marks the last
test case, which you should not process.

Output Specification

For each test case, you should print a line containing the minimal possible
number of eggs in the basket.

Sample Input

3

3 1

5 3

7 1

0

Sample Output

43

#include <stdio.h>

#include <string.h>

int c[10],b[10];

int l[10];

int main ()

{

int N;

while(scanf("%d",&N)==1&&N)

{

for(int i=0;i<N;i++)

{

scanf("%d%d",&c[i],&b[i]);

l[i]=1;

}

for(int i=0;i<N;i++)

for(int j=0;j<N;j++)

if(i!=j)  l[i]*=c[j];

for(int i=0;i<N;i++)

for(int j=1;;j++)

if(l[i]*j%c[i]==1) { l[i]*=j;  break; }

int sum=0,tot=1;

for(int i=0;i<N;i++)

{

sum+=l[i]*b[i];

tot*=c[i];

}

printf("%d/n",sum%tot);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: