LA 4119 (差分数列 多项式) Always an integer
题意:
给出一个形如(P)/D的多项式,其中P是n的整系数多项式,D为整数。
问是否对于所有的正整数n,该多项式的值都是整数。
分析:
可以用数学归纳法证明,若P(n)是k次多项式,则P(n+1) - P(n)为k-1次多项式。
P是n的一次多项式时,P是一个等差数列,只要验证P(1)和P(2)是D的倍数即可。
P是n的二次多项式时,只要验证第一项为D的倍数,且相邻两项的差值也是D的倍数即可。相邻两项的差值为一次多项式,所以要验证两项,加上前面验证的第一项,所以共验证P(1)、P(2)和P(3)三项。
一般地,要验证k次多项式,只要验证P(1)...P(k+1)即可。
计算多项式的值可以用高中数学课本讲到过的秦九韶算法。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std; const int maxn = + ;
int a[maxn], p;//a[i]表示n^i对应的系数,p为最高系数 void parse_polynomial(string s)
{
int i = , len = s.size();
while(i < len)
{
int sign = ;
if(s[i] == '+') i++;
if(s[i] == '-') { i++; sign = -; }
int v = ;//系数
while(i < len && isdigit(s[i])) v = v * + s[i++] - '';
v *= sign;
if(i == len) a[] = v;//常数项
else
{
if(v == ) v = sign;
int u = ;//没有指数
if(s[++i] == '^')//有指数
{
u = ;
i++;
while(isdigit(s[i])) u = u * + s[i++] - '';
}
a[u] = v;
if(u > p) p = u;
}
}
} int mod(int x, int MOD)
{
int ans = ;
for(int i = p; i >= ; i--)
{
ans = (long long) ans * x % MOD;//注意不要溢出
ans = ((long long) ans + a[i]) % MOD;
}
return ans;
} bool check(string& expr)
{
int p = expr.find('/');
parse_polynomial(expr.substr(, p-));
int D = atoi(expr.substr(p+).c_str());
for(int i = ; i <= p+; i++)
if(mod(i, D) != ) return false;
return true;
} int main()
{
//freopen("in.txt", "r", stdin); int kase = ;
string expr;
while(cin >> expr)
{
if(expr[] == '.') break;
memset(a, , sizeof(a));
p = ;
printf("Case %d: %s\n", kase++, check(expr) ? "Always an integer" : "Not always an integer");
} return ;
}
代码君
LA 4119 (差分数列 多项式) Always an integer的更多相关文章
- UVALive 4119 Always an integer (差分数列,模拟)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Always an integer Time Limit:3000MS M ...
- CF460C Present (二分 + 差分数列)
Codeforces Round #262 (Div. 2) C C - Present C. Present time limit per test 2 seconds memory limit p ...
- hdu4970 Killing Monsters (差分数列)
2014多校9 1011 http://acm.hdu.edu.cn/showproblem.php?pid=4970 Killing Monsters Time Limit: 2000/1000 M ...
- [CF 295A]Grag and Array[差分数列]
题意: 有数列a[ ]; 操作op[ ] = { l, r, d }; 询问q[ ] = { x, y }; 操作表示对a的[ l, r ] 区间上每个数增加d; 询问表示执行[ x, y ]之间的o ...
- [CF 276C]Little Girl and Maximum Sum[差分数列]
题意: 给出n项的数列A[ ], q个询问, 询问 [ l, r ] 之间项的和. 求A的全排列中该和的最大值. 思路: 记录所有询问, 利用差分数列qd[ ], 标记第 i 项被询问的次数( 每次区 ...
- LA 4119 Always an integer (数论+模拟)
ACM-ICPC Live Archive 一道模拟题,题意是问一个给出的多项式代入正整数得到的值是否总是整数. 这题是一道数论题,其实对于这个式子,我们只要计算1~最高次项是否都满足即可. 做的时候 ...
- LA 4119 - Always an integer
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- LUOGU P1438 无聊的数列 (差分+线段树)
传送门 解题思路 区间加等差数列+单点询问,用差分+线段树解决,线段树里维护的就是差分数组,区间加等差数列相当于在差分序列中l位置处+首项的值,r+1位置处-末项的值,中间加公差的值,然后单点询问就相 ...
- uvalive 4119 Always an Interger
差分数列+字符串处理 题意:是让你判断一个整系数多项式的值是否一直都能被一个所给的正整数所整除. 通过对差分数列的不断求导,我们可以发现,对于任意多项式P,我们只需要判断n从1到k+1是否满足就行了, ...
随机推荐
- 怎样开启SQL数据库服务
使用数据库时开启服务是需要的,我给大家具体介绍几种方式开启SQL Sever 服务.这几种我都用图文的形式用三个开启方式给你展示,对于不会开启服务的朋友可以学习下,这些前提是你的电脑安装了SQL数据库 ...
- IE6兼容inline-block的方法
或许有朋友会对IE不支持 display:inline-block 属性,表示疑问或者反对.说:“我在 IE 中对 a 或者 span 等内联元素使用 display:inline-block 一直是 ...
- Matlab中@与函数调用
function m f=@(x) x^2; y(f,3); function y(f,x) disp(num2str(f(x))); end end 函数调用另一个函数的时候,把另一个函数名作为参数 ...
- jquery的一些用法
一.选择器 单选按钮:$(this).find(".answer").find("input[name='answer_" + id + "']:ch ...
- 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试
相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...
- Binary Search Tree In-Order Traversal Iterative Solution
Given a binary search tree, print the elements in-order iteratively without using recursion. Note:Be ...
- POJ3468 A Simple Problem With Integers 树状数组 区间更新区间询问
今天学了很多关于树状数组的技巧.一个是利用树状数组可以简单的实现段更新,点询问(二维的段更新点询问也可以),每次修改只需要修改2个角或者4个角就可以了,另外一个技巧就是这题,原本用线段树做,现在可以用 ...
- [PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返回结果数据
<?php $dbname = 'VnOTxPFWoxzUBLtrQCCg'; $host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP'); $port = geten ...
- IIS常见错误及解决
IIS常见错误 1.HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决办法: w ...
- lintcode:二叉树的中序遍历
题目: 二叉树的中序遍历 给出一棵二叉树,返回其中序遍历 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3,2]. 挑战 你能使用非递归算法来实现么? 解题: 程序直接来源 ...