天天看點

HDOJ 2401 Baskets of Gold Coins (數學題)Baskets of Gold Coins

Baskets of Gold Coins

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1885    Accepted Submission(s): 1119

Problem Description You are given N baskets of gold coins. The baskets are numbered from 1 to N. In all except one of the baskets, each gold coin weighs w grams. In the one exceptional basket, each gold coin weighs w-d grams. A wizard appears on the scene and takes 1 coin from Basket 1, 2 coins from Basket 2, and so on, up to and including N-1 coins from Basket N-1. He does not take any coins from Basket N. He weighs the selected coins and concludes which of the N baskets contains the lighter coins. Your mission is to emulate the wizard's computation.

Input The input file will consist of one or more lines; each line will contain data for one instance of the problem. More specifically, each line will contain four positive integers, separated by one blank space. The first three integers are, respectively, the numbers N, w, and d, as described above. The fourth integer is the result of weighing the selected coins.

N will be at least 2 and not more than 8000. The value of w will be at most 30. The value of d will be less than w.

Output For each instance of the problem, your program will produce one line of output, consisting of one positive integer: the number of the basket that contains lighter coins than the other baskets.

Sample Input

10 25 8 1109
10 25 8 1045
8000 30 12 959879400
        

Sample Output

2
10
50
        

注 - 此題為:  HDOJ 2401 Baskets of Gold Coins

題意:       有N個籃子,編号1—N,籃子中有很多金币,每個重w.  但是有一個編号的籃子中,每個金币重d.現從第一個籃子中拿1個金币,第二個籃子中拿2個……第N-1中拿          N-1個,第N中不拿,給出這些金币的總重量result,問:是第幾個籃子中的金币重量較輕?

第一個數為: 籃子總數N    。

第二個數為:  每個籃子中每個金币的品質。

第三個數為:  其中一個最輕的籃子的每個金币的品質。

第四個數為:  取出金币的總品質。

思路:      一道數學題,先将所有金币品質看作 w  ,求 1 — N-1籃子金币應有的總重量,所求和減去 result 得到金币重量的內插補點。

        若為0,則必為編号N; 若不為0,除以d,得到較輕金币的個數,即為所求編号。

已AC代碼:

#include<cstdio>
int main()
{
	int N,w,d,result,sum,i;
	while(scanf("%d%d%d%d",&N,&w,&d,&result)!=EOF)
	{
		sum=0;
		for(i=1;i<N;++i)
			sum+=w*i;
		int m=sum-result;
		if(m==0)
			printf("%d\n",N);
		else
			printf("%d\n",m/d);
	}
	return 0;
}