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是否满足就行了, ...
随机推荐
- PHP 中的BOM BUG
对于PHP,一个小小让我不敢置信的事情很多,包括引用变量哪么迟钝,普通变量哪么牛B我己经很意外,甚至现在竟然出现了BOM头的BUG. 在PHP中,会引用很多小文件,include或require,哪么 ...
- stdint.h 文件 int8_t uint8_t int16_t uint16_t
http://blog.chinaunix.net/uid-26588712-id-3068151.html c++ 数据类型 按照posix标准,一般整型对应的*_t类型为:1字节 uint ...
- AngularJS 基础
1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...
- tomcat 解析(五)-Tomcat的核心组成和启动过程
声明:源码版本为Tomcat 6.0.35 前面的文章中介绍了Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话,整个Tomcat ...
- Oracle 9 - 分析undo和snapshot too old错误
什么操作会生成undo INSERT生成的UNDO最少,只要记录新的rowid UPDATE生成的undo多一点,它要记录修改前的数据中的那部分. DELETE生成最多的undo, 因为它要记录整行被 ...
- LeeCode 1-Two Sum
Two Sum Total Accepted: 125096 Total Submissions: 705262 Question Solution Given an array of integer ...
- 向安富利(Avnet)学什么?
这个只做电子元器件分销的企业,居然能数次进入<财富>排行榜.看来,这是一个在供应链上创造价值的高手.在企业竞争已经集中到供应链竞争的今天,安富利的成功之道,无疑具有特别的意义. 2000年 ...
- java:类集框架
类集框架:jdk提供的一系列类和接口,位于java.util包当中,主要用于存储和管理对象,主要分为三大类:集合.列表和映射. 集合Set:用于存储一系列对象的集合.无序.不允许重复元素. 列表Lis ...
- 每用户订阅上的所有者 SID 不存在 (异常来自 HRESULT:0x80040207)
出现这个问题是因为pQueryFilter.WhereClause = "RoomNumber=" +cmbFromPoint.SelectedItem;中的cmbFromPoin ...
- 57. Insert Interval
题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...