Codeforces 577B Modulo Sum:数学 结论【选数之和为m的倍数】
题目链接: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的倍数】的更多相关文章
- codeforces 577B. Modulo Sum 解题报告
题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...
- Codeforces 577B Modulo Sum
http://codeforces.com/problemset/problem/577/B 题意:有n个数,求有无一个子序列满足和是m的倍数 思路:用模下的背包做,发现n是十的六次方级别,但是有个神 ...
- CF 577B Modulo Sum
题意:给一个长度为n的正整数序列,问能不能找到一个不连续的子序列的和可以被m整除. 解法:抽屉原理+dp.首先当m<n时一定是有答案的,因为根据抽屉原理,当得到这个序列的n个前缀和%m时,一定会 ...
- 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 ...
- codeforces 577B B. Modulo Sum(水题)
题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 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/ ...
- 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 ...
- Codeforces Round #319 (Div. 2)B. Modulo Sum DP
B. Modulo Sum ...
- CODE VS1008选数
#include<cstdlib> #include<cstdio> #include<iostream> #include<cmath> #inclu ...
随机推荐
- ORACLE 表空间使用率查询
SELECT A.TABLESPACE_NAME, A.BYTES / (1024 * 1024 * 1024 ) TOTAL, B.BYTES / (1024 * 1024 * 1024 ) USE ...
- C语言中的main函数以及main函数是如何被调用的
main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...
- jmeter java 请求 payload
1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&edit ...
- ios cocoapods获取不到最新库的原因主要有两个:
获取不到最新库的原因主要有两个: 1.cocoapods的版本过低 2.还没有更新本地仓库 解决方法: 1.更新pods 在终端执行命令行 sudo gem install cocoapods 执行完 ...
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...
- window下python安装pip
python3.5 1.cmd下运行python -m pip install -U pip 2.Path添加python安装目录下的\Scripts,有pip.exe文件 3.重新打开cmd ...
- 【很强大的Android图表引擎 - AChartSDK】
在手机移动App开发中,图表在app中越来越占领举足轻重的地图.而在Android领域.AchartEngine 图表引擎可谓无人不知无人不晓. 可是今天就给各位推荐更为强大的图表引擎. 为什么说更为 ...
- Apache禁止ip访问
网站突然让禁止ip访问,于是就通过配置Apache达到了想要的效果. 我们网站用的是Apache+tomcat集群,所以需要配置虚拟主机,虚拟主机我在这里就不说了,不明白的上网搜搜吧,这里只说禁止ip ...
- BI测试
BI概念: 商业智能(Business Intelligence 简称BI),指数据仓库相关技术与应用的通称.指利用各种智能技术,来提升企业的商业竞争力.是帮助企业更好地利用数据提高决策质量的技术,包 ...
- jQuery-AJAX-格式
function loadInfo(){ var domainName=$("input[name='domain-name']").val(); //域名 var c ...