HDU 5308 I Wanna Become A 24-Point Master(2015多校第二场)

I Wanna Become A 24-Point Master

Time Limit: 2000/1000 MS (Java/Others)    Memory
Limit: 65536/65536 K (Java/Others)

Total Submission(s): 485    Accepted Submission(s): 191

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  numbers,
which are all equal to .

Input

There are no more then 100 testcases and there are no more then 5 testcases with .
Each testcase contains only one integer 

Output

For each testcase:

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

Otherwise, let  be
an array with  numbers
and at firsrt .
You need to print  lines
and the th
line contains one integer ,
one char  and
then one integer c, where  and  is
"+","-","*" or "/". This line means that you let  and  do
the operation  and
store the answer into .

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

1. 

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

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

Sample Input

4

Sample Output

1 * 2
5 + 3
6 + 4

Source

2015 Multi-University Training Contest 2

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
int N;
int main()
{
    while(scanf("%d", &N)!=EOF)
    {
        if(N == 1 || N == 2 || N == 3 ) printf("-1\n");
        else if(N == 4)
        {
            printf("1 * 2\n");
            printf("5 + 3\n");
            printf("6 + 4\n");
        }
        else if(N == 5)
        {
            printf("1 * 2\n");//6  25
            printf("3 * 6\n");//7  125
            printf("7 - 4\n");//8  120
            printf("8 / 5\n");//9  24
        }
        else if(N == 6)
        {
            printf("1 * 2\n");//7  36
            printf("7 - 3\n");//8  30
            printf("8 - 4\n");//9  24
            printf("9 + 5\n");//10 30
            printf("10 - 6\n");//11 24
        }
        else if(N == 7)
        {
            printf("1 / 2\n");//8  1
            printf("3 + 8\n");//9 8
            printf("4 + 5\n");//10 14
            printf("10 + 6\n");//11 21
            printf("11 / 7\n");//12 3
            printf("12 * 9\n");//13 24
        }
        else if(N == 8)
        {
            printf("1 + 2\n");//9  16
            printf("3 + 9\n");//10 24
            printf("4 - 5\n");//11 0
            printf("11 * 6\n");//12 0
            printf("12 * 7\n");//13 0
            printf("13 * 8\n");//14 0
            printf("14 + 10\n");//15 24
        }
        else if(N == 9)
        {
            printf("1 + 2\n");//10   18
            printf("10 + 3\n");//11  27
            printf("11 * 4\n");//12  243
            printf("12 / 5\n");//13  27
            printf("6 + 7\n");//14   18
            printf("14 + 8\n");//15  27
            printf("15 / 9\n");//16  3
            printf("13 - 16\n");//17 24
        }
        else if(N == 10)
        {
            printf("1 + 2\n");//11   20
            printf("3 + 4\n");//12   20
            printf("12 + 5\n");//13  30
            printf("13 + 6\n");//14  40
            printf("14 / 7\n");//15  4
            printf("11 + 15\n");//16 24
            printf("8 - 9\n");//17   0
            printf("17 / 10\n");//18 0
            printf("16 + 18\n");//19 24
        }
        else if(N == 11)
        {
            printf("1 + 2\n");//12  22
            printf("12 / 3\n");//13 2
            printf("13 + 4\n");//14 13
            printf("14 + 5\n");//15 24
            printf("15 + 6\n");//16 35
            printf("16 + 7\n");//17 46
            printf("17 + 8\n");//18 57
            printf("18 - 9\n");//19 46
            printf("19 - 10\n");//20 35
            printf("20 - 11\n");//21 24
        }
        else if(N >= 12 && N % 2 == 0)
        {
            printf("1 + 2\n");//N+1                  2*N
            printf("%d + 3\n",N+1);//N+2             3*N
            printf("4 + 5\n");//N+3                  2*N
            printf("%d + 6\n",N+3);//N+4             3*N
            printf("%d + 7\n",N+4);//N+5             4*N
            printf("8 + 9\n");//N+6                  2*N
            printf("%d / 10\n",N+2);//N+7            3
            printf("%d / 11\n",N+5);//N+8            4
            printf("%d / 12\n",N+6);//N+9            2
            printf("%d * %d\n",N+7,N+8);//N+10       12
            printf("%d * %d\n",N+9,N+10);//N+11      24
            for(int i=0;i<(N-12)/2;i++)
            {
                printf("%d + %d\n",N+11+2*i,13+i*2);//N+12+2*i
                printf("%d - %d\n",N+12+2*i,14+i*2);//N+13+2*i
            }
        }
        else if(N>=13 && N % 2 == 1)
        {
            printf("1 + 2\n");//N+1               2*N
            printf("%d + 3\n",N+1);//N+2          3*N
            printf("4 + 5\n");//N+3               2*N
            printf("%d + 6\n",N+3);//N+4          3*N
            printf("%d + 7\n",N+4);//N+5          4*N
            printf("%d + 8\n",N+5);//N+6          5*N
            printf("%d + 9\n",N+6);//N+7          6*N
            printf("%d + 10\n",N+7);//N+8         7*N
            printf("%d + 11\n",N+8);//N+9         8*N
            printf("%d / 12\n",N+2);//N+10        3
            printf("%d / 13\n",N+9);//N+11        8
            printf("%d * %d\n",N+10,N+11);//N+12  24
            for(int i=0;i<(N-13)/2;i++)
            {
                printf("%d + %d\n",N+12+2*i,14+i*2);//N+13+2*i
                printf("%d - %d\n",N+13+2*i,15+i*2);//N+14+2*i
            }

        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 19:59:05

HDU 5308 I Wanna Become A 24-Point Master(2015多校第二场)的相关文章

hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语

题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44 题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输出-1. 思路:乍看起来,没什么规律,但是可以想象的是(n+n+n+n)/n=4,(n+n+n+n+n+n)/n=6,(n-n)*n*n*·····*n=0所以在n大于15的时候结果基本是固定的,只要对小于15的数一一输出就行(但是这题真是无语,算这种题目真是累,脑洞啊~~) 代码: 1 #incl

hdu 5305 Friends(2015多校第二场第6题)记忆化搜索

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5305 题意:给你n个人,m条关系,关系可以是online也可以是offline,让你求在保证所有人online关系的朋友和offline关系的朋友相等的情况下,这样的情况有多少种. 思路:因为online关系和offline关系的人数相等,而且m最多才28,所以只要枚举每个人的一半的关系是否符合要求即可,而且根据题意m是奇数或者有一个人的总关系为奇数那么就没有符合要求的情况,这样可以排除很多情况.

hdu 5301 Buildings (2015多校第二场第2题) 简单模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子在n*m矩形中的位置,黑格子占一个1*1的小矩形的空间,用各种矩形去填充n*m矩形,(x,y)位置不能填,且每个去填充的小矩形都有一边是靠着n*m矩形的外框,求这些填充的小矩形在最小大小情况下的面积最大的矩形面积. 思路:要是填充的矩形大小最小,那么靠近边框的长度一定为1,所以只要判断在矩形内部的长

HDU 5301 Buildings(2015多校第二场)

Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 759    Accepted Submission(s): 210 Problem Description Your current task is to make a ground plan for a residential building located

HDU 5305 Friends(2015多校第二场 dfs + 剪枝)

Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 552    Accepted Submission(s): 253 Problem Description There are  people and  pairs of friends. For every pair of friends, they can choos

HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)

Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 321    Accepted Submission(s): 95 Problem Description There are  apple trees planted along a cyclic road, which is  metres lon

HDU 5288 OO&#39;s sequence (2015多校第一场 二分查找)

OO's Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 955    Accepted Submission(s): 358 Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the nu

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): 366    Accepted Submission(s): 141 Special Judge Problem Description Recently Rikka falls in love with an old bu

[模拟] hdu 5308 I Wanna Become A 24-Point Master

题意: 给你n个数,每个数都是n, 然后把这n个数加减乘除,每个数都必须用一次,且只能一次,并且运算完的数也都得用一次. 也就是做n-1次,问能不能得到24,输出过程 xi ? xj  第i个数与第j个数做?运算 这种形式 思路: 因为n有可能很大,那么肯定需要一种完美的构造 最简单的方法是构造出4*6 构造出4需要5个数,构造出6需要7个数 也就是最少需要12个数,剩下的数就是相减为0,然后乘就好了 但是需要注意的就是13是不满足这个规律的 所以1~13特判一下,14以上的按规律输出就好了~