2015多校联合第二场5308I Wanna Become A 24-Point Master
2015-09-01 19:33
302 查看
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 n≥100.
Each testcase contains only one integer n (1≤n≤105)
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 2n−1 numbers
and at firsrt Ai=n (1≤i≤n).
You need to print n−1 lines
and the ith
line contains one integer a,
one char band
then one integer c, where 1≤a,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. A2n−1=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
Sample Output
Author
XJZX
Source
2015 Multi-University Training Contest 2
好歹这个题看明白问啥了 ̄□ ̄|| 一丢丢思路都没有啊啊啊啊啊啊 度娘告诉我 要构造要手动拆 好吧你赢了 小数可以手动拆 大数呢 又说可以构造24 how?
(4*n/n)*(6*n/n)=24 当然了 凑2*12 或者3*8也没人拦着你 再找两个数减得0与剩下的数乘起来 所以 小数 3以下的凑不出来14一下的手动算 其实没多难 就是想不到T^T
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 n≥100.
Each testcase contains only one integer n (1≤n≤105)
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 2n−1 numbers
and at firsrt Ai=n (1≤i≤n).
You need to print n−1 lines
and the ith
line contains one integer a,
one char band
then one integer c, where 1≤a,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. A2n−1=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
Author
XJZX
Source
2015 Multi-University Training Contest 2
好歹这个题看明白问啥了 ̄□ ̄|| 一丢丢思路都没有啊啊啊啊啊啊 度娘告诉我 要构造要手动拆 好吧你赢了 小数可以手动拆 大数呢 又说可以构造24 how?
(4*n/n)*(6*n/n)=24 当然了 凑2*12 或者3*8也没人拦着你 再找两个数减得0与剩下的数乘起来 所以 小数 3以下的凑不出来14一下的手动算 其实没多难 就是想不到T^T
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int main() { int n,tmp; while(~scanf("%d",&n)) { // printf("%d:\n",n); if(n<=3) printf("-1\n"); else if(n==4) printf("1 * 2\n5 + 3\n6 + 4\n"); else if(n==5) printf("1 * 2\n3 / 6\n4 - 7\n5 * 8\n"); else if(n==6) printf("1 + 2\n3 + 4\n5 - 6\n7 + 8\n10 - 9\n"); else if(n==7) printf("1 + 2\n3 + 8\n9 / 4\n10 + 5\n11 + 6\n12 + 7\n"); else if(n==8) printf("1 + 2\n3 + 9\n4 - 5\n11 * 6\n12 * 7\n13 * 8\n10 + 14\n"); else if(n==9) printf("1 + 2\n3 + 10\n4 / 5\n6 / 7\n8 / 9\n11 - 12\n15 - 13\n 16 - 14\n"); else if(n==10) printf("1 + 2\n3 / 4\n5 / 6\n7 / 8\n9 / 10\n11 + 12\n16 + 13\n17 + 14\n18 + 15\n"); else if(n==11) printf("1 + 2\n3 / 4\n5 / 6\n7 - 8\n15 * 9\n16 * 10\n17 * 11\n12 + 13\n19 + 14\n20 + 18\n"); else if(n==12) printf("1 + 2\n3 - 4\n5 * 14\n6 * 15\n7 * 16\n8 * 17\n9 * 18\n10 * 19\n11 * 20\n12 * 21\n13 + 22\n"); else if(n==13) printf("1 + 2\n3 / 4\n5 / 6\n7 - 8\n17 * 9\n18 * 10\n19 * 11\n20 * 12\n21 * 13\n22 + 14\n23 - 15\n24 - 16\n"); else { printf("1 + 2\n3 + 4\n5 + 6\n7 + 8\n9 + 10\n"); printf("%d + %d\n%d + %d\n%d + %d\n",n+1,n+2,n+3,n+4,n+5,n+6); printf("%d / 11\n%d / 12\n",n+7,n+8); printf("%d * %d\n",n+9,n+10); printf("13 - 14\n"); tmp=n-14; int i; for(i=0;i<tmp;i++) { printf("%d * %d\n",n+12+i,15+i); } printf("%d + %d\n",n+11,n+12+tmp); } // printf("\n"); } return 0; }
相关文章推荐
- 第三方加载图片
- Reactor Pattern Explained
- 多线程相关
- anjs 分词器初步使用
- gridview控件
- 期望时间为线性时间的选择算法(C++)
- poj 2002 Squares
- Chisel-LLDB命令插件,让调试更Easy
- flume日志收集系统搭建
- [持续更新]HTML5学习笔记(三)
- ubuntu 15.04 怎么安装搜狗输入法
- UVA 1612 Guess
- java 第七天 排序
- flume+hive处理日志
- input string from adb
- 页面跳转
- 559B - Equivalent Strings & 560D - Equivalent Strings
- 利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个提示灯依次一个一个闪动,闪动频率为10次每秒(8个灯亮一遍为一个周期),循环
- Intent以及onActivityResult方法的使用
- Windows环境,svn服务器地址换了,如何更新本地工作目录