poj2356:Find a multiple

简介: 题目链接: 【鸽巢原理+乱搞】 其实用不着开$map$ 一步最巧妙的转化是$……$前缀和。 反正本宝宝突发奇想就出来了。 首先,我们分类讨论。 1.当$∃i \in N_{+} $ 且 $i \in [1,n]$ 使 $a_{i} | n$ 则直接选这个数就好 2.没有以上那种特殊情况的话,我们记录前缀和$sum_{i}= \sum _{k=1}^{i} a_{k} (mod \ \ n)$ 然后又有两种情况。

题目链接:

【鸽巢原理+乱搞】

其实用不着开$map$

一步最巧妙的转化是$……$前缀和。

反正本宝宝突发奇想就出来了。

首先,我们分类讨论。

1.当$∃i \in N_{+} $ 且 $i \in [1,n]$ 使 $a_{i} | n$ 则直接选这个数就好

2.没有以上那种特殊情况的话,我们记录前缀和$sum_{i}= \sum _{k=1}^{i} a_{k} (mod \ \ n)$ 然后又有两种情况。

根据鸽巢抽屉原理,因为我们现在在$(mod \ \ n)$剩余系下,有$n$个数。所以只会有两种情况: 

  (1).当这$n$个数互不相等的时候,一定 $∃i \in N_{+} $ 且 $i \in [1,n]$ 使 $sum_{i} \equiv 0 \ \ (mod \  n)$

     则直接选$1 \thicksim n$ 就好。

  (2).如果有两个$sum$相等,假设为$sum_{i},sum_{j} \ ,j>i$,则$sum_{j}-sum_{i} \equiv 0 \ \ (mod \ n)$

    而$sum_{j}-sum_{i} =  \sum_{k=i}^{j} a_{k} $ 所以就可以选这 $j-i$ 个数了。

一开始$WA$掉3次因为集合大小输出错了2333……qwq

 上代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
int n;
int a[100100];
int sum[100010];
signed main()
{
    scanf("%dll",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]),sum[i]=(sum[i-1]+a[i])%n;
        if(a[i]%n==0) {printf("1\n%lld",a[i]);return 0;}
        if(sum[i]==0) {printf("%lld\n",i);for(int j=1;j<=i;j++) printf("%lld\n",a[j]);return 0;}
    }
    for(int i=1;i<=n;i++)
      for(int j=i+1;j<=n;j++)
        if(sum[i]==sum[j])
        {
            printf("%lld\n",j-i);
            for(int k=i+1;k<=j;k++)
              printf("%lld\n",a[k]);
            return 0;
        }
    return 0;
}

 

相关文章
|
1月前
hdu 1019 Least Common Multiple
hdu 1019 Least Common Multiple
18 0
|
7月前
hdu 1019 Least Common Multiple
hdu 1019 Least Common Multiple
20 0
|
8月前
codeforces 344B - Simple Molecules
题意就是给出3个原子的化学价,然后组成一个分子,要保证这个分子是稳定的,如果你还记得高中化学知识的话这个很容易理解,然后让你求出1-2 2-3 1-3 号原子之间有几条键, 这里我分别用ta tb tc 表示, 用数学的方法表示出来的话就是a = tc + tb; b = ta+tc; c = ta + tb;可能有多种情况,只要输出一种即可。
27 0
|
9月前
Find The Multiple(dfs和bfs都可)
Find The Multiple(dfs和bfs都可)
15 0
|
人工智能 BI
CF1169C. Increasing by Modulo(二分)
CF1169C. Increasing by Modulo(二分)
93 0
PAT (Advanced Level) Practice - 1068 Find More Coins(30 分)
PAT (Advanced Level) Practice - 1068 Find More Coins(30 分)
97 0
|
Java C语言
HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)
HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)
81 0
HDOJ 1019 Least Common Multiple(最小公倍数问题)
HDOJ 1019 Least Common Multiple(最小公倍数问题)
82 0
HDOJ 2028 Lowest Common Multiple Plus(n个数的最小公倍数)
HDOJ 2028 Lowest Common Multiple Plus(n个数的最小公倍数)
104 0