例题2.8 总是整数 LA4119
1.题目描写叙述:点击打开链接
2.解题思路:本题利用差分序列的性质解决。将1,2,..,k+1都带入表达式计算,假设对全部的i。都有D整除P(i),那么该序列全部值都为整数,否则不都为整数。
由于假设某一项不能整除。那么d^kP(i)就不是整数,因此不总是整数。
只是本题的一个难点在于怎样解析表达式,能够发现。多项式的构成都符合an^k的形式。因此能够对第i项。找到它的系数a[i]和指数p[i],从而成功解析整个表达式。
详细实现细节见代码。
3.代码:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std; #define me(s) memset(s,0,sizeof(s))
#define rep(i,n) for(int i=0;i<(n);i++)
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P; struct Polynomial
{
vector<int>a,p;
void parse_polynomial(string expr)
{
int i=0,len=expr.length();
while(i<len)
{
int sign=1;
if(expr[i]=='+')i++;
if(expr[i]=='-'){sign=-1;i++;}
int v=0;
while(i<len&&isdigit(expr[i]))v=v*10+expr[i++]-'0';//获得完整的系数
if(i==len){a.push_back(v);p.push_back(0);}//常数项
else
{
assert(expr[i]=='n');
if(v==0)v=1; //假设第一项没有系数,那么当做1
v*=sign;
if(expr[++i]=='^')//有指数
{
a.push_back(v);
v=0;
i++;
while(i<len&&isdigit(expr[i]))v=v*10+expr[i++]-'0';
p.push_back(v);
}
else //没有指数。默认指数是1
{
a.push_back(v);
p.push_back(1);
}
}
}
} int mod(int x,int MOD)
{
int n=a.size();
int ans=0;
for(int i=0;i<n;i++)
{
int m=a[i];
for(int j=0;j<p[i];j++)
m=(ll)m*x%MOD; //注意:乘法可能会溢出
ans=((ll)ans+m)%MOD; //加法也可能会溢出
}
return ans;
}
}; bool check(string expr)
{
int p=expr.find('/');
Polynomial poly;
poly.parse_polynomial(expr.substr(1,p-2));
int D=atoi(expr.substr(p+1).c_str());
for(int i=1;i<=poly.p[0]+1;i++)
if(poly.mod(i,D)!=0)return false;
return true;
} int main()
{
int kase=1;
string expr;
while(cin>>expr)
{
if(expr[0]=='.')break;
printf("Case %d: ",kase++);
if(check(expr))puts("Always an integer");
else puts("Not always an integer");
}
}
例题2.8 总是整数 LA4119的更多相关文章
- java例题_32 取一个整数a从右端开始的4~7位
1 /*32 [程序 32 左移右移] 2 题目:取一个整数 a 从右端开始的 4-7 位. 3 */ 4 5 /*分析 6 * 从右端开始的第四位相当于原数除以1000后结果的最后一位数, 7 * ...
- Shell符号展开
字符 展开 * 这个 “*” 字符意味着匹配文件名中的任意字符 shell 把 “*” 展开成了另外的东西 ,在 echo 命令被执行前. ~家目录 算术表达式展开 算术表达式展开使用这种格式: $( ...
- c#循环
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for(初始条件;循环条件;状态改变) { 循环体 } break ——中断循环,跳出 ...
- 从 shell 眼中看世界
(字符) 展开每一次你输入一个命令,然后按下 enter 键,在 bash 执行你的命令之前, bash 会对输入的字符完成几个步骤处理.我们已经知道两三个案例,怎样一个简单的字符序列,例如 “*”, ...
- CH0601 Genius ACM【倍增】【归并排序】
0601 Genius ACM 0x00「基本算法」例题 描述 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M 对数(即 2∗M 个数,不能重复使用集合中的数 ...
- php代码审计整理
目录 变量覆盖 1x01.extract 变量覆盖 定义和用法 语法 漏洞产生:使用了默认设置 攻击方法:制造变量名冲突,对于需要相等的值可以同时置空 修复:设定一个冲突时的处理规则 例题: 1x02 ...
- 【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
◇例题·III◇ 木と整数 / Integers on a Tree 只需要一个美妙的转换,这道题就会变得无比美妙…… 来源:+AtCoder 2148(ARC-063 E)+ ◆ 题目大意 给定一棵 ...
- 整数划分——真正的递归经典例题(NYOJ——90)
先注明学习博客的地址:(http://www.cnblogs.com/hoodlum1980/archive/2008/10/11/1308493.html) 题目描述:任何正整数n都可以写成n=n1 ...
- STL模板中的map的使用与例题
最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...
随机推荐
- Linux - 环境变量与位置变量
环境变量 [root@local ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 注:只有自己执行 ...
- 自然语言处理(NLP)书籍资源清单
1. 书籍 入门: <Speech and Language Processing>Dan Jurafsky ,James H. Martin 2. blog及项目
- Git 工具 - 子模块
子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使 ...
- Java-Maven:Maven清单
ylbtech-Java-Maven:Maven清单 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http ...
- 微信小程序蓝牙连接小票打印机
1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAda ...
- GObject调用父类函数
最近在分析Gstreamer的代码时,发现GstPipeline中有如下代码: result = GST_ELEMENT_CLASS (parent_class)->change_state ( ...
- 你必须知道的.net导航
http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html
- 获取URL路径参数getUrlParams
function getUrlParams(){ var reg = new RegExp("(^|&)" + name + "=([^&]*)(& ...
- for循环和数组的应用
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- Windows Server2008上安装VS2008出错及解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 win server 2008安装vs2008后报错,如下图: 然后到网上找了一种解决办法: (1)打开服务器管理器 ...