zoukankan      html  css  js  c++  java
  • UASCO Zero Sum DFS + Stack

    给一个N 表示1 2 3 ...N

    求出所有 zero sum的情况

    【简单Dfs 即可】 运算结果的时候我使用了一个stack...

    比如N = 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
    1-2-3-4-5+6+7

    Source Code:
    /*
    ID: wushuai2
    PROG: zerosum
    LANG: C++
    */
    //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <cstring>
    #include <cmath>
    #include <stack>
    #include <string>
    #include <map>
    #include <set>
    #include <list>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define Max(a,b) (((a) > (b)) ? (a) : (b))
    #define Min(a,b) (((a) < (b)) ? (a) : (b))
    #define Abs(x) (((x) > 0) ? (x) : (-(x)))
    #define MOD 1000000007
    #define pi acos(-1.0)
    #define RV(num) ((num) > 0 ? 0 : 1)
    
    using namespace std;
    
    typedef long long           ll      ;
    typedef unsigned long long  ull     ;
    typedef unsigned int        uint    ;
    typedef unsigned char       uchar   ;
    
    template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
    template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;}
    
    const double eps = 1e-7      ;
    const int M = 660000         ;
    const ll P = 10000000097ll   ;
    const int INF = 0x3f3f3f3f   ;
    const int MAX_N = 20         ;
    const int MAXSIZE = 101000000;
    
    ofstream fout ("zerosum.out");
    ifstream fin ("zerosum.in");
    
    int N, b[11];
    void solve(){
        int i, j, t;
        vector <int> vec;
        vec.push_back(1);
        for(i = 2; i <= N; ++i){
            int num = vec[vec.size() - 1];
            if(num < 0){
                num = vec[vec.size() - 2];
            }
            if(b[i] == 1){
                vec.pop_back();
                vec.push_back(num * 10 + i);
            } else if(b[i] == 2){
                vec.push_back(-1);
                vec.push_back(i);
            } else if(b[i] == 3){
                vec.push_back(-2);
                vec.push_back(i);
            } else{
                vec.push_back(i);
            }
        }
    
        int ans = vec[0];
        for(i = 1; i < vec.size(); i += 2){
            if(vec[i] == -1){
                ans += vec[i + 1];
            } else if(vec[i] == -2){
                ans -= vec[i + 1];
            }
        }
        if(ans == 0){
            fout << 1;
            for(i = 2; i <= N; ++i){
                if(b[i] == 1)   fout << ' ';
                else if(b[i] == 2)  fout << '+';
                else if(b[i] == 3)  fout << '-';
                fout << i;
            }
            fout << endl;
        }
    }
    
    void change(int n){
        int i, j;
        if(n == N + 1){
            solve();
            return;
        }
        for(i = 1; i <= 3; ++i){
            b[n] = i;
            change(n + 1);
        }
    }
    
    int main() {
        int i, j, k, l, m, n, t, s, c, w, q, num;
        fin >> N;
        for(i = 2; i <= N; ++i){
            b[i] = 1;
        }
        change(2);
    
        fin.close();
        fout.close();
        return 0;
    }
  • 相关阅读:
    继承项目第13周项目1基类中成员的访问限定符和派生类的继承方式
    架构业务wait和sleep区别狭义jiavaBean规范,三层架构模式
    文件文本编辑器ASP.net使用CKEditor(html文本编辑器)
    彩信对象android(5)_发彩信操作
    方法接口UML统一建模语言,java中七种设计原则,
    jquery实现jQuery实现图片轮播效果,jQuery实现焦点新闻
    设备文件BSP及嵌入式驱动开发笔记
    Invalidate
    C#集合类使用范例
    判断一段程序是由C 编译程序还是由C++编译程序编译的
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4297202.html
Copyright © 2011-2022 走看看