洛谷P1473 零的数列 Zero Sum

P1473 零的数列 Zero Sum

    • 134通过
    • 170提交
  • 题目提供者该用户不存在
  • 标签USACO
  • 难度普及/提高-

提交  讨论  题解

最新讨论

  • 路过的一定帮我看错了我死了…

题目描述

请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N。 现在请在数列中插入“+”表示加,或者“-”表示减,“ ”表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号)。 计算该表达式的结果并判断其值是否为0。 请你写一个程序找出所有产生和为零的长度为N的数列。

输入输出格式

输入格式:

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

输出格式:

按照ASCII码的顺序,输出所有在每对数字间插入“+”, “-”, 或 “ ”后能得到结果为零的数列。

输入输出样例

输入样例#1:

7

输出样例#1:

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

说明

翻译来自NOCOW

USACO 2.3

分析:数据很小,似乎不管怎么样做都可以过,甚至可以打表......很显然,可以爆搜,因为数字都是确定了,那么只需要搜索运算符和空格,空格的处理有些麻烦,模拟一下就能知道规律.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n,ans;
char c[9];

void dfs(int step, int num, int id)
{
    if (step == n)
    {
        int temp = ans;
        if (id == 1)
            temp += num;
        else
            temp -= num;
        if (temp == 0)
        {
            for (int i = 1; i < n; i++)
                printf("%d%c", i, c[i]);
            printf("%d\n", n);
        }
        return;
    }
    c[step] = ‘ ‘;
    if (id == 1)
        dfs(step + 1, num * 10 + step + 1, 1);
    else
        dfs(step + 1, num * 10 + step + 1, 2);
    c[step] = ‘+‘;
    if (id == 1)
    {
        ans += num;
        dfs(step + 1,step + 1, 1);
        ans -= num;
    }
    else
    {
        ans -= num;
        dfs(step + 1, step + 1, 1);
        ans += num;
    }
    c[step] = ‘-‘;
    if (id == 2)
    {
        ans -= num;
        dfs(step + 1, step + 1, 2);
        ans += num;
    }
    else
    {
        ans += num;
        dfs(step + 1, step + 1, 2);
        ans -= num;
    }
    return;
}

int main()
{
    scanf("%d", &n);
    dfs(1, 1, 1);
    //while (1);

    return 0;
}
时间: 2024-10-13 17:00:04

洛谷P1473 零的数列 Zero Sum的相关文章

洛谷 P1473 [USACO2.3]零的数列 Zero Sum

题目描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入"+"表示加,或者"-"表示减," "表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号). 计算该表达式的结果并判断其值是否为0. 请你写一个程序找出所有产生和为零的长度为N的数列. 输入输出格式 输入格式: 单独的一行表示整数N (3 <= N <= 9).

[模板]洛谷T2042 NOI2005 维护数列 Splay

PS:某大佬讲,当心情特别好or特别不好的时候,可以来攻略这个题...果然萌新足足被这题恶心了半个月... 进入正题: 这道题题意如此之裸-Splayの究极进化,那么就没有什么好讲的,直接说搞法好了... 为了代码写起来方便,萌新封装得可能有些过,若不合诸位大佬的口味还请见谅~ 节点node结构体定义: key:节点原值:size:子树大小:ch[2]:子树指针: set_pd:记录是否打了MAKE-SAME的懒标记:setv:MAKE-SAME的修改值:turn:记录是否旋转: sum:子树元

洛谷 P1181,1182 数列分段Section

数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述. 输出格式: 输出文件divide_a.out仅包含一个正整数,输出最少划分的段数. 输入输出样例 输入样例#1: 5 6 4 2 4 5

洛谷 P1438 无聊的数列

题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上.即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D, a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D. 2.2 P:询问序列的第P个数

洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑

题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量.现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可.R是一个质数.//codevs这里有坑,R是合数 输入输出格式 输入格式: 第一行为两个整数T,R.R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模 后面T行,每行一对整数N,M,

洛谷 P1855 榨取kkksc03

题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比赛,也可以公开赛,甚至可以指定谁可以参加比赛.这样,搞“x校联赛”最合适不过了.洛谷凭借

洛谷P1182 数列分段Section II 二分答案

洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值,要求一种方案,使最大值最小 题解 :二分答案 mid为分成的最大值, 然后O(n) 判断 答案 是否可行 贪心的做下去,如果再加上就要超过了,那就新开一段 最后判断开的段数是否小于 m 1.注意要判断 如果当前这个值大于 mid,一个值就已经大于 mid了,那就直接退出了,否则 ,这个值也只会单独算为

斐波那契数列的通项公式x+洛谷P2626x

#include<cstdio> #include<iostream> #include<cmath> using namespace std; int main() { int n; scanf("%d",&n); n--; double q=sqrt(5.0); int ans; ans=((pow((1+q)/2.0,n)/q-(pow((1-q)/2.0,n)/n))); cout<<ans<<endl; re

洛谷1349 广义斐波那契数列 【矩阵乘法】

洛谷1349 广义斐波那契数列 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格式 输入格式: 输入包含一行6个整数.依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整数范围内,n和m在长整数范围内. 输出格式: 输出包含一行一个整数,即an除以m的余数. 输入输出样例 输入样例#1: 1 1 1 1 10 7 输出样例#1: 6 说明