题目链接:http://codeforces.com/problemset/problem/448/C

题意:

  给你n个数字,给定m。

  问你是否能从中选出若干个数字,使得这些数字之和为m的倍数。

题解:

  其实就是要找一些数字,使得之和mod m为0。

  开一个vector,存当前已经能够构成的数字之和mod m之后的值。

  一开始vector为空,然后枚举n个数字a[i],对于每个数字枚举当前vector中的值v[i],将没有出现过的(a[i]+v[i])%m值加入vector中。

  最后判断下vector中有没有0就好。

  然而直接做是O(nm)的过不了。

  这时候就有一个结论:

    当n>m时,一定能够找出一些数字,使得它们之和mod m为0。

  证明:

    令sum[i]为数字a[1 to i]的和mod m后的值。

    显然,一定有一对(i,j)使得sum[i]==sum[j] (i<j)。

    所以有∑ a[i+1 to j] mod m == 0。得证。

  这样当n>m的时候特判一下直接输出,否则再跑上面的做法。

  这样复杂度就成O(m^2)的了。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX_M 1005 using namespace std; int n,m;
int vis[MAX_M];
vector<int> v; int main()
{
cin>>n>>m;
if(n>m)
{
cout<<"YES"<<endl;
return ;
}
memset(vis,false,sizeof(vis));
int x;
for(int i=;i<=n;i++)
{
cin>>x;
x%=m;
for(int j=,t=v.size();j<t;j++)
{
int now=(v[j]+x)%m;
if(!vis[now])
{
v.push_back(now);
vis[now]=true;
}
}
if(!vis[x])
{
v.push_back(x);
vis[x]=true;
}
}
if(vis[]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}

Codeforces 577B Modulo Sum:数学 结论【选数之和为m的倍数】的更多相关文章

  1. codeforces 577B. Modulo Sum 解题报告

    题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...

  2. Codeforces 577B Modulo Sum

    http://codeforces.com/problemset/problem/577/B 题意:有n个数,求有无一个子序列满足和是m的倍数 思路:用模下的背包做,发现n是十的六次方级别,但是有个神 ...

  3. CF 577B Modulo Sum

    题意:给一个长度为n的正整数序列,问能不能找到一个不连续的子序列的和可以被m整除. 解法:抽屉原理+dp.首先当m<n时一定是有答案的,因为根据抽屉原理,当得到这个序列的n个前缀和%m时,一定会 ...

  4. CodeForce 577B Modulo Sum

    You are given a sequence of numbers a1, a2, ..., an, and a number m. Check if it is possible to choo ...

  5. codeforces 577B B. Modulo Sum(水题)

    题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp

    B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...

  7. Codeforces Round #319 (Div. 2) B. Modulo Sum 抽屉原理+01背包

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. Codeforces Round #319 (Div. 2)B. Modulo Sum DP

                                                             B. Modulo Sum                               ...

  9. CODE VS1008选数

    #include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #inclu ...

随机推荐

  1. 怎样取消不能改动(仅仅读打开)的word文件的password

    作者:iamlaosong 朋友给我一个文档,是加了防改动password的,希望我能帮其取消.由于须要原文档的格式,取消方法例如以下(office2007环境): 1.打开文件.文件打开时,提演示样 ...

  2. 在Servlet的GenericServlet类中为什么有两个init()方法

    想要搞清楚这件事情,必须先了解Servlet容器调用Servlet的过程.调用过程如下 首次访问该Servlet1.调用init(ServletConfig config) 进行初始化,Servlet ...

  3. 值类型,Nullable类型

    1. 值类型 比如说int吧,是值类型,是个struct,是这样声明的 public struct Int32 : IComparable, IFormattable, IConvertible, I ...

  4. 在Hierarchy面板隐藏物体

    PlantObjPreview.hideFlags = HideFlags.HideInHierarchy;

  5. python 基础 9.7 创建表

    一. 创建表 #/usr/bin/python #-*- coding:utf-8 -*- #@Time   :2017/11/22 18:05 #@Auther :liuzhenchuan #@Fi ...

  6. Idea 远程调试jenkins 项目

    1.Jenkins配置 jenkins 服务启动时 需要在jvm启动项里加入如下代码: -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y ...

  7. 【BZOJ4548】小奇的糖果 set(链表)+树状数组

    [BZOJ4548]小奇的糖果 Description 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的 ...

  8. 智能家居DIY-空气质量检测篇-获取温度和湿度篇

    目录 智能家居DIY-空气质量检测篇-获取空气污染指数 前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一 ...

  9. 小程序获取openId

    1.小程序获取微信openId   wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId / ...

  10. 安装Eclipsemaven插件

    Maven的Eclipse插件m2eclipse的安装 The goal of the m2ec project is to provide a first-class Apache Maven su ...