UVALive 4119 Always an integer (差分数列,模拟)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud
Always an integer
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu
Combinatorics is a branch of mathematics chiefly concerned with counting discrete objects. For instance, how many ways can you pick two people out of a crowd of n people? Into how many regions can you divide a circular disk by connecting n points on its boundary with one another? How many cubes are in a pyramid with square layers ranging from 1×1 to n×n cubes?

Many questions like these have answers that can be reduced to simple polynomials in n . The answer to the first question above is n(n - 1)/2 , or (n
2 - n)/2 . The answer to the second is (n
4 - 6n
3 + 23n
2 - 18n + 24)/24 . The answer to the third is n(n + 1)(2n + 1)/6 , or (2n
3 + 3n
2 + n)/6 . We write these polynomials in a standard form, as a polynomial with integer coefficients divided by a positive integer denominator.
These polynomials are answers to questions that can have integer answers only. But since they have fractional coefficients, they look as if they could produce non-integer results! Of course, evaluating these particular polynomials on a positive integer always results in an integer. For other polynomials of similar form, this is not necessarily true. It can be hard to tell the two cases apart. So that, naturally, is your task.
Input
The input consists of multiple test cases, each on a separate line. Each test case is an expression in the form (P)/D , where P is a polynomial with integer coefficients and D is a positive integer denominator. P is a sum of terms of the form Cn
E , where the coefficient C and the exponent E satisfy the following conditions:
- E is an integer satisfying 0
E
100 . If E is 0, then Cn
E is expressed as C . If E is 1, then Cn
E is expressed as Cn , unless C is 1 or -1. In those instances, Cn
E is expressed as n or - n . - C is an integer. If C is 1 or -1 and E is not 0 or 1, then the Cn
E will appear as n
E or - n
E . - Only non-negative C values that are not part of the first term in the polynomial are preceded by +.
- Exponents in consecutive terms are strictly decreasing.
- C and D fit in a 32-bit signed integer.
See the sample input for details.
Input is terminated by a line containing a single period.
Output
For each test case, print the case number (starting with 1). Then print `Always an integer' if the test case polynomial evaluates to an integer for every positive integer n . Print ` Not always an integer' otherwise. Print the output for separate test cases on separate lines. Your output should follow the same format as the sample output.
Sample Input
(n^2-n)/2
(2n^3+3n^2+n)/6
(-n^14-11n+1)/3
.
Sample Output
Case 1: Always an integer
Case 2: Always an integer
Case 3: Not always an integer
题目的意思是让你判断一个整系数多项式的值是否一直都能被一个所给的正整数所整除。
通过对差分数列的不断求导,我们可以发现,对于任意多项式P,我们只需要判断从1到k+1是否满足就行了,其中,k为多项式P中的最高次数。
接下来就是纯模拟了。
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
string s;
vector<pair<long long,long long> >vec;
long long fast_mod(long long m,long long n,long long fenm)
{
long long ret=;
long long temp=m;
while(n)
{
if(n&)
{
ret=ret*temp;
ret%=fenm;
}
temp=temp*temp;
temp%=fenm;
n>>=;
}
return ret;
}
int main()
{
ios::sync_with_stdio(false);
int cas=;
//freopen("in.in","r",stdin);
while(cin>>s)
{
if(s==".")break;
int len=s.length();
vec.clear();
int pos=;
while(pos<len&&s[pos]!='/')pos++;
long long fenm=;
int index=pos+;
while(index<len) fenm=s[index++]-''+fenm*;
if(fenm==)fenm=;
long long a,b;
long long maxx=;
bool chac=;
for(int i=;i<pos;)
{
chac=;
a=,b=;
if(s[i]=='(')i++;
if(s[i]==')'||s[i]=='/')break;
if(s[i]=='+'||s[i]=='-')
{
if(s[i]=='-')chac=;
i++;
}
while(i<pos&&s[i]!='/'&&s[i]!='n'&&s[i]!=')')
{
a*=;
a+=s[i++]-'';
}
if(a==)a=;
if(chac)a*=-;
if(s[i]=='/'||s[i]==')')
{
vec.push_back(make_pair(a,));
break;
}
i++;
if(s[i]=='^')i++;
while(i<pos&&s[i]>=''&&s[i]<='')
{
b*=;
b+=s[i++]-'';
}
if(b==)b=;
vec.push_back(make_pair(a,b));
maxx=max(b,maxx);
}
bool flag=;
long long temp;
for(int i=;i<=maxx+;i++)
{
temp=;
for(int j=;j<vec.size();j++)
{
temp+=(vec[j].first*fast_mod(i,vec[j].second,fenm))%fenm;
temp%=fenm;
}
if(temp){flag=;break;}
}
cout<<"Case "<<cas++<<": ";
if(flag)cout<<"Not always an integer"<<endl;
else cout<<"Always an integer"<<endl;
s.clear();
}
return ;
}
UVALive 4119 Always an integer (差分数列,模拟)的更多相关文章
- LA 4119 Always an integer (数论+模拟)
ACM-ICPC Live Archive 一道模拟题,题意是问一个给出的多项式代入正整数得到的值是否总是整数. 这题是一道数论题,其实对于这个式子,我们只要计算1~最高次项是否都满足即可. 做的时候 ...
- 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 ...
- uvalive 4119 Always an Interger
差分数列+字符串处理 题意:是让你判断一个整系数多项式的值是否一直都能被一个所给的正整数所整除. 通过对差分数列的不断求导,我们可以发现,对于任意多项式P,我们只需要判断n从1到k+1是否满足就行了, ...
- [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
题意: 给出一个形如(P)/D的多项式,其中P是n的整系数多项式,D为整数. 问是否对于所有的正整数n,该多项式的值都是整数. 分析: 可以用数学归纳法证明,若P(n)是k次多项式,则P(n+1) - ...
- Always an integer UVALive - 4119
题目很简单,就是求表达式(P/D)的结果是不是整数.其中P是一个整系数的多项式,D是一个正整数. 把1-k(最高次)+1都试一次就好了.结论可以总结归纳得到.(k取 0, 1, 2 .... 的情况推 ...
- UVALive 5888 Stack Machine Executor (栈+模拟)
Stack Machine Executor 题目链接: http://acm.hust.edu.cn/vjudge/problem/26636 Description http://7xjob4.c ...
随机推荐
- linux 文件类命令笔记
看一下linux的教程,不错,由于只看鸟哥有点空洞,于就是找了个视频教程,边看边学 对比了几个教程,http://edu.51cto.com/course/course_id-32.html这个教程相 ...
- uva 227 Puzzle
Puzzle A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...
- Core Data (一)备
序 恩,用Core Data也有一段时间了.大大小小的坑也都坑过了.重来没有认真的记录一次.这次需要好好的理一理Core Data.就当一次绝好的机会记录下来.也为了自己加深认识. 为什么要用Core ...
- BZOJ 3550 Vacation
http://www.lydsy.com/JudgeOnline/problem.php?id=3550 题意:有3N个数,你需要选出一些数,首先保证任意长度为N的区间中选出的数的个数<=K个, ...
- XJOI网上同步训练DAY1 T2
思路:似曾相识?...见http://www.cnblogs.com/qzqzgfy/p/5266874.html 一看时限还是4s!,于是就开开心心地打了70%的分,就是用容斥原理,就可以n^3解决 ...
- LeetCode_Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- LeetCode_Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- 查看mysql字符集及修改表结构--表字符集,字段字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- 【转】Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
原文网址:http://www.cnblogs.com/zh-ya-jing/p/4452675.html CTS Verifier算是CTS的一部分,需要手动进行,主要用于测试那些自动测试系统无法测 ...
- Textarea - 百度富文本编辑器插件UEditor
UEditor各种实例演示 Ueditor 是百度推出的一款开源在线 HTML 编辑器. 主要特点: 轻量级:代码精简,加载迅速. 定制化:全新的分层理念,满足多元化的需求.采用三层架构:1. 核心层 ...