zoukankan      html  css  js  c++  java
  • HDU 5308 I Wanna Become A 24-Point Master

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5308


    题面:

    I Wanna Become A 24-Point Master

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 602    Accepted Submission(s): 249
    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 b and 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
     

    解题:
        如此之大的数据量,搜索是肯定不行。但还是被题目那句大于100的数据不会超过5组给蒙了一下。队友之前想着能不能从24往前搜,实则也是不行的。

    由于根本不知道前面到底有什么数。又该相应如何的操作。看了题解后,恍然大悟。就应该去构造。


        枚举n比較小的情况,然后当n大于等于14时,能够去凑((4*n)/n)*((6*n)/n),尽管是12个n,可是仍要从14,開始,由于多余的n须要通过一次减法,多次乘法消去。最后再加上之前算出的24就可以。


    代码:

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int main()
    {
    	int n,tmp;
    	while(~scanf("%d",&n))
    	{
    	//	printf("%d:
    ",n);
    		if(n<=3)
    			printf("-1
    ");
    		else if(n==4)
    			printf("1 * 2
    5 + 3
    6 + 4
    ");
    		else if(n==5)
    			printf("1 * 2
    3 / 6
    4 - 7
    5 * 8
    ");
    		else if(n==6)
    			printf("1 + 2
    3 + 4
    5 - 6
    7 + 8
    10 - 9
    ");
    		else if(n==7)
    			printf("1 + 2
    3 + 8
    9 / 4
    10 + 5
    11 + 6
    12 + 7
    ");
    		else if(n==8)
    			printf("1 + 2
    3 + 9
    4 - 5
    11 * 6
    12 * 7
    13 * 8
    10 + 14
    ");
    		else if(n==9)
    			printf("1 + 2
    3 + 10
    4 / 5
    6 / 7
    8 / 9
    11 - 12
    15 - 13
     16 - 14
    ");
    		else if(n==10)
    			printf("1 + 2
    3 / 4
    5 / 6
    7 / 8
    9 / 10
    11 + 12
    16 + 13
    17 + 14
    18 + 15
    ");
    		else if(n==11)
    			printf("1 + 2
    3 / 4
    5 / 6
    7 - 8
    15 * 9
    16 * 10
    17 * 11
    12 + 13
    19 + 14
    20 + 18
    ");
    		else if(n==12)
    			printf("1 + 2
    3 - 4
    5 * 14
    6 * 15
    7 * 16
    8 * 17
    9 * 18
    10 * 19
    11 * 20
    12 * 21
    13 + 22
    ");
    		else if(n==13)
                printf("1 + 2
    3 / 4
    5 / 6
    7 - 8
    17 * 9
    18 * 10
    19 * 11
    20 * 12
    21 * 13
    22 + 14
    23 - 15
    24 - 16
    ");
    		else
    		{
    			printf("1 + 2
    3 + 4
    5 + 6
    7 + 8
    9 + 10
    ");
    			printf("%d + %d
    %d + %d
    %d + %d
    ",n+1,n+2,n+3,n+4,n+5,n+6);
    			printf("%d / 11
    %d / 12
    ",n+7,n+8);
    			printf("%d * %d
    ",n+9,n+10);
    			printf("13 - 14
    ");
    			tmp=n-14;
    			int i;
    			for(i=0;i<tmp;i++)
    			{
    				printf("%d * %d
    ",n+12+i,15+i);
    			}
    			printf("%d + %d
    ",n+11,n+12+tmp);
    		}
    	//	printf("
    ");
    	}
    	return 0;
    }





  • 相关阅读:
    js 左键点击页面时显示“您好”,右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。
    搜藏 SQL
    邮件发送 图片
    超市购物打印小票的简单程序 记录下来
    KFC打印
    printf和scanf对于各种格式说明符
    Unity3d Camera size
    C#笔记
    CSV文件读写注意
    cocos2dx相关网址
  • 原文地址:https://www.cnblogs.com/llguanli/p/6970459.html
Copyright © 2011-2022 走看看