2015 Multi-University Training Contest 2 hdu 5308 I Wanna Become A 24-Point Master

I Wanna Become A 24-Point Master

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 897    Accepted Submission(s): 379
Special Judge


Problem Description
Recently Rikka falls in love with an old but interesting game -- 24 points. She wants to become a master of this game, so she asks Yuta to give her some problems to practice.

Quickly, Rikka solved almost all of the problems but the remained one is really difficult:

In this problem, you need to write a program which can get 24 points with  n numbers, which are all equal to n.
 

 

Input
There are no more then 100 testcases and there are no more then 5 testcases with  n100. Each testcase contains only one integer n (1n105)
 

 

Output
For each testcase:

If there is not any way to get 24 points, print a single line with -1.

Otherwise, let  A be an array with 2n1 numbers and at firsrt Ai=n (1in). You need to print n1 lines and the ith line contains one integer a, one char band then one integer c, where 1a,c<n+i and b is "+","-","*" or "/". This line means that you let Aa and Ac do the operation b and store the answer into An+i.

If your answer satisfies the following rule, we think your answer is right:

1. A2n1=24

2. Each position of the array A is used at most one tine.

3. The absolute value of the numerator and denominator of each element in array A is no more than 109
 

 

Sample Input
4
 

 

Sample Output
1 * 2
5 + 3
6 + 4
 

 

Source
 
 

解题:打表+规律

可以发现当n等于12时,可以求解由
至于其余的数字,假设我们取n = 14 由于得到24,前面n个我们只用到了12个,那么我们可以将13 - 14,然后再加上 24 仍然是24

如果是15 ,我们可以13 - 14,然后差乘以 15 最后积加上24.。。以此类推

 

$\frac{n + n + n + n}{n} \times \frac{n + n + n + n + n + n}{n} = 24$
 
妈拉个巴子,latex公式不管用了
 
好吧 
 
(n+n+n+n)/n = 4;
(n+n+n+n+n+n)/n = 6;
4*6 = 24
 
所以当n大于12的时候,已经很明显可以解决了
2015 Multi-University Training Contest 2 hdu 5308 I Wanna Become A 24-Point Master
 1 #include <bits/stdc++.h>

 2 using namespace std;

 3 const int maxn = 2100;

 4 const char str[16][maxn] = {

 5     "-1",

 6     "-1",

 7     "-1",

 8     "-1",

 9     "1 * 2\n5 + 3\n6 + 4",

10     "1 * 2\n6 * 3\n7 - 4\n8 / 5",

11     "1 + 2\n7 + 3\n8 + 4\n9 + 5\n10 - 6",

12     "1 + 2\n8 + 3\n4 + 5\n10 + 6\n11 / 7\n9 + 12",

13     "1 + 2\n9 + 3\n4 + 5\n11 - 6\n12 - 7\n13 / 8\n10 + 14",

14     "1 + 2\n10 + 3\n4 + 5\n12 + 6\n13 / 7\n11 - 14\n15 - 8\n16 + 9",

15     "1 + 2\n3 + 4\n12 + 5\n13 + 6\n14 / 7\n11 + 15\n8 - 9\n17 / 10\n16 + 18",

16     "1 + 2\n3 + 4\n13 / 5\n12 + 14\n15 - 6\n16 + 7\n17 - 8\n18 + 9\n19 - 10\n20 + 11",

17     "1 + 2\n3 + 13\n4 + 14\n5 + 6\n7 + 16\n8 + 17\n9 + 15\n10 + 19\n18 / 11\n20 / 12\n21 * 22",

18     "1 + 2\n3 + 4\n15 / 5\n14 - 16\n17 - 6\n18 + 7\n19 - 8\n20 + 9\n21 - 10\n22 + 11\n23 - 12\n24 + 13",

19     "1 + 2\n3 + %d\n4 + %d\n5 + 6\n7 + %d\n8 + %d\n9 + %d\n10 + %d\n%d / 11\n%d / 12\n%d * %d\n"

20 };

21 int main() {

22     int n;

23     while(~scanf("%d",&n)) {

24         if(n <= 13) puts(str[n]);

25         else {

26             printf(str[14],n+1,n+2,n+4,n+5,n+3,n+7,n+6,n+8,n+9,n+10);

27             int last = n + 12;

28             printf("%d - %d\n",13,14);

29             for(int i = 15; i <= n; ++i)

30                 printf("%d * %d\n",i,last++);

31             printf("%d + %d\n",n + 11,last);

32         }

33     }

34     return 0;

35 }
View Code

 

你可能感兴趣的:(master)