• [FZYZOJ 1204] 零和问题


    P1204 -- 零和问题

    时间限制:1000MS

    内存限制:131072KB

    Description

    川爷你看你选的题叫我怎么改描述啊╮(╯_╰)╭各位现在请脑补有趣张要做的事吧我实在编不下去了_(:3 J Z)_

    请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N。

    现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将每一对数字组合在一起(请不在第一个数字前插入符号)。

    计算该表达式的结果并注意你是否得到了和为零。

    请你写一个程序找出所有产生和为零的长度为N的数列。

    Input Format

    单独的一行表示整数N (3 <= N <= 9)。

    Output Format

    按照ASCII码的顺序,输出所有在每对数字间插入“+”, “-”, 或“ ”后能得到和为零的数列。(注意:就算两个数字之间没有插入符号也应该保留空格)

    Sample Input

    7
    

    Sample Output

    1+2-3+4-5-6+7
    1+2-3-4+5+6-7
    1-2 3+4+5+6+7
    1-2 3-4 5+6 7
    1-2+3+4-5+6-7
    1-2-3-4-5+6+7

    【题解】

    水水的搜索题,0s404Kb过了,然而打表的0s242Kb TAT。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 char pos[12];
     5 void prt() {
     6     for(int i=1;i<n;++i) printf("%d%c",i,pos[i]);
     7     printf("%d
    ",n);
     8 }
     9 void dfs(int now,int sum,int w,int k) {
    10     if(now==n) {if(sum+w*k==0)prt();return;}
    11     pos[now]=' ';dfs(now+1,sum,w*10+now+1,k);
    12     pos[now]='+';dfs(now+1,sum+w*k,now+1,1);
    13     pos[now]='-';dfs(now+1,sum+w*k,now+1,-1);
    14 }
    15 int main() {
    16     scanf("%d",&n);
    17     dfs(1,0,1,1);
    18     return 0;
    19 }
    View Code

    到常州啦QAQ明天开始训练=-=坐了一整天的动车

    这篇文章由TonyFang发布。 所有解释权归TonyFang所有。 Mailto: tony-fang@map-le.net
  • 相关阅读:
    数据结构与算法部分习题题解
    Codeforces Round #372 +#373 部分题解
    KMP算法的正确性证明及一个小优化
    后记
    BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
    BZOJ 4085:[Sdoi2015]bigyration(SDOI 2015 round 2 Day 1)
    使用 async await 封装微信小程序HTTP请求
    mongo创建数据库和用户
    把实体bean对象转换成DBObject工具类
    Trident整合MongoDB
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/fzyzoj1204.html
Copyright © 2020-2023  润新知