CodeForces - 468A 24 Game

24点游戏大家应该很熟悉。通过加减乘除四则运算用四个数得到24。
现在考虑一个升级版的游戏:给定1...n这n个数,通过加、减、乘这三种运算得到24。

Input

一个正整数n,n<=100000

Output

如果有解,第一行输出"YES"
接下来n-1行,每行输出一个操作,形如"a op b = c" 。详情见样例。
无解则输出"NO"
注意:你的中间结果绝对值不得超过10^18

Sample Input

8

Sample Output

YES
8 * 7 = 56
6 * 5 = 30
3 - 4 = -1
1 - 2 = -1
30 - -1 = 31
56 - 31 = 25
25 + -1 = 24
 1 #include<iostream>
 2 using namespace std;
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<vector>
 7 typedef long long ll;
 8 void out(ll x,ll y,ll z,char c){
 9     printf("%I64d %c %I64d = %I64d\n",x,c,y,z);
10 }
11 int main(){
12     ll n;
13     cin>>n;
14     if(n<4){
15         printf("NO");
16         return 0;
17     }
18     printf("YES\n");
19     if(n==4){
20         out(1,2,2,'*');
21         out(2,3,6,'*');
22         out(6,4,24,'*');
23     }
24     else if((n&1)==0){
25         out(1,2,2,'*');
26         out(2,3,6,'*');
27         out(6,4,24,'*');
28         for(int i=n;i>4;i-=2){
29             out(i,i-1,(long long)i-(i-1),'-');
30             out(1,24,24,'*');
31         }
32     }
33     else{
34         out(3,4,12,'*');
35         out(5,2,3,'-');
36         out(3,1,2,'-');
37         out(2,12,24,'*');
38         if(n==5)
39             return 0;
40         for(int i=n;i>5;i-=2){
41             out(i,i-1,(long long)i-(i-1),'-');
42             out(1,24,24,'*');
43         }
44     }
45     return 0;
46 }

 

posted @ 2018-04-12 20:38  晓风微微  阅读(250)  评论(0编辑  收藏  举报