码迷,mamicode.com
首页 > 其他好文 > 详细

LibreOJ #6220. sum(数论)

时间:2017-08-22 00:40:44      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:tchar   etc   sed   name   数论   onclick   else   return   amp   

  题目大意:在数组中找出一些数,使它们的和能被n整除

  这题标签是数学,那我就标题就写数论好了...

  显然如果数组中有n的倍数直接取就行。

  那假设数组中没有n的倍数,把数组中的数求前缀和后全部%n,会得到一堆1~n-1的数(注意没有0,因为数组中没有n的倍数),那根据抽屉原理一定有两个相同的数,设这两个相同的数所在的位置为l和r,那么下标在[l+1,r]的这些数的和一定是n的倍数

  记得开LL,我还RE两发QAQ

技术分享
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#define ll long long 
using namespace std;
const int maxn=1000050,inf=1e9;
ll n,sum;
ll a[maxn],v[maxn];
void read(ll &k)
{
    int f=1;k=0;char c=getchar();
    while(c<0||c>9)c==-&&(f=-1),c=getchar();
    while(c<=9&&c>=0)k=k*10+c-0,c=getchar();
    k*=f;
}
int main()
{
    read(n);sum=0;
    for(int i=1;i<=n;i++)
    {
        read(a[i]);
        sum=(sum+a[i])%n;
        if(!v[sum])v[sum]=i;
        else 
        {
            for(int j=v[sum]+1;j<=i;j++)printf("%d %lld\n",j,a[j]);
            return 0;
        }
    }
    return 0;
}
View Code

LibreOJ #6220. sum(数论)

标签:tchar   etc   sed   name   数论   onclick   else   return   amp   

原文地址:http://www.cnblogs.com/Sakits/p/7407103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!