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

来源:互联网 发布:软件作者权 编辑:程序博客网 时间:2024/06/08 12:25

题意: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 14printf("3 + 8\n");//9 21printf("4 + 5\n");//10 14printf("6 + 10\n");//11 21printf("11 / 7\n");printf("9 + 12\n");continue;}if( n == 8 ) {printf("1 + 2\n");//9 16printf("3 + 9\n");//10 24printf("4 - 5\n");//11 0printf("11 * 6\n");//12printf("12 * 7\n");printf("13 * 8\n");printf("14 + 10\n");continue;}if( n == 10 ) {printf("1 + 2\n");//11 20printf("3 / 4\n");//12 1printf("5 / 6\n");//13 1printf("7 / 8\n");//14 1printf("9 / 10\n");//15 1printf("11 + 12\n");//16printf("16 + 13\n");printf("17 + 14\n");printf("18 + 15\n");continue;}if( n == 11 ) {printf("2 / 3\n");//12 1printf("4 / 5\n");//13 1printf("6 / 7\n");//14 1printf("8 / 9\n");//15 1printf("10 / 11\n");//16 1printf("12 + 13\n");//17 2printf("1 * 17\n");//18 22printf("14 * 15\n");//19 1printf("18 + 19\n");//20 23printf("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~17printf("13 - 14\n");//18printf("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");//14printf("4 / 5\n");//15printf("6 / 7\n");//16printf("8 / 9\n");//17printf("10 / 11\n");//18printf("12 / 13\n");//19printf("15 + 16\n");//20 2printf("1 - 14\n"); //21 12printf("21 * 20\n");//22printf("22 * 17\n");printf("23 * 18\n");printf("24 * 19\n");continue;}if( n >= 14 ) {printf("1 + 2\n");//n+1printf("3 + 4\n");//n+2printf("5 + 6\n");//n+3printf("7 + 8\n");//n+4printf("9 + 10\n");//n+5printf("%d + %d\n", n+1, n+2);//n+6printf("%d / %d\n", n+6, 11);//n+74printf("%d + %d\n", n+3, n+4);//n+8printf("%d + %d\n", n+8, n+5);//n+9printf("%d / %d\n", n+9, 12);//n+106printf("%d * %d\n", n+10, n+7);//n+11 24printf("13 - 14\n");//n+120for( 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;}


0 0