【P1825】表达式整除
又自己写出来了好开心OvO
原题:
24点这个游戏好多人都玩过,就是给你4个数,添加相应的运算符,是否可以得到结果是24.
小x在玩了很多遍这个游戏之后,想把这个游戏给改变一下。
给你n个整数,在n个整数间,只能添加+和- 两种运算符。
比如:给你4个整数:17,5,-21,-15。
你可以构成下列8个表达式:
17+5+(-21)+15=16
17+5+(-21)-15=-14
17+5-(-21)+15=58
17+5-(-21)-15=28
17-5+(-21)+15=6
17-5+(-21)-15=-24
17-5-(-21)+15=48
17-5-(-21)-15=18
现在的问题是:给你n个数,能够构成一个表达式,让这个表达式的值能被某个给定的数整除。
上面的例子中:可以被7整除,但是不能被5整除。
k组数据,k<=20,1<=n<=10000, 2<=x<=100
这道题说是DP实际上算递推吧
关于乘出与取模的DP(递推),枚举取模后的数似乎是一个切入点
这题膜的数<=100,就可以直接开一个二维bool,visited(i,j)表示第i阶段能不能取到某个模j
由于计算过程中会出现负数,所以visited第二维开二倍,用m作为0点,每次枚举1到m*2再减去m即可枚举1-m到m-1
在每个阶段i中枚举上一阶段的1-m到m-1作为模数j,如果上阶段的j能取到,当前阶段的(j-m+a[i])%m+m,(j-m-a[i])%m+m就能取到
最后检查第n阶段能否取到m即可
需要注意:
计算中可能出现负数
visited第二维开双倍
因为是多组数据,所以每组数据visited都要清空
代码:
//3_108_120_116
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
int n,m,a[];
bool visited[][];
int main(){//freopen("ddd.in","r",stdin);
int T; cin>>T;
while(T --> ){//趋向于
memset(visited,,sizeof(visited));
cin>>n>>m;
for(int i=;i<=n;i++) a[i]=read()%m;
visited[][m]=true;
for(int i=;i<=n;i++)
for(int j=;j<m*;j++)if(visited[i-][j]){
visited[i][(j-m+a[i])%m+m]=true;
visited[i][(j-m-a[i])%m+m]=true;
}
cout<<((visited[n][m])?"Divisible":"Not divisible")<<endl;
}
return ;
}
【P1825】表达式整除的更多相关文章
- Core Java 总结(数据类型,表达式问题)
2016-10-18 整理 写一个程序判断整数的奇偶 public static boolean isOdd(int i){ return i % 2 == 1; } 百度百科定义:奇数(英文:odd ...
- [变]C#谜题(1-10)表达式篇
[变]C#谜题(1-10)表达式篇 最近偶然发现了<Java谜题>,很有意思,于是转到C#上研究一下. 本篇是关于表达式的一些内容. 谜题1:奇数性(负数的取模运算) 下面的方法意图确定它 ...
- 2、Python运算符与表达式
1.运算符 >>>3+5 8 >>>3-5 2 >>>2*3 6 >>>2**3 8 #幂 >>>4/2 2. ...
- 三、Python 变量、运算符、表达式
3.1 变量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,值可以改变,其实是将值在内存中保存地址位交给变量,变量去内存中获取,重新赋值,改变的就是内存地址位. 命名: 变量名由字母.数字 ...
- [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式
[.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...
- python表达式操作符【学习python必知必会】
运算符 描述 实例 yield x 生成器函数发送协议 lambda args: expression 生成匿名函数 x if y else z 三元选择表达式(c系列有的 python也要有 ...
- Python基础0:变量 赋值 表达式和运算符
变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...
- Spring实战学习笔记之SpEL表达式
在Spring XML配置文件中装配Bean的属性和构造参数都是静态的,而在运行期才知道装配的值,就可以使用SpEL实现 SpEL表达式的首要目标是通过计算获得某个值. ...
- Python运算符与表达式
Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符.成员运算符和身份运算符. 表达式是将不同类型的数据(常亮.变量.函数)用运算符按照一定得规则连接起来的式子. 算术运算符 ...
随机推荐
- unity代码加密for Android,mono编译
uinty3d加密推荐几篇比较好的博客链接: http://www.cppcourse.com/u3d-encryption.html http://www.xuanyusong.com/archiv ...
- php 导出对象生成代码并执行var_export和eval
var_export($obj,true) 导出一个合法的php代码,返回一个字符串 eval($str) 执行一个字符串代码 __set_state 当用var_export导出一个类时,自动调用, ...
- spring boot 跨域访问处理
问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家.可能是考虑到前后端分离,前端后端服务器不在一台机器上,出现这种跨域访问的情况.正常情况下本地访问是没有问题,但是遇到这种非 ...
- Selenium+Python的环境配置
因为项目的原因,最近较多的使用了UFT来进行自动化测试工作,半年没有使用Selenium了,于是在自己的电脑上重新配置了基于python3.x的selenium环境,配置过程大致如下: 1. Sele ...
- ubuntu安装谷歌输入法
1,sudo apt-get install fcitx-googlepinyin 2,在settings->Language Support里将keyboard input method sy ...
- MVC3之ViewData与ViewBag
首先先用代码来说话: ViewData: public ActionResult Index() { List<string> colors = new List<string> ...
- jdk 编译器 对final字段的处理
class FinalTest{ void a(){ final int i=10; int j=10; } } stack=2, ...
- C#利用摄像头拍照功能实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- tomcat中catalina是什么(转)
转自http://blog.sina.com.cn/s/blog_700aa8830101kgbk.html 谢谢博主的总结 catalina 就是Tomcat服务器使用的 Apache实现的serv ...
- C/C++代码覆盖率生成
初始状态下只有一个源代码文件 nosoul@linux:testCov> ls test.c nosoul@linux:testCov> 第一步:编译.链接.执行可执行文件 gcc -o ...