题目描述

你手上有$N$个非负整数,你需要在这些数中找出一个非空子集,使得它的元素之和能被$N$整除。如果有多组合法方案,输出任意一组即可。
注意:请使用高效的输入输出方式避免输入输出耗时过大。


输入格式

第一行一个整数$N$,代表数字个数。
接下来一行$N$个数,代表你手上的数。


输出格式

如果无解,输出$-1$。
否则,第一行输出一个整数$M$,代表你选择的数的个数。
接下来一行$M$个数,代表你选中元素的下标,这$M$个数必须两两不同。


样例

样例输入:

3
4 6 10

样例输出:

1
2


数据范围与提示

对于$20\%$的数据,$N\leqslant 20$。
对于$50\%$的数据,$N\leqslant 1,000$。
对于$100\%$的数据,$N\leqslant 1,000,000$,数字大小不超过${10}^9$。


题解

再一次没有打整洁……

有这样一个结论,对于一个序列,如果有一段的和$\mod N$为$0$,那么无论怎么打乱序列都会存在这么一段;如果没有,无论怎么打乱还是没有。

具体为什么我也不会证明,考场上用这个结论$A$掉这道题的也说不上来(我都不知道他们是怎么$A$的……)

所以我们可以记录一下每个模数出现的位置,如果已经出现过了直接输出这一段就好了。

然而考场上我并没有这么做,$random_shuffle$随机打乱序列,然后看前缀和$\mod N$是否为$0$,如果有则输出这些数。

当时以为自己只能拿$20$分,于是打了一个比正解还难搞的$50$分的$DP$,考完之后……

我的天!!!$Accepted$,当时就懵了……

所以考场上乱搞还是有很大帮助的。

时间复杂度:$\Theta($玄学$)$(实际上挺小的)。

期望得分:$100$分(其实考场上以为只有$20$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n;
pair<int,int> a[1000001];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].first);
a[i].first%=n;
a[i].second=i;
if(!a[i].first){printf("1\n%d",i);return 0;}
}
srand(time(NULL));
while(1)
{
random_shuffle(a+1,a+n+1);
int sum=0;
for(int i=1;i<=n;i++)
{
sum=(sum+a[i].first)%n;
if(!sum)
{
printf("%d\n",i);
for(int j=1;j<=i;j++)
printf("%d ",a[j].second);
return 0;
}
}
}
return 0;
}

rp++

[CSP-S模拟测试]:Set(随机化)的更多相关文章

  1. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  2. csp-s模拟测试80(b)

    csp-s模拟测试80(b) 水题没什么可写的. $T1SB$规律题正解调了仨小时就过了. $T2SBDp$题颓完题解就秒了. $T3SB$数据结构考场想到正解就弃了,考后太懒一半正解一发随机化就A了 ...

  3. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  4. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  5. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  6. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  7. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

  8. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  9. NOIP模拟测试1(2017081501)

    好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...

  10. Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代 ...

随机推荐

  1. elementUI 弹出框添加可自定义拖拽和拉伸功能,并处理边界问题

    开发完后台管理系统的弹出框模块,被添加拖拽和拉伸功能,看了很多网上成熟的帖子引到项目里总有一点问题,下面是根据自己的需求实现的步骤: 首先在vue项目中创建一个js文件eg:dialog.js imp ...

  2. php登陆ssh执行命令

    <?php $connection=ssh2_connect('172.16.10.3',22);ssh2_auth_password($connection,$user,$pass);$cmd ...

  3. MySQL 查询语句--------------进阶9:联合查询

    #进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union..... 应用场景:要查询的结果来自于多个表,且多个表没有 ...

  4. Ubuntu TTy字体

    目的:修改tty终端下的字体大小,中文显示,字体美观问题 Linux版本:xubuntu14.04 当切换到tty终端模式式,中文乱码,且字体太小,影响阅读.在网上搜了一些资料,将问题及解决方案记录如 ...

  5. Maven安装、配置环境变量

    一.首先在官网下载安装maven 1.进入官网 2.找到下载位置 3.点进去后是最新版的,若需要最新版就下这个,需要旧版本接着往下滑 4.下载历史版本 (1)点击"archives" ...

  6. k-meanas原理自实现

    import numpy as np import matplotlib.pyplot as plt def build_data(): """ 准备数据 :return ...

  7. ExcelVBA 操作putty

    Private Sub login(ip As String, userName As String, password As String) Dim TaskID As Long '设置进程id p ...

  8. Webpack的使用指南-Webpack的常用解决方案

    说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html-webpa ...

  9. RMQ(鸽巢原理或字符串操作)

    http://acm.hdu.edu.cn/showproblem.php?pid=3183 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)   ...

  10. Python自学第一天

    Python #-*- coding:utf8 -*-(Python文件开头添加)用来解决中文编码问题 注:Python3以上文件不用加 一.变量:变量有数字.字母和下划线组成 1.不能以数字开头 2 ...