zoukankan      html  css  js  c++  java
  • 51nod 1103 N的倍数

    一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数。
    例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数。
     
    Input
    第1行:1个数N,N为数组的长度,同时也是要求的倍数。(2 <= N <= 50000)
    第2 - N + 1行:数组A的元素。(0 < A[i] <= 10^9)
    Output
    如果没有符合条件的组合,输出No Solution。
    第1行:1个数S表示你所选择的数的数量。
    第2 - S + 1行:每行1个数,对应你所选择的数。

    无论连续不连续,设si为前i个数的和,那么如果si%N==0,那么前i个数就满足了条件。

    如果不存在si%N==0,那么从s1到sN这N个数对N取余,范围肯定是0-N-1,但是前面已经说了没有=0的情况,所以范围相当于缩减成1 - N-1

    那么也就相当于N个余数放到N-1个框中,肯定有两个在一起。也就是存在i!=j,(sj-si)%N==0.

    也就是说,不存在No solution的情况。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5+100;
    
    int s[maxn],sum[maxn];
    int pos[maxn];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&s[i]);
        for(int i=1;i<=n;i++) sum[i] = (sum[i-1] + s[i])%n;
        //for(int i=1;i<=n;i++) printf("%d ",sum[i]);
        int ans=0;
        for(int i=1;i<=n;i++)
            if(sum[i] == 0)
            {
                ans=i;break;
            }
        if(sum[ans] ==0)//这个是如果前n项和==0了  就找到和是N的倍数了
        {
            printf("%d
    ",ans);
            for(int i=1;i<=ans;i++)
                printf("%d
    ",s[i]);
            return 0;
        }//数据有点儿水啊  这里直接就过了
    
        for(int i=1;i<=n;i++)
        {
            //因为上面已经统计过了 和为0的情况
            //这里面就不可能出现和为0的情况了 只会出现两个数的和相同的情况
            if(pos[sum[i]])//如果之前存在了
            {
                printf("%d
    ",i - pos[sum[i]]);// 比如sum[2] =2 ,sum[7] =2
                //那么就有从3到7 5个数
                ans= pos[sum[i]]+1;//ans 刚开始就等于3
                while(ans<=i)
                {
                    printf("%d
    ",s[ans]);
                }
                return 0;
            }
    
            pos[sum[i]] = i;
    
        }
    }
  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7400107.html
Copyright © 2011-2022 走看看