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 (n2 - 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 CnE , 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 ...
随机推荐
- hdu 1234
Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一行 ...
- Map基本用法
Map的基本用法 map内部使用的是红黑树,在map内部所有的数据都是有序的 map插入有三种方法: insert(pair<int,string>(i,str)); myMap.inse ...
- HDU 4612 (13年多校第二场1002)无向图缩点,有重边
这道题是多校的题,比赛的时候是一道纷纷水过的板刷题. 题意:给你一些无向边,只加一条边,使该图的桥最少,然后输出最少的桥. 思路:当时大致想到思路了,就是缩点之后找出最长的链,然后用总的桥数减去链上的 ...
- Linux - SSH - Password-less login - generate public key - migrate data without password between two VM servers
SUMMARY:two server : A , Bsource server : Adestination server : Bthe steps of migrate data from A to ...
- EF有外键的查询
modelBuilder.Entity<ActionMenu>().ToTable("ActionMenu"); modelBuilder.Entity<Acti ...
- Java 学习 第六篇;接口
1: 接口定义修饰符 interface 接口名{ 常量定义: 抽象方法定义:}修饰符 interface 接口名 extends 父接口表{ 常量定义: 抽象方法定义:}-> 修饰符可以是pu ...
- Oracle查看表空间及修改数据文件大小
Oracle查看表空间及修改数据文件大小 第一步:查看所有表空间及表空间大小: select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from ...
- cf D. Alternating Current
http://codeforces.com/contest/344/problem/D #include <cstdio> #include <cstring> #includ ...
- BZOJ 2436 NOI嘉年华(单调优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...
- BZOJ 1070 修车(最小费用流)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1070 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术 ...