Desert
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 976 Accepted Submission(s): 712
Problem Description
A tourist gets lost in the desert with n liters of water. He drinks positive integer units of water each day.
Write a program to calculate how many different ways the tourist can drink up the water.
Write a program to calculate how many different ways the tourist can drink up the water.
Input
The first line contains the number of test cases
T(T≤10)
.
Next T lines contain the number n(1≤n≤1000000) for each test case.
Next T lines contain the number n(1≤n≤1000000) for each test case.
Output
Output consists of
T
lines.
Each line contains the binary number which represents number of different ways to finish up the water specified in the test case.
Each line contains the binary number which represents number of different ways to finish up the water specified in the test case.
Sample Input
1 3
Sample Output
100Hint3 liters of water can be comsumed in four different ways show in the following. 1. 1 1 1 2. 1 2 3. 2 1 4. 3 If we write 4 in binary, it's 100.
简要题意及分析:
一个人有n升水,每天喝掉k(k<=n)升水,问一共有多少种不同的方法。
采用隔板法,把正整数n拆分成n个1,然后产生n-1的空,向这些空插入隔板,共有C(n-1,0)+C(n-1,1)+C(n-1,2)...+C(n-1,n-1)=pow(2,n-1)种方法。
注意数据规模过大,而且题目要求输出二进制数。由于2的整数幂的二进制表示具有特殊性,即2^n-1用二进制表示即为1后面跟着n-1个0,循环输出即可。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;++i)
printf("%d",i==0?1:0);
printf("\n");
}
return 0;
}