[LOJ6220] sum

摘要:
描述给定一个数字,需要从中选择几个数字,使其总和为的倍数。很容易证明你能找到它。解决方案如果数字是的倍数,将直接输出。否则,考虑查找前缀和序列并,并将其设置为(s[]),则必须有两个相同的前缀和序列,并将它设置为,则间隔必须满足问题的含义。

Description

给定 (n) 个数,要求从其中选出若干个数使得其和是 (n) 的倍数。容易证明一定能找到。

Solution

如果有一个数是 (n) 的倍数则直接输出,否则,考虑求出前缀和序列并 (mod n),设为 (s[]),则 (s[0],s[1],...,s[n]) 中一定有两个相同的(鸽巢原理),设为 (s[l],s[r]),则 ([l+1,r]) 区间一定满足题意。

#include <bits/stdc++.h>
using namespace std;

#define int long long 
const int N = 1000505;

int n,a[N],s[N];

signed main()
{
    ios::sync_with_stdio(false);

    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
    for(int i=0;i<=n;i++) s[i]=s[i]%n;

    int flag=0;
    for(int i=1;i<=n;i++) if(a[i]%n==0) flag=i;

    if(flag)
    {
        cout<<flag<<" "<<a[flag]<<endl;
    }
    else
    {
        map<int,int> mp;
        int a1=0,a2=0;
        for(int i=0;i<=n;i++)
        {
            if(mp[s[i]]) 
            {
                a1=mp[s[i]];
                a2=i;
                break;
            }
            else
            {
                mp[s[i]]=i;
            }
        }
        for(int i=a1+1;i<=a2;i++)
        {
            cout<<i<<" "<<a[i]<<endl;
        }
    }
    system("pause");
}

免责声明:文章转载自《[LOJ6220] sum》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇YOLOv5的改进xterm.js的深入学习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

VMP加壳(二):VMP的虚拟化原理

由于CPU只能识别和执行二进制文件,并直接让硬件CPU执行虚拟机的二进制代码,因此只能考虑通过纯软件模拟虚拟机执行代码指令。为了在软件级别模拟CPU执行二进制代码指令,一般的虚拟机指令要么是操作寄存器,虚拟机指令的处理程序必须模拟这些函数。它用于指示虚拟CPU当前执行的代码。为了满足上述要点,2。VMP虚拟机的执行过程(1)考虑启动VT。...

前端利器躬行记(7)——自制脚手架

path是Node.js中的路径模块path.resolve()用于解析绝对路径,__dirname可读取当前模块的目录名。静态资源最终路径=output.publicPath+加载器或插件的配置路径。假设html元素的背景是一条相对路径,那么最后生成的路径将会是“/img/lake.png”,其中配置的输出目录是“img”。paths.servedPath...

如何在Java应用中提交Spark任务?

我丈夫是一个用户定义的ID,作为参数传递给Spark应用程序;Spark初始化后,可以通过SparkContext_ ID和URL通过驱动程序连接到数据库,新版本关联关系的插入归因于互联网时代的信息爆炸。我看到了群友的聊天,了解了SparkLauncher。经过调查,我发现它可以基于Java代码自动提交Spark任务。因为SparkLauncher的类引用了...

grep多条件查找"与","或"

这里以jps命令为例jps查看全部的jvm进程"与"查找下图是所有jvm进程如果想查找256891ThriftServer服务用"与"查找可以理解为是条件查找命令:jps|grep-eer|grep-eT"或"查找方法一:grep-E'A|B'和grep-eA-eB方法二:egrep'A|B'方法三:awk'/A|B/'...

面试了一个 31岁的iOS开发者,思绪万千,30岁以上的程序员还有哪些出路?

前言之前HR给了我一份简历,刚看到简历的第一眼,31岁?31岁,iOS开发工程师,工作经历7年,5年左右都在外包公司,2年左右在创业公司。iOS开发工程师这块,还是很少遇到30岁以上的开发,正好,来了一个30岁的开发,说实话,对我来说,还是蛮期待的,希望对我有所启示。这样的过程持续了半个小时那么年过350岁的程序员还有出路吗?作为一个8年的iOS开发,而且几...

js 浏览器窗口 刷新、关闭事件

当前页面不会直接关闭,可以点击确定按钮关闭或刷新,也可以取消关闭或刷新。...