您的位置:首页 > 大数据 > 人工智能

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

2015-07-23 22:08 465 查看
题意:n个 n构造出一个24点的式子来。

特判n<14的所有情况(注意当1 2 3的时候不行),例如 5 :(5*5*5-5)/5 7:(7+7+7)/7+7+7+7,然后对于大于等于14的,构造4*6,如(x+x+x+x)/x*(x+x+x+x+x+x)/x+(x-x)*x....这样子,然后输出.

另附我A spj代码

//#include <bits/stdc++.h>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <time.h>
#include <vector>
#include <cstdio>
#include <string>
#include <iomanip>
///cout << fixed << setprecision(13) << (double) x << endl;
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define ls rt << 1
#define rs rt << 1 | 1
#define pi acos(-1.0)
#define eps 1e-8
#define Mp(a, b) make_pair(a, b)
#define asd puts("asdasdasdasdasdf");
typedef long long ll;
//typedef __int64 LL;
const int inf = 0x3f3f3f3f;

int n;

int main()
{
	//freopen( "date.in", "w", stdout );
	while( ~scanf("%d", &n) ) {
	//for( n = 4; n <= 110; ++n ) {
		int x = n;
		//printf("%d\n", x);
		if( n <= 3 ) {
			printf("-1\n");
			continue;
		}
		if( x == 9 ) {
			printf("1 + 2\n");
			printf("10 + 3\n");
			for( int i = 4; i <= 6; ++i )
				printf("%d / %d\n", i, i + 3);
			printf("13 + 12\n");
			printf("15 + 14\n");
			printf("11 - 16\n");
			continue;
		}
		if( x == 4 ) {
			printf("1 * 2\n");
			printf("5 + 3\n");
			printf("6 + 4\n");
			continue;
		}
		if( x == 5 ) {
			printf("1 * 2\n");
			printf("3 * 6\n");
			printf("7 - 4\n");
			printf("8 / 5\n");
			continue;
		}
		if( n == 6 ) {
			printf("1 + 2\n");
			printf("3 + 4\n");
			printf("5 - 6\n");
			printf("7 + 8\n");
			printf("10 + 9\n");
			continue;
		}
		if( n == 7 ) {
			printf("1 + 2\n");	//8 14
			printf("3 + 8\n");	//9 21
			printf("4 + 5\n");	//10 14
			printf("6 + 10\n");	//11 21
			printf("11 / 7\n");
			printf("9 + 12\n");
			continue;
		}
		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
			printf("12 * 7\n");
			printf("13 * 8\n");
			printf("14 + 10\n");
			continue;
		}
		if( n == 10 ) {
			printf("1 + 2\n");	//11 20
			printf("3 / 4\n");	//12 1
			printf("5 / 6\n");	//13 1
			printf("7 / 8\n");	//14 1
			printf("9 / 10\n");	//15 1
			printf("11 + 12\n");	//16
			printf("16 + 13\n");
			printf("17 + 14\n");
			printf("18 + 15\n");
			continue;
		}
		if( n == 11 ) {
			printf("2 / 3\n");	//12 1
			printf("4 / 5\n");	//13 1
			printf("6 / 7\n");	//14 1
			printf("8 / 9\n");	//15 1
			printf("10 / 11\n");//16 1
			printf("12 + 13\n");//17 2
			printf("1 * 17\n");	//18 22
			printf("14 * 15\n");//19 1
			printf("18 + 19\n");//20 23
			printf("20 + 16\n");
			continue;
		}
		if( n == 12 ) {
			printf("3 / 4\n");
			printf("5 / 6\n");
			printf("7 / 8\n");
			printf("9 / 10\n");
			printf("11 / 12\n");	//13~17
			printf("13 - 14\n");//18
			printf("18 * 15\n");
			printf("19 * 16\n");
			printf("20 * 17\n");
			printf("21 + 2\n");
			printf("22 + 1\n");
			continue;
		}
		if( n == 13 ) {
			printf("2 / 3\n");	//14
			printf("4 / 5\n");	//15
			printf("6 / 7\n");	//16
			printf("8 / 9\n");	//17
			printf("10 / 11\n");//18
			printf("12 / 13\n");//19
			printf("15 + 16\n");//20 2
			printf("1 - 14\n"); //21 12
			printf("21 * 20\n");//22
			printf("22 * 17\n");
			printf("23 * 18\n");
			printf("24 * 19\n");
			continue;
		}
		if( n >= 14 ) {
			printf("1 + 2\n");//n+1
			printf("3 + 4\n");//n+2
			printf("5 + 6\n");//n+3
			printf("7 + 8\n");//n+4
			printf("9 + 10\n");//n+5
			printf("%d + %d\n", n+1, n+2);	//n+6
			printf("%d / %d\n", n+6, 11);	//n+7	4
			printf("%d + %d\n", n+3, n+4);	//n+8
			printf("%d + %d\n", n+8, n+5);	//n+9
			printf("%d / %d\n", n+9, 12);	//n+10	6
			printf("%d * %d\n", n+10, n+7);	//n+11 24
			printf("13 - 14\n");	//n+12	0
			for( int i = 15; i <= n; ++i ) {
				printf("%d * %d\n", i, n+i-3);
			}
			printf("%d + %d\n", n+11, 2*n-2);
		}

	}
	return 0;
}


spj代码:
int arr[220010];
char op[10];

int main() {
	freopen("date.in", "r", stdin);
	//freopen("date.out", "w", stdout);
	int i;
	while( ~scanf("%d", &i) ) {
		for (int j = 1; j <= i; ++j) {
			arr[j] = i;
		}
		int u, v;
		int cnt = i + 1;
		for (int j = 1; j <= i - 1; ++j) {
			scanf("%d%s%d", &u, op, &v);
			if (op[0] == '+') {
				arr[cnt++] = arr[u] + arr[v];
			}
			else if (op[0] == '-') {
				arr[cnt++] = arr[u] - arr[v];
			}
			else if (op[0] == '*') {
				arr[cnt++] = arr[u] * arr[v];
			}
			else {
				arr[cnt++] = arr[u] / arr[v];
			}
		}
		printf("%d\n", arr[cnt - 1]);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: